一、快速部署(Docker 方式)
首先确保服务器已安装 Docker。执行以下命令拉取并启动 Nexus 3:
bash
docker run -d --name nexus \
-p 8081:8081 \
-v /your/nexus-data:/nexus-data \
sonatype/nexus3
-p 8081:8081:将容器的 8081 端口映射到宿主机,后续通过http://<服务器IP>:8081访问。-v /your/nexus-data:/nexus-data:将数据持久化到宿主机目录,避免容器删除后数据丢失。
启动后稍等 1-2 分钟,在浏览器中访问 http://<IP>:8081。
二、初始登录与基础设置
-
获取初始密码
进入容器查看自动生成的
admin密码:bashdocker exec -it nexus cat /nexus-data/admin.password复制输出的一串字符。
-
登录并修改密码
浏览器打开 Nexus 界面,点击右上角
Sign in,用户名admin,密码粘贴上一步获取的内容。系统会强制要求你修改密码,按提示设置新密码。 -
禁用匿名访问(可选但推荐)
点击顶部齿轮图标进入
Administration→Security→Anonymous Access,去掉Allow anonymous users to access the server的勾选。这样可以要求所有拉取和发布都需要认证,保障私服安全。
三、理解三种核心仓库类型
在 Nexus 里,一切制品管理都围绕仓库展开。你需要明确这三种仓库的角色:
- proxy(代理仓库):代理外部远程仓库(如 Maven Central、Docker Hub)。本地客户端请求时,Nexus 先查缓存,没有再去远程拉取并缓存,实现加速和离线可用。
- hosted(托管仓库):存放你们自己开发的内部制品(如公司项目的 jar、docker 镜像等)。有明确的版本策略(Release 或 Snapshot)。
- group(仓库组):将多个 proxy 和 hosted 仓库聚合成一个 URL,开发者只需配置这一个地址,就能访问组内所有仓库的内容。
四、配置 Maven 私服(最经典的使用场景)
假设你要为 Java 项目搭建 Maven 私服,典型配置步骤如下:
1. 创建 Maven 代理仓库
- 进入
Administration→Repository→Repositories,点击Create repository。 - 选择
maven2 (proxy)。 - Name :填写
maven-central。 - Remote storage :填写
https://repo1.maven.org/maven2/(或使用阿里云镜像https://maven.aliyun.com/repository/public)。 - 其他默认,点击页面底部
Create repository。
用同样方法可再创建一个代理 Maven Snapshot 的仓库(如指向 https://s01.oss.sonatype.org/content/repositories/snapshots/),非必须。
2. 创建 Maven 托管仓库(存放内部制品)
- 再次
Create repository→maven2 (hosted)。 - 创建两个:
- Name :
maven-releases, Version policy :Release。 - Name :
maven-snapshots, Version policy :Snapshot。
- Name :
- 对于
maven-releases,Deployment policy建议选择Disable redeploy,防止已发布的发行版被覆盖。
3. 创建 Maven 仓库组
Create repository→maven2 (group)。- Name :
maven-public。 - 在
Member repositories栏中,将你刚创建的maven-central、maven-releases、maven-snapshots都添加进去,并确保代理仓库在最上方、托管仓库在下(顺序无关紧要,但通常代理放前面)。点击创建。
现在你有了一个统一的私服地址,后续所有客户端配置都指向它。
4. 配置客户端(开发者本地或 CI 服务器)
在 Maven 的 settings.xml 中(通常位于 ~/.m2/settings.xml 或 Maven 安装目录的 conf/settings.xml)添加:
xml
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>你的admin密码</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://<Nexus服务器IP>:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<mirrorOf>*</mirrorOf>表示所有请求都通过该私服。如果只想代理中央仓库,可改为central。- 注意 URL 最后要带
/。
配置完成后,Maven 依赖拉取将全部通过你的私服。
5. 发布内部制品到私服
在项目的 pom.xml 中增加分发仓库配置:
xml
<distributionManagement>
<repository>
<id>nexus</id>
<url>http://<Nexus服务器IP>:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<url>http://<Nexus服务器IP>:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
执行 mvn deploy 即可将制品推送至对应的托管仓库。注意 id 必须与 settings.xml 中 server 的 id 一致,以便认证。
五、配置 Docker 私服
Nexus 同样擅长管理 Docker 镜像私服。配置要点:
1. 创建 Docker 托管仓库
Create repository→docker (hosted)。- Name :
docker-hosted。 - HTTP 端口:填写一个非 8081 的端口,如
8082(需要映射到宿主机,启动容器时增加-p 8082:8082)。 - 勾选
Force basic authentication以启用认证,避免未授权推送。 - 创建后,仓库地址为
http://<IP>:8082。
(也可按需创建 Docker proxy 指向 Docker Hub,再创建 group,但托管仓库已可直接 push/pull)
2. 客户端使用
-
登录私服:
docker login http://<IP>:8082,输入 Nexus 的 admin 账号密码。 -
推送镜像:
bashdocker tag my-app:latest <IP>:8082/my-app:latest docker push <IP>:8082/my-app:latest -
拉取镜像:
docker pull <IP>:8082/my-app:latest
注意 :Docker 要求使用 HTTPS 或配置非安全仓库。测试环境可在 /etc/docker/daemon.json 添加:
json
{
"insecure-registries": ["<IP>:8082"]
}
然后重启 Docker。生产环境务必配置 TLS 证书。
六、用户与权限管理(多团队协作)
对于多人或多团队共用的私服,必须限制权限。
-
创建用户
Administration→Security→Users→Create local user。填写 ID、名字、密码,并设置状态为Active。 -
内置角色与自定义角色
系统预置了
nx-admin(全部权限)、nx-anonymous(匿名权限)等。建议创建自定义角色:Security→Roles→Create role。- 选择权限:如
nx-repository-view-maven2-*-read赋予只读,nx-repository-view-maven2-*-add和-edit赋予发布能力。可根据仓库名称精准授权。
-
分配角色给用户
编辑用户,在
Roles Granted中添加对应角色即可。
典型场景 :给 CI 系统创建一个专用账号,赋予 maven-releases 和 maven-snapshots 的写入权限,开发者只有读取权限。