一、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代理仓库):
json{ "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):同时支持发布和快照
-
配置示例:
json{ "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)
-
作用:聚合多个仓库,提供统一的访问入口。
-
特点:
- 虚拟仓库,不实际存储内容
- 可包含代理、宿主或其他组仓库
- 按顺序搜索成员仓库
-
配置示例:
bash{ "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 仓库
bash# 配置示例 maven-central (proxy) # Maven中央仓库代理 maven-releases (hosted) # 内部发布版本 maven-snapshots (hosted) # 内部快照版本 maven-public (group) # 聚合所有Maven仓库 -
Docker 仓库
bash# 类型 docker-hosted # 存储内部Docker镜像 docker-proxy # 代理Docker Hub/Registry docker-group # 聚合多个Docker仓库 # 配置要点 - 需要配置HTTP/HTTPS端口 - 支持Blob存储优化 - 可配置清理策略 -
NPM 仓库
bash# 类型 npm-proxy # 代理npm官方仓库 npm-hosted # 存储私有npm包 npm-group # 聚合npm仓库 # 使用示例 npm config set registry http://nexus:8081/repository/npm-group/
三、Docker 部署 Nexus3
3.1 拉取镜像
bash
# 拉取 Nexus3 官方镜像
docker pull sonatype/nexus3:latest
3.2 创建挂载目录
bash
# 创建数据目录(用于持久化存储
mkdir -p /usr/local/src/nexus/nexus-data
chmod 777 /usr/local/src/nexus/nexus-data
3.3 运行容器
-
基础运行命令
bash# 最简单的方式 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 -
完整配置命令(生产环境推荐)
bashdocker 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 初始访问
-
等待容器启动(首次启动需要 2-5 分钟)
-
默认管理员账号:
-
用户名:admin
-
初始密码:查看容器日志获取
bash# 查看容器日志,找到初始密码 docker logs nexus3 | grep "admin.password" # 或者直接查看文件 docker exec nexus3 cat /nexus-data/admin.password
-
-
登录账号:admin
-
按提示修改密码

3.5 基本设置
-
禁用匿名访问
bash设置 → Security → Anonymous Access 取消勾选 "Allow anonymous users to access the server"
-
创建用户
bash设置 → 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 仓库
bash设置 → Repository → Repositories → Create repository 选择 docker (hosted)
-
配置 Docker 仓库
bashName: docker-hosted HTTP: 8082 # 注意此端口需要与容器映射端口一致 Deployment policy: Allow redeploy
五、仓库使用
5.1 Maven 仓库使用
-
Maven 配置
bash<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 配置:
bash<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> -
发布和拉取
bash# 发布到 Nexus mvn clean deploy # 从 Nexus 拉取依赖 mvn clean install
5.2 Docker 仓库使用
-
配置 Docker 客户端
bash# 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 创建的用户 -
推送/拉取镜像
bash# 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)
bash
设置 → Security → Roles
设置 → Security → Privileges
- 创建角色(Role)
- 分配权限(Privilege)
- 用户绑定角色
6.2 LDAP 集成
bash
设置 → Security → LDAP
- 连接公司 LDAP/AD 进行用户认证
6.3 清理策略
bash
设置 → Repository → Cleanup Policies
- 基于时间清理
- 基于版本数清理
- 正则表达式匹配
6.4 Webhook
bash
设置 → System → Capabilities → Webhook
配置事件通知,如:
- 制品上传
- 清理完成
- 系统异常
七、最佳实践
- 定期备份:备份整个 nexus-data 目录
- 监控告警:设置磁盘使用率监控
- 权限细分:按团队分配最小必要权限
- 定期清理:配置自动清理策略
- 版本控制:重要配置导出备份
- HTTPS:生产环境启用 HTTPS
- 高可用:考虑集群部署(Nexus Pro 版本)