使用nexus3搭建自己的制品服务器

admin 2026-04-16 06:29:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细介绍使用Nexus3搭建私有Docker制品服务器的全过程,包括通过Docker部署Nexus3和Caddy代理、配置支持上传下载的hosted仓库、设置DockerHub代理仓库、创建合并仓库组实现权限分离。关键步骤涵盖仓库创建、角色权限分配、清理策略设置及读写验证,最终实现具备私有存储、公有镜像代理和读写权限控制的一体化制品管理方案。 综合评分: 82 文章分类: 安全工具,云安全,应用安全,安全建设,解决方案


cover_image

使用nexus3搭建自己的制品服务器

原创

弈秋 弈秋

一只岸上的鱼

2025年12月16日 16:48 江苏

在小说阅读器读本章

去阅读

使用nexus3搭建自己的制品服务器

#

需求

云原生开发,有个新的需求,就是docker制品服务器,对于私域的开发,公有云的服务器不合适,只能自己搭建了。

所以记录一下搭建一个docker镜像服务器的过程,完成的功能如下:

  1. 存储私有的docker制品,所有有上传下载功能(pull,push)
  2. 代理开源的共有源镜像(dockerhub)
  3. 读写权限分开

使用nexus3搭建私服过程

nexus3是目前最全面的私服软件了,支持apt、npm、docker、cargo、go、maven、composer…… 这次只使用其docker功能。

使用docker搭建nexus3,并使用caddy作为代理: nexus3的配置:

services:  nexus3:    image: sonatype/nexus3:latest    container_name: nexus3    environment:      - TZ=Asia/Shanghai      - INSTALL4J_ADD_VM_PARAMS="-Xms2703m -Xmx4G -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/userroot"      - NEXUS_CONTEXT=nexus    volumes:      - ./data:/nexus-data      - ./userroot:/userroot    restart: alwaysnetworks:  default:    external: true    enable_ipv6: false    name: netproxy

caddy的配置:


services:  caddy:    image: caddy:2    restart: unless-stopped    container_name: caddy    cap_add:      - NET_ADMIN    environment:      - TZ=Asia/Shanghai    ports:      - "80:80"      - "8080:8080"      - "443:443"      - "443:443/udp"      - "1443:1443"      - "1443:1443/udp"    volumes:      - $PWD/conf:/etc/caddy      - $PWD/site:/srv      - $PWD/config:/config      - $PWD/data:/data    networks:      - netproxynetworks:  netproxy:    name: netproxy    driver: bridge

caddy配置文件:

