Sonatype Nexus Repository 3 是企业里最常见的制品库——既可以代理 Maven Central、npm、Docker Hub,也可以做内部 hosted 仓库托管私有 jar / docker 镜像,还可以把多个仓库组合成"仓库组"对外暴露。这篇文章把 Nexus 3 的部署、仓库创建、maven 镜像、Docker 仓库、第三方 jar 上传实战一次性收齐。
阅读对象:需要搭建企业 Maven 私服的 Java 团队;需要私有 Docker Registry;需要上传第三方包(公司内部 SDK)的开发。 覆盖范围:Sonatype Nexus 3 部署(启动慢要 12 分钟)、maven 仓库 4 种类型(proxy/hosted/group)、maven settings.xml 镜像配置、Docker 仓库(hosted + Bearer Token)、第三方 jar 上传(mvn deploy:deploy-file)、Blob 清理(Compact blob store)。
一、Nexus 在企业里的角色
| 角色 | 价值 |
|---|---|
| 代理公共仓库 | Maven Central 镜像、npm 镜像、PyPI 镜像 |
| 托管内部 jar | 公司内部 SDK / 框架 |
| 托管第三方 jar | 没上传到 Maven Central 的商业 SDK |
| 私有 Docker Registry | docker push/pull 内部镜像 |
| 仓库组(group) | 把多个仓库合并,settings.xml 配一个 URL |
| 权限 / 审计 | RBAC、操作审计、清理策略 |
二、Nexus 3 部署
2.1 拉取与启动
| |
关键:
- 端口
8081= Web UI- 端口
8082= Docker Registry(V2 API)- 目录
/nexus-data持久化(必须可写,UID 200)- 首次启动要 12 分钟(拉取 + 初始化)
2.2 JVM 调优(生产必加)
| |
Why 2703m? Nexus 推荐 4GB JVM 堆(
-Xms = -Xmx = 2.7GB,留 1.3GB 给 OS + MetaSpace)。
2.3 首次登录
| |
- 访问
http://<host>:8081 - 用户名
admin - 密码在
/home/docker/nexus/data/admin.password
| |
- 登录后强制改密码
- 关闭匿名访问(“Settings → Security → Anonymous Access” 设为 disabled)
2.4 启动失败排错
症状:org.apache.http.conn.ConnectTimeoutException: Connect to sonatype-download.global.ssl.fastly.net:443
解决:登录 → System → Capabilities → 禁用 Outreach:Management
三、仓库类型与创建
3.1 四种仓库类型
| 类型 | 作用 | 典型用例 |
|---|---|---|
| proxy | 代理远程公共仓库 | maven-central(代理 Maven Central) |
| hosted | 托管本地仓库 | maven-releases(内部发布版)、maven-snapshots(快照版) |
| group | 把多个仓库组合 | maven-public(把 maven-central / releases / snapshots 合并) |
| docker (proxy/hosted/group) | Docker 镜像仓库 | docker-hosted |
3.2 默认仓库
| 名称 | 类型 | 格式 | 备注 |
|---|---|---|---|
maven-central | proxy | maven2 | Maven Central(https://repo1.maven.org/maven2/) |
maven-releases | hosted | maven2 | 发行版 |
maven-snapshots | hosted | maven2 | 快照版 |
maven-public | group | maven2 | 把上面三个合并,客户端配这个 |
nuget-* | various | nuget | .NET 用,不关心 |
3.3 创建阿里云 Maven 镜像
场景:Maven Central 在国内太慢,加阿里云代理并放在 group 第一位。
- Create repository → maven2 (proxy)
- 配置:
- Name:
aliyun-maven-central - URL:
https://maven.aliyun.com/repository/public
- Name:
- 在
maven-publicgroup 里把aliyun-maven-central加进去,顺序调到最上面
四、Maven 客户端配置
4.1 settings.xml 镜像
| |
<mirrorOf>*</mirrorOf>:拦截所有 Maven 请求,全部走 Nexus。生产环境推荐。
4.2 部署认证
| |
服务器 ID 要和
pom.xml的<distributionManagement>一致(如releases、snapshots)。
五、Docker 私有仓库
5.1 创建 docker-hosted 仓库
- Create repository → docker (hosted)
- 配置:
- Name:
docker-hosted(自定义) - HTTP 端口:
8082(必须勾选"启用 HTTP") - 启用
Allow anonymous docker pull(按需) - Blob store: 新建
docker
- Name:
5.2 启用 Docker Bearer Token
- Security → Realms
- 把
Docker Bearer Token移到 Active 列表
5.3 防火墙 + 端口映射
| |
5.4 客户端使用
不安全模式(HTTP):
| |
| |
安全模式(HTTPS):配域名 + 证书,daemon.json 不需要 insecure-registries。
六、上传第三方 jar 包
6.1 创建 3rdParty 仓库
- Create repository → maven2 (hosted)
- Name:
3rdParty - Deployment policy:
Allow redeploy(允许重复部署)
6.2 加入 maven-public group
把 3rdParty 加进 maven-public,方便客户端引用。
6.3 mvn settings.xml 加 server
| |
6.4 上传 jar
| |
6.5 引用上传的 jar
| |
七、清理 Blob 节省空间
Docker 镜像 push/pull 多了,Blob store 会越来越大。Nexus 提供了"Compact blob store"任务清理。
- 登录 Nexus → Administration → System → Tasks
- Create task →
Admin - Compact blob store - 选 blob store(如
docker) - 设置定时(如每周日凌晨)
- 触发后立即会清理"软删除"的数据(只保留一个 tag 引用的 blob,删除未引用的)
八、Nexus 3 vs Harbor vs Artifactory
| 维度 | Nexus 3 | Harbor | Artifactory |
|---|---|---|---|
| 类型 | 通用制品库 | 镜像仓库为主 | 通用制品库 |
| 镜像支持 | 一般(V2 API) | 最强(专门为镜像设计) | 强 |
| Maven 支持 | 最强 | 无 | 强 |
| npm / pypi 支持 | 强 | 无 | 强 |
| 免费版功能 | 完整 | 完整 | 社区版受限 |
| 企业级 | OSS / PRO | OSS | OSS / PRO |
| 适合 | Java 团队 | Docker 镜像为主 | 大企业、混合制品 |
经验法则:
- Java 团队为主 → Nexus 3(最稳)
- 纯 Docker 镜像管理 → Harbor(更专业)
- 多语言、多制品类型(npm / pypi / docker / maven / go)→ Artifactory(最全)
九、2024+ 视角补充
本文写于 2024-12,2025-2026 期间 Nexus 关键演进:
- Sonatype Nexus Repository 3.78+ LTS(2025 起):JDK 17 / 21 强制要求,3.70 之前版本 EOL——升级必做
- Nexus Repository Pro 商业化加强:聚焦 C++ / .NET / AI 模型 制品管理(Blob 存储 + 元数据 + 审计)
- Container Registry 体验升级:3.75+ Docker Bearer Token 性能优化,K8s 频繁拉镜像场景比之前快 30%
- AI 模型仓库(2025-Q3 引入):原生支持 HuggingFace / Ollama 格式模型制品——LLM 团队的私有模型管理
- SBOM + 漏洞扫描(Pro):CycloneDX 1.5+ / SPDX 2.3 报告自动生成
- REST API 2.x 稳定:老的
service/rest/v1进入维护,新接口service/rest/v2推荐 - Terraform Provider 全面支持:IaC 方式管理 Repository——企业合规场景刚需
实战建议(2025-2026 视角):Java 团队 Nexus 仍是首选;多语言 / AI 模型场景考虑迁移到 JFrog Artifactory 或 Harbor + 自建 AI 模型仓库组合;纯 Docker 镜像管理 Harbor 2.13+ 更专业。
十、扩展阅读
- Nexus 官方仓库:github.com/sonatype/nexus-public
- Nexus 官方文档:help.sonatype.com
- 阿里云 Maven 镜像:maven.aliyun.com
- Maven 镜像配置指南:maven.apache.org/guides
