Nexus
概述
Nexus Repository Manager 是一个强大的开源仓库管理工具,主要用于存储和管理软件包、构件和依赖项。它支持多种格式,帮助开发团队更有效地管理其开发和发布流程。
核心功能:
- 多格式支持:支持 Maven、npm、Docker、NuGet、PyPI、RubyGems、Go 等 20+ 种仓库格式
- 代理仓库:缓存远程仓库(如 Maven Central、npmjs),加速构建并减少网络依赖
- 私有仓库:托管企业内部构件和制品,支持版本管理和访问控制
- 仓库组:聚合多个仓库,提供统一访问地址
- 安全审计:支持用户权限管理、LDAP 集成和内容审计
典型应用场景:
- Java(Maven)项目的依赖管理
- Docker 镜像私有仓库
- 前端项目(npm)的包管理
- 企业内部制品统一管理
部署准备
1. 系统要求
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核+ |
| 内存 | 2 GB | 4 GB+ |
| 硬盘 | 20 GB | 50 GB+ |
| Docker | 18.06+ | 最新版 |
注意:Nexus 对资源消耗较大,生产环境建议 4 核 4GB 以上配置。
2. 创建 Docker Compose 编排文件
docker-compose.yaml:
services:
nexus:
image: sonatype/nexus3:3.67.1-java11
container_name: nexus
restart: always
environment:
- TZ=Asia/Shanghai
- NEXUS_CONTEXT=/
- INSTALL4J_ADD_VM_PARAMS=-Xms512m -Xmx2g -XX:MaxDirectMemorySize=2g
ports:
- "8081:8081"
volumes:
- nexus_data:/nexus-data
deploy:
resources:
limits:
cpus: "2"
memory: "4G"
volumes:
nexus_data:3. 环境变量说明
| 变量 | 说明 |
|---|---|
NEXUS_CONTEXT |
上下文路径,默认 / |
INSTALL4J_ADD_VM_PARAMS |
JVM 参数,-Xms 初始堆,-Xmx 最大堆,MaxDirectMemorySize 直接内存 |
数据持久化:
nexus_dataVolume 存储所有仓库数据、配置和日志,删除 Volume 将丢失全部数据。
启动服务
docker compose up -d查看启动日志(首次启动初始化耗时较长,约 2-5 分钟):
docker logs nexus -f --tail=50验证访问
curl http://127.0.0.1:8081在浏览器中打开 http://<服务器IP>:8081 即可访问 Nexus。
初始配置
1. 获取管理员密码
首次启动时,Nexus 会为 admin 用户生成随机密码,查看方式如下:
# 进入容器
docker exec -it nexus /bin/bash
# 查看初始密码
cat /nexus-data/admin.password或直接执行:
docker exec nexus cat /nexus-data/admin.password输出示例:abcd1234-efgh-5678-ijkl-9012mnop3456
2. 登录并重置密码
- 浏览器访问
http://<服务器IP>:8081 - 点击右上角 Sign In,用户名
admin,密码为上述初始密码 - 按提示设置新密码
3. 启用匿名访问(可选)
根据提示选择是否启用匿名访问:
- 如需允许未登录用户拉取公开仓库,选择 Enable anonymous access
- 如仅允许认证用户访问,选择 Disable anonymous access
常用管理命令
| 操作 | 命令 |
|---|---|
| 启动 Nexus | docker compose up -d |
| 停止 Nexus | docker compose stop |
| 重启 Nexus | docker compose restart |
| 查看状态 | docker compose ps |
| 查看日志 | docker logs nexus -f --tail=100 |
| 进入容器 | docker exec -it nexus /bin/bash |
常见仓库类型
| 仓库类型 | 说明 | 适用场景 |
|---|---|---|
| hosted | 本地托管仓库 | 存储企业内部开发的制品 |
| proxy | 代理远程仓库 | 缓存中央仓库(Maven Central、npmjs 等) |
| group | 仓库组 | 聚合多个仓库,提供统一访问地址 |
创建 Maven 代理仓库示例
- 登录 Nexus → Repository → Create repository
- 选择 maven2 (proxy)
- 填写:
- Name:
maven-central-proxy - Remote storage:
https://repo1.maven.org/maven2/ - 其他默认即可
- Name:
- 点击 Create repository
创建 Docker 私有仓库示例
- 登录 Nexus → Repository → Create repository
- 选择 docker (hosted)
- 填写:
- Name:
docker-private - HTTP:端口
8082 - Enable Docker V1 API:勾选
- Name:
- 点击 Create repository
配置 Nexus 使用外部数据库(可选)
默认使用 H2 嵌入式数据库,生产环境建议切换至 PostgreSQL:
services:
nexus:
image: sonatype/nexus3:3.67.1-java11
container_name: nexus
restart: always
environment:
- TZ=Asia/Shanghai
- NEXUS_CONTEXT=/
- NEXUS_DB_TYPE=postgresql
- NEXUS_DB_HOST=postgres
- NEXUS_DB_PORT=5432
- NEXUS_DB_NAME=nexus
- NEXUS_DB_USER=nexus
- NEXUS_DB_PASSWORD=nexus123
ports:
- "8081:8081"
volumes:
- nexus_data:/nexus-data
depends_on:
- postgres
postgres:
image: postgres:15
container_name: nexus-postgres
restart: always
environment:
- POSTGRES_USER=nexus
- POSTGRES_PASSWORD=nexus123
- POSTGRES_DB=nexus
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- 5432:5432
deploy:
resources:
limits:
cpus: "0.5"
memory: "1G"
volumes:
nexus_data:
postgres_data:常见问题
Q:启动后浏览器访问 502 或响应缓慢?
- 确认容器是否正常运行:
docker ps | grep nexus- 首次启动需要初始化数据库,耗时较长,可通过日志查看进度:
docker logs nexus -f --tail=50- 检查资源是否充足,Nexus 最低需 2GB 内存:
docker stats nexusQ:忘记 admin 密码怎么办?
进入容器重置密码:
docker exec -it nexus /bin/bash
cat /nexus-data/admin.password或通过 API 重置:
curl -u admin:oldpassword -X PUT http://localhost:8081/service/rest/v1/security/users/admin/change-password -d '{"password":"newpassword"}' -H "Content-Type: application/json"Q:磁盘空间不足如何清理?
进入 Nexus 管理界面:
- Repository → Cleanup policies 配置清理策略
- 手动删除旧版本制品(需谨慎)
清理临时文件:
# 进入容器清理缓存
docker exec -it nexus /bin/bash
rm -rf /nexus-data/cache/*
rm -rf /nexus-data/tmp/*
docker compose restart nexusQ:如何备份 Nexus 数据?
# 停止 Nexus
docker compose down
# 备份数据卷
docker run --rm -v nexus_nexus_data:/data alpine tar czf /tmp/nexus_backup_$(date +%Y%m%d).tar.gz -C /data .
# 重启
docker compose up -dQ:如何配置反向代理?
在 Nginx 配置中添加:
server {
listen 80;
server_name nexus.example.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
}