{    email [email protected]    acme_ca https://acme.zerossl.com/v2/DV90}nexus.aaa.bbb {    redir / /nexus 301    reverse_proxy nexus3:8081    encode gzip    header Cache-Control "public, max-age=3600"    header {        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"        X-Content-Type-Options "nosniff"        X-XSS-Protection "1; mode=block"    }}docker.aaa.bbb:1443 {    reverse_proxy nexus3:8082}docker.aaa.bbb {    reverse_proxy nexus3:8084}
```
### 搭建支持上传下载的docker私服

nexus3第一次启动后,需要修改密码,如下图:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4G5DGQ6WK2xtYcjZIZ7JiaFyib3fz78f2HDkA4HHiblAUnPUvWvicD7eVRQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=1)

修改密码后,后续会提示是否开通匿名访问,关闭。

#### 新建一个host的docker repository

目录: settings->repository->create repository

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4FqFTQVW1HyAYiakBWlqiaEropYM6RW9mOk7vNFw3X1RFM1Xiame3qY7BQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=2)

#### 新建一个支持上传下载的角色和用户

新建角色并且赋权刚刚创建的host仓库给这个角色:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4SvJZXLnwZQNSOb6ADgA7k1O4J9Fbw4n8jSgHJ7eJPCjicelqHeLjfwg/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=3)

新建用户,并且赋角色

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4OL5oe3kQibkjrJyHErADvOtZLVGcFqSVWI3DVGGs2EqNrsReIvGLkjQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=4)

security realms

安全配置:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4IZK4EicMAibuPeia0ZBGRic72KOice9aCe665mDBmP1yWwtjiaCib1tRC79hQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=5)

### 验证读写

docker 登录docker login docker.aaa.bbb:1443 -u dwrite

测试上传docker tag caddy:2 docker.aaa.bbb:1443/myimage:2docker push docker.aaa.bbb:1443/myimage:2


测试:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4sqldAzkcfFzRiaSgCqvFacNE87AcesTMKvz7mRnX3t4NQViauTZmxUzQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=6)

上传后就可以看到上传的镜像:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4EiaTHiaC1Cv4WbAGibt95G5bl6wk5KGFvNHmcwe1Nm2ibibVIXyYicmrBOTQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=7)

###

### 搭建dockerhub 代理

代理dockerhub:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4nu1kv7cSA05eqRcsstMgbETOZiau94jQs0LlA3NVaHNKkLrv2QqyBCg/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=8)

修改端口、索引:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4Z62Oqopibn8yAquan3lcY0cKBFN8nLCfaibNiadWqIcAo5ezCcGicNqJQg/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=9)

####

####

#### 设置清理措施:

代理镜像位于dockerhub,代理服务器只需要缓存,并不需要长久存储,指定一个释放策略可以减少服务器硬盘占用。

创建清理策略:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4HhovyuolUibj9BwuyAxZ9LYiaZwzQWNcSqCicMibiaGvMoU1maachM9z6wA/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=10)

给代理仓库加载清理策略:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4hf5QpxGiaSmlichiazKQRASs9kM0mj2JAbC5KpXfcpNgdUL9VQsffeibWw/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=11)

###

###

### 搭建融合镜像

仓库组,用来合并多个hosted/proxy仓库,即将私服和公开的hub代理,合并为一个,方便使用:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4bdK06YIJFoopcRTKUqXAvY26BrQX1UicRBL0knXelPVALBTLKEzX17A/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=12)

设置合并的仓库,并设置顺序,host在前,代理在后:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4ssQJtVzmoU9AYibEbfXF6wptCvtr8PyicJIib6MYfia0RqukLyy8FQXRiaQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=13)

新建一个新只读角色、只读用户,赋权限,所有仓库的只读权限:

角色:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4ST20Vddiaf01lKUWK3oRtEtSd8hOnBokGeBoQnZTGSTsJ1UFFE9KhYw/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=14)

用户:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4suDNPzicEqDLiaqIicIH8MkicTZJ3yp2SO7VtYxAowpBFmdzbE37f7jnkg/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=15)

权限:

![](https://mmbiz.qpic.cn/sz_mmbiz_png/ZG8Fru1tL1zhnDg9ltAPIVmniaFoc1YC4icn6RicOs56EI6Cvh4cddBorZ9LAJbZwicuZzpvmQBibUicaj2tLaUWV1UQ/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=16)

#### 测试

1. 拉取一个私服里面的镜像
2. 拉取一个dockerhub里面的镜像

登录docker login docker.aaa.bbb -u dread

拉取私服的镜像docker rmi docker.aaa.bbb/myimage:2

拉取dockerhub的镜像docker pull docker.aaa.bbb/alpine


测试: “`

查看,dockerhu的也会被缓存下来:

#

学习小结:

至此,一个可用的权限分离的docker私服就实现了。nexus3一共有4个服务端口:

8081:nexus应用 8082:docker(hosted)私有仓库,可以pull和push 8083:docker(proxy) 代理dockerhub,只能pull 8084:docker(group) 私有仓库和代理的组,只能pull

nexus3还有很多的私服功能,下次再开发^_^

#


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:一只岸上的鱼 弈秋 弈秋《使用nexus3搭建自己的制品服务器》

评论:0   参与:  0