ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一篇适合躺收藏夹的 Nexus3 搭建 NuGet&Docker 私有库的安装使用总结 [打印本页]

作者: 前进之路    时间: 2023-12-8 11:20
标题: 一篇适合躺收藏夹的 Nexus3 搭建 NuGet&Docker 私有库的安装使用总结
前言

Nexus 是支持 Nuget、Docker、Npm 等多种包的仓库管理器,可用做私有包的存储分发,缓存官方包。本篇将手把手教学使用 Nexus 搭建自己的 NuGe t& Docker 私有仓库。
特点

使用情况

安装部署

使用 docker compose 安装

使用 nginx 配置域名访问

  1. server {
  2.     listen       80;
  3.     listen       443 ssl;
  4.     server_name  nexus.devops.test.com;
  5.     # allow large uploads of files
  6.     client_max_body_size 1G;
  7.     ssl_certificate      /certs/nexus.devops.test.com/server.crt;
  8.     ssl_certificate_key  /certs/nexus.devops.test.com/server.key;
  9.     ssl_session_cache    shared:SSL:1m;
  10.     ssl_session_timeout  5m;
  11.     ssl_ciphers  HIGH:!aNULL:!MD5;
  12.     ssl_prefer_server_ciphers  on;
  13.     location / {
  14.       proxy_pass   http://nexus_3_61:8081/;
  15.       proxy_set_header Host $host;
  16.       proxy_set_header X-Real-IP $remote_addr;
  17.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18.     }
  19. }
复制代码
落地实践

使用 Nexus 管理 Nuget 包

默认项说明


账号的规划及创建

一个企业可能存在着多个团队或项目组,每个团队的包可以分开或者约定好不同的名称前缀
包的读写权限需要分离,即上传者和使用者分开,上传者包含读写权限,使用者只需要有访问权限
创建角色

权限说明:文档
拉取角色:pull-man ,设置权限:nx-repository-view-*-*-browse nx-repository-view-*-*-read
推送角色:push-man ,设置权限:nx-component-upload nx-repository-view-*--

创建账号

拉取账号:puller , 设置密码 devops666,设置角色:pull-man
推送账号:pusher,设置密码 devops666,设置角色:push-man,nuget 使用的 APIKey 所以暂时没有用到,后面管理 docker 的时候使用

生成 NuGet API 密钥

推送 NuGet 包时需要使用,点击管理员头像->NuGet API 密钥->生成密钥

启用 NuGet API 密钥领域

上一步获取了密钥,还无法直接使用,还需要在设置中 Security>Realms 中启用 NuGet API-Key Realm。
类似启用的验证方式,领域说明见文档

设置部署策略

默认 nuget 包托管是启用了, 而为了防止包被恶意篡改,可以将 nuget-hosted 仓库修改为禁用重新部署,多人协同开发时可防止包被被其他人覆盖,相关文档说明 。在设置了禁用重新部署时,推送重复包的时候将会返回 400 错误

使用 Nexus 的 NuGet 包源

因为前面配置关闭了匿名访问以及配置了相应的账号,所以为了方便的从 Nexus 服务中拉取 Nuget 包,可以通过配置文件 nuget.config (文档)来指定 nuget 源为 Nexus 服务 nexus.devops.test.com
推送 NuGet 包到 Nexus

从本地推送一个 NuGet 包到 Nexus 服务进行托管,需要两步,打包,推送。为了更好的使用,可以结合脚本来快速打包,以之前的一个计算字段封装为例将其打包成 NuGet 包推送到 Nexus 中
使用 Nexus 管理 Docker 镜像

当前版本支持 docker 镜像的管理,使用发现通过 docker-group 推送镜像是需要企业版的,不过还是可以根据拉取和推送的域名/端口分开来达到推送的效果。
可以先看下面这个流程图,再看后续如何配置就很清晰了

创建角色

权限说明:文档 这里给了所有仓库的拉取以及推送权限,和前面一样,可以只创建对应的 docker 权限
拉取角色:pull-man ,设置权限:nx-repository-view-*-*-browse nx-repository-view-*-*-read
推送角色:push-man ,设置权限:nx-component-upload nx-repository-view-*--
创建账号

拉取账号:puller , 设置密码 devops666,设置角色:pull-man
推送账号:pusher,设置密码 devops666,设置角色:push-man
创建 Docker 仓库

和前面 nuget 的三个仓库一样,docker 的仓库也新建三个




推送和拉取域名的 nginx 代理配置

