一、Nexus 简介
Nexus Repository Manager 3(简称Nexus3)是Sonatype公司推出的一款仓库管理工具,主要用于存储、管理和分发:
- Maven(Java)依赖
- Docker 镜像
- npm(Node.js)包
- PyPI(Python)包
- NuGet(.NET)包
- APT(Debian)包
- Yum(RPM)包
- Go 模块
- 等多种开发语言的组件
二、Nexus 核心概念
2.1 仓库类型
Nexus3的仓库类型主要分为三大类:代理仓库(Proxy Repository)、宿主仓库(Hosted Repository)和仓库组(Repository Group)。
代理仓库(Proxy Repository)
- 作用:作为远程仓库的缓存代理,提高访问速度并减少外部网络流量。
- 特点:
- 缓存远程仓库内容
- 支持负缓存(缓存404响应)
- 可设置缓存策略
- 配置示例(Maven代理仓库):{
"name": "maven-central",
"type": "proxy",
"format": "maven2",
"url": "https://repo.maven.apache.org/maven2",
"storage": {
"blobStoreName": "default",
"strictContentTypeValidation": true
},
"proxy": {
"remoteUrl": "https://repo.maven.apache.org/maven2",
"contentMaxAge": 1440,
"metadataMaxAge": 1440
},
"negativeCache": {
"enabled": true,
"timeToLive": 1440
},
"httpClient": {
"blocked": false,
"autoBlock": true,
"connection": {
"retries": 0,
"userAgentSuffix": "Nexus",
"timeout": 60,
"enableCircularRedirects": false,
"enableCookies": false
}
}
}
宿主仓库(Hosted Repository)
- 作用:存储企业内部生成的制品。
- 子类型:
- 发布仓库(Releases):存储稳定版本
- 快照仓库(Snapshots):存储开发中版本
- 混合仓库(Mixed):同时支持发布和快照
- 配置示例:{
"name": "maven-releases",
"type": "hosted",
"format": "maven2",
"online": true,
"storage": {
"blobStoreName": "default",
"writePolicy": "ALLOW_ONCE", // 防止覆盖
"strictContentTypeValidation": true
},
"cleanup": {
"policyNames": ["weekly-cleanup"]
},
"maven": {
"versionPolicy": "RELEASE", // RELEASE, SNAPSHOT 或 MIXED
"layoutPolicy": "STRICT" // STRICT 或 PERMISSIVE
}
}
仓库组(Repository Group)
- 作用:聚合多个仓库,提供统一的访问入口。
- 特点:
- 虚拟仓库,不实际存储内容
- 可包含代理、宿主或其他组仓库
- 按顺序搜索成员仓库
- 配置示例:{
"name": "maven-public",
"type": "group",
"format": "maven2",
"online": true,
"storage": {
"blobStoreName": "default",
"strictContentTypeValidation": true
},
"group": {
"memberNames": [
"maven-releases",
"maven-snapshots",
"maven-central",
"third-party"
]
}
}
2.2 仓库格式支持
Nexus3 支持多种包管理格式:
-
Maven 仓库
# 配置示例
maven-central (proxy) # Maven中央仓库代理
maven-releases (hosted) # 内部发布版本
maven-snapshots (hosted) # 内部快照版本
maven-public (group) # 聚合所有Maven仓库 -
Docker 仓库
# 类型
docker-hosted # 存储内部Docker镜像
docker-proxy # 代理Docker Hub/Registry
docker-group # 聚合多个Docker仓库# 配置要点
– 需要配置HTTP/HTTPS端口
– 支持Blob存储优化
– 可配置清理策略 -
NPM 仓库
# 类型
npm-proxy # 代理npm官方仓库
npm-hosted # 存储私有npm包
npm-group # 聚合npm仓库# 使用示例
npm config set registry http://nexus:8081/repository/npm-group/
三、Docker 部署 Nexus3
3.1 拉取镜像
# 拉取 Nexus3 官方镜像
docker pull sonatype/nexus3:latest
3.2 创建挂载目录
# 创建数据目录(用于持久化存储
mkdir -p /usr/local/src/nexus/nexus-data
chmod 777 /usr/local/src/nexus/nexus-data
3.3 运行容器
-
基础运行命令
# 最简单的方式
docker run -d –name nexus3 -p 8081:8081 sonatype/nexus3# 推荐方式(挂载数据卷)
docker run -d \\
–name nexus3 \\
-p 8081:8081 \\
-v nexus-data:/nexus-data \\
sonatype/nexus3:latest -
完整配置命令(生产环境推荐)
docker run -d \\
–name nexus3 \\
–restart unless-stopped \\
-p 8081:8081 \\
-p 5000:5000 \\ # Docker 仓库端口(可选)
-v /usr/local/src/nexus/nexus-data:/nexus-data \\
-v /etc/localtime:/etc/localtime:ro \\
-e INSTALL4J_ADD_VM_PARAMS="-Xms256M -Xmx512M -XX:MaxDirectMemorySize=1g" \\
-e NEXUS_CONTEXT="/" \\
sonatype/nexus3:latest- -d:后台运行
- –name nexus3:容器名称
- –restart unless-stopped:自动重启策略,其他选项:no(不重启)、always(总是重启)、on-failure(失败时重启)
- -p 8081:8081:映射 Web 管理端口:主机8081 -> 容器8081
- -p 5000:5000:Docker 私有仓库端口
- -v nexus-data:/nexus-data:挂载数据卷(持久化存储),将主机目录挂载到容器内
- -v /etc/localtime:/etc/localtime:ro:时区同步,将主机的时区文件挂载到容器内
- -e INSTALL4J_ADD_VM_PARAMS:JVM 内存参数设置
- -e NEXUS_CONTEXT="/":上下文路径(默认为根目录)
3.4 初始访问
- 用户名:admin
- 初始密码:查看容器日志获取# 查看容器日志,找到初始密码
docker logs nexus3 | grep "admin.password"# 或者直接查看文件
docker exec nexus3 cat /nexus-data/admin.password

