Nexus Repository Manager 是一个强大的制品仓库管理器,支持 Maven、npm、Docker、Helm、PyPI 等多种格式。
Docker 部署
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12
| version: '2.0'
services: nexus: image: sonatype/nexus3 container_name: nexus restart: always ports: - "127.0.0.1:8081:8081" - "127.0.0.1:5000:5000" volumes: - ${HOME}/nexus-data:/nexus-data
|
启动:
初始化
1 2 3 4 5
| docker exec nexus cat /nexus-data/admin.password
open http://localhost:8081
|
Nginx 反向代理配置
Web UI 反代
repo.example.com - Nexus 管理界面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| server { listen 80; server_name repo.example.com; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name repo.example.com;
ssl_certificate /etc/letsencrypt/live/repo.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/repo.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 1G;
location / { proxy_pass http://localhost: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 "https"; } }
|
Docker Registry 反代
docker.example.com - Docker 镜像仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| server { listen 80; server_name docker.example.com; return 301 https://$host$request_uri; }
server { listen 443 ssl; server_name docker.example.com;
ssl_certificate /etc/letsencrypt/live/repo.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/repo.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 10G;
location / { proxy_pass http://localhost:5000/; 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 "https"; } }
|
配置仓库
创建 Docker Hosted 仓库
- 登录 Nexus Web UI
- Settings → Repositories → Create repository
- 选择
docker (hosted)
- 配置:
- HTTP 端口:
5000
- Allow anonymous docker pull:勾选
使用 Docker Registry
1 2 3 4 5 6 7 8 9
| docker login docker.example.com
docker tag myapp:latest docker.example.com/myapp:latest docker push docker.example.com/myapp:latest
docker pull docker.example.com/myapp:latest
|
支持的仓库类型
| 类型 |
说明 |
端口建议 |
| Docker |
容器镜像 |
5000 |
| Helm |
Kubernetes Chart |
8081 (Web) |
| npm |
Node.js 包 |
8081 (Web) |
| PyPI |
Python 包 |
8081 (Web) |
| Maven |
Java 依赖 |
8081 (Web) |
Helm 仓库配置
添加 Helm 仓库:
1 2 3 4 5 6 7
| helm repo add myrepo https://repo.example.com/repository/helm-hosted/ \ --username admin --password password
curl -u admin:password https://repo.example.com/repository/helm-hosted/ \ --upload-file mychart-0.1.0.tgz
|
npm 仓库配置
1 2 3 4 5 6 7 8
| npm config set registry https://repo.example.com/repository/npm-group/
npm login --registry=https://repo.example.com/repository/npm-hosted/
npm publish --registry=https://repo.example.com/repository/npm-hosted/
|
PyPI 仓库配置
~/.pypirc:
1 2 3 4 5 6 7
| [distutils] index-servers = nexus
[nexus] repository: https://repo.example.com/repository/pypi-hosted/ username: admin password: password
|
发布:
1 2
| pip install twine twine upload --repository nexus dist/*
|
参考资料
注意事项
- 定期备份
/nexus-data 目录
- 生产环境建议配置外部数据库
- Docker Registry 需要 HTTPS(或配置 insecure-registries)
- 建议为不同类型的仓库使用不同的子域名