nexus部署和使用
使用nexus搭建maven私服
# 部署
# docker-compose部署
version: "2"
services:
nexus:
image: sonatype/nexus3
volumes:
- ./data:/nexus-data
ports:
- "8081:8081"
注意
初次使用,查看密码cat ./data/admin.password
# 使用HTTPS代理
nginx
version: "2"
services:
nginx:
restart: "no"
container_name: nginx
image: nginx:stable-perl
ports:
- "35443:443"
volumes:
- ./conf:/etc/nginx/conf.d/
- ./ssl:/ssl
networks:
- nexus_default
networks:
nexus_default: #使用nexus的网络 ,可通过 docker network ls 查看
external: true
配置文件
需要自行申请对应域名证书
点击查看
server {
listen 443 ssl;
#绑定证书的域名
server_name nexus.domain.com;
root html;
index index.html index.htm;
#证书文件名称
ssl_certificate /ssl/ssl.pem;
#私钥文件名称
ssl_certificate_key /ssl/ssl.key;
ssl_session_timeout 5m;
#使用此加密套件。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#使用该协议进行配置。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 200M;
client_body_buffer_size 128k;
# 代理nexus仓库
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://nexus:8081/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# maven中使用
# 仓库类型
- proxy 代理仓库
- hosted 宿主仓库
- releases 发行版
- snapshots 快照版
- group 仓库组,主要用于下载依赖时遍历
# 配置maven setting
<settings>
<mirrors>
<!-- 用于拉取-->
<mirror>
<!-- 和 server.id 一致-->
<id>priveat-repo</id>
<mirrorOf>*</mirrorOf>
<url>https://nexus.domain.com:35443/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>priveat-repo</id>
<username>admin</username>
<password>1234567</password>
</server>
</servers>
</settings>
# 配置 pom
<!-- (用于推送)-->
<distributionManagement>
<!-- 发行 -->
<repository>
<id>haveways</id>
<url>https://nexus.domain.com:35443/repository/maven-releases/</url>
</repository>
<!-- 快照 -->
<snapshotRepository>
<id>haveways</id>
<url>https://nexus.domain.com:35443/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
# 作为docker仓库
新建docker(hosted)
激活docker登录令牌
点击查看
server {
listen 443 ssl;
#绑定证书的域名
server_name docker.domain.com;
root html;
index index.html index.htm;
#证书文件名称
ssl_certificate /ssl/ssl.pem;
#私钥文件名称
ssl_certificate_key /ssl/ssl.key;
ssl_session_timeout 5m;
#使用此加密套件。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#使用该协议进行配置。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
client_max_body_size 2G; # 允许最大请求体为 2GB
client_body_buffer_size 2M; # 内存缓冲区大小(单次读取请求体的内存块)
client_body_timeout 300s; # 请求体传输超时时间(300 秒)
· # 代理docker仓库 注意代理端口
location / {
proxy_request_buffering off;
proxy_http_version 1.1; # 强制使用 HTTP/1.1 协议
proxy_set_header Connection ""; # 清除 Connection 头,启用持久连接
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; //标记HTTPS
proxy_pass http://nexus:35444/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 示例: 推送 nexus3 到私有仓库
需要修改成您的域名或者IP,且是https
登录
docker login -u admin docker.domain.com:35443
修改tag
docker sonatype/nexus3 docker.domain.com:35443/nexus3:1.0
推送到私有仓库
docker push docker.domain.com:35443/nexus3:1.0
从私有仓库获取
docker pull docker.domain.com:35443/nexus3:1.0
# 如果没有证书
修改文件 vi /etc/docker/daemon.json
允许 Docker 守护进程与未使用有效 HTTPS 证书或明文 HTTP 的私有镜像仓库通信
{
"insecure-registries": ["docker.nexus.com:35444"],
}
重启
systemctl restart docker
检查是否生效
docker info | grep Insecure
上次更新: 2025/04/25, 10:46:05