3.5 基本设置
禁用匿名访问
设置 → Security → Anonymous Access
取消勾选 "Allow anonymous users to access the server"

创建用户
设置 → Security → Users → Create local user
填写:ID、First Name、Last Name、Email、Password
选择 Role:nx-admin(管理员权限)

四、配置各种类型仓库
4.1 Maven 仓库配置
- 创建代理仓库(Proxy)
- 进入 设置 → Repository → Repositories → Create repository
- 选择 maven2 (proxy)
- 配置示例:
- Name: maven-central
- Remote storage: https://repo1.maven.org/maven2/
- Version policy: Release
- Layout policy: Strict

-
创建宿主仓库(Hosted)
- 选择 maven2 (hosted)
- 配置示例:
- Name: maven-releases
- Version policy: Release
- Deployment policy: Allow redeploy
-
创建仓库组(Group)
- 选择 maven2 (group)
- 将前面创建的仓库加入组:
- maven-central
- maven-releases
- maven-snapshots
4.2 Docker 仓库配置
启用 Docker 仓库
设置 → Repository → Repositories → Create repository
选择 docker (hosted)

配置 Docker 仓库
Name: docker-hosted
HTTP: 8082 # 注意此端口需要与容器映射端口一致
Deployment policy: Allow redeploy
五、仓库使用
5.1 Maven 仓库使用
Maven 配置
<settings>
<servers>
<server>
<id>nexus</id>
<username>deployment</username>
<password>your-password</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
</settings>
项目 pom.xml 配置:
<distributionManagement>
<repository>
<id>nexus</id>
<name>Releases</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Snapshots</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
发布和拉取
# 发布到 Nexus
mvn clean deploy
# 从 Nexus 拉取依赖
mvn clean install
5.2 Docker 仓库使用
配置 Docker 客户端
# 1. 配置 insecure-registries(Linux/Mac)
sudo vim /etc/docker/daemon.json
{
"insecure-registries": ["localhost:8082"]
}
# 重启 Docker
sudo systemctl restart docker
# 2. 登录到 Nexus
docker login localhost:8082
# 用户名/密码:Nexus 创建的用户
推送/拉取镜像
# 1. 给镜像打标签
docker tag my-image:latest localhost:8082/my-image:latest
# 2. 推送到 Nexus
docker push localhost:8082/my-image:latest
# 3. 从 Nexus 拉取
docker pull localhost:8082/my-image:latest
# 4. 拉取远程镜像(通过代理)
# Nexus 会自动缓存 Docker Hub 的镜像
docker pull localhost:8082/library/nginx:latest
六、高级功能
6.1 权限管理(RBAC)
设置 → Security → Roles
设置 → Security → Privileges
- 创建角色(Role)
- 分配权限(Privilege)
- 用户绑定角色
6.2 LDAP 集成
设置 → Security → LDAP
- 连接公司 LDAP/AD 进行用户认证
6.3 清理策略
设置 → Repository → Cleanup Policies
- 基于时间清理
- 基于版本数清理
- 正则表达式匹配
6.4 Webhook
设置 → System → Capabilities → Webhook
配置事件通知,如:
- 制品上传
- 清理完成
- 系统异常