根据文档与实际使用,https 是必须的,所以依托于之前 nginx 的证书申请以及 dns 服务的使用,我们可以在局域网中配置域名来访问 nexus3 提供的 docker 镜像仓库服务
默认拉取使用 nexus.devops.test.com,推送则使用:push.nexus.devops.test.com
以下为 nginx 的配置,根据官方文档所修改,主要替换其中域名与证书,因为是局域网的自定义域名,需要在客户端安装证书才不会有不安全的提示,同理 linux 下使用,也需要安装对应 pem 证书
  1. server {
  2.     listen       80;
  3.     listen       443 ssl;
  4.     server_name  nexus.devops.test.com;
  5.     # allow large uploads of files
  6.     client_max_body_size 10G;
  7.     ssl_certificate      /certs/nexus.devops.test.com/server.crt;
  8.     ssl_certificate_key  /certs/nexus.devops.test.com/server.key;
  9.     ssl_session_cache    shared:SSL:1m;
  10.     ssl_session_timeout  5m;
  11.     ssl_ciphers  HIGH:!aNULL:!MD5;
  12.     ssl_prefer_server_ciphers  on;
  13.      location /v2 {
  14.       proxy_pass http://nexus_3_61:8081/repository/docker-group/$request_uri;
  15.       proxy_set_header Host $host:$server_port;
  16.       proxy_set_header X-Real-IP $remote_addr;
  17.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  18.       proxy_set_header X-Forwarded-Proto "https";
  19.     }
  20.     location /v1 {
  21.       proxy_pass http://nexus_3_61:8081/repository/docker-group/$request_uri;
  22.       proxy_set_header Host $host:$server_port;
  23.       proxy_set_header X-Real-IP $remote_addr;
  24.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  25.       proxy_set_header X-Forwarded-Proto "https";
  26.     }
  27.     location / {
  28.       proxy_pass   http://nexus_3_61:8081/;
  29.       proxy_set_header Host $host;
  30.       proxy_set_header X-Real-IP $remote_addr;
  31.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  32.       #proxy_set_header X-Forwarded-Proto $scheme;
  33.       proxy_set_header X-Forwarded-Proto "https";
  34.     }
  35. }
  36. server {
  37.     listen       80;
  38.     listen       443 ssl;
  39.     server_name  push.nexus.devops.test.com;
  40.     # allow large uploads of files
  41.     client_max_body_size 10G;
  42.     ssl_certificate      /certs/push.nexus.devops.test.com/server.crt;
  43.     ssl_certificate_key  /certs/push.nexus.devops.test.com/server.key;
  44.     ssl_session_cache    shared:SSL:1m;
  45.     ssl_session_timeout  5m;
  46.     ssl_ciphers  HIGH:!aNULL:!MD5;
  47.     ssl_prefer_server_ciphers  on;
  48.      location /v2 {
  49.       proxy_pass http://nexus_3_61:8081/repository/docker-hosted/$request_uri;
  50.       proxy_set_header Host $host:$server_port;
  51.       proxy_set_header X-Real-IP $remote_addr;
  52.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  53.       proxy_set_header X-Forwarded-Proto "https";
  54.     }
  55.     location /v1 {
  56.       proxy_pass http://nexus_3_61:8081/repository/docker-hosted/$request_uri;
  57.       proxy_set_header Host $host:$server_port;
  58.       proxy_set_header X-Real-IP $remote_addr;
  59.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  60.       proxy_set_header X-Forwarded-Proto "https";
  61.     }
  62.     location / {
  63.       proxy_pass   http://nexus_3_61:8081/;
  64.       proxy_set_header Host $host;
  65.       proxy_set_header X-Real-IP $remote_addr;
  66.       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  67.       #proxy_set_header X-Forwarded-Proto $scheme;
  68.       proxy_set_header X-Forwarded-Proto "https";
  69.     }
  70. }
复制代码
重载配置生效后访问确认 https 是否生效,以及可以查看 restapi 接口是否可以访问


至此,私有的 docker 仓库已经搭建好了,本文基于局域网的自定义域名,如果是服务器,正常解析域名到服务器,申请 ssl 证书等踩的坑都会少一点。接下来就是如何使用 nexus.devops.test.com,push.nexus.devops.test.com 来拉取&推送 docker 镜像了
CentOS8 中使用 Nexus 的 Docker 仓库

因为本文域名是局域网中的 dns 解析,所以需要在 linux 中设置 dns,确保域名能够访问到 nexus 访问,服务器则不需要考虑,跳过直接使用即可
CentOS8 设置 DNS

编辑 dns 配置文件:vi /etc/resolv.conf
  1. nameserver 192.168.123.214
  2. nameserver 114.114.114.114
复制代码
写入后重启网络生效:systemctl restart NetworkManager
ping nexus.devops.test.com
ip 是 192.168.123.214 就对了

安装自签证书


因为是自签证书,如果未安装证书就使用 docker login  nexus.devops.test.com会提示:tls: failed to verify certificate: x509: certificate signed by unknown authority
Docker 镜像源认证
  1. docker login nexus.devops.test.com -u puller -p devops666
  2. docker login push.nexus.devops.test.com -u pusher -p devops666
复制代码
登录成功后可以查看配置的源:cat /root/.docker/config.json

拉取镜像



推送镜像

docker tag  nexus.devops.test.com/nginx push.nexus.devops.test.com/nginx_custom


踩坑记录

相关文档

后语

本篇呕心沥血,绝对是值得收藏的,同时也希望看官们能顺手再点个赞~
书山有路勤为径,学海无涯苦作舟。
沉迷学习,无法自拔。jpg

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4