Nexus3搭建自己的Mirrors仓库

image

1:部署的目的

因为昨天有个刚入门的小伙伴问我,它觉得阿里云的加速貌似慢了许多,并且他们的本地的服务器拉取国外的镜像的时候貌似也有瓶颈,恰好我做过这个东西,然后我就把我做过的这个小操作给他讲了一下,然后就花了一两个小时的时间帮助他部署了一套Nexus3的加速服务器,让后就有了这篇文章,废话也不多说,我们直接上手。

2:环境介绍

服务器 配置 主机名 域名
10.0.0.11 1C1G docker nexus.kudevops.cn
10.0.0.12 2C4G nexus mirrors.kudevops.cn
从这里我们可以看出,我做的环境是本地的环境,没有用云上的,我们其实只需要把nexus的服务器买到云上的香港服务器就可以了。

3:基础配置

1:主机名配置(两台机器都操作)
[root@localhost ~]# hostnamectl hostname docker
[root@localhost ~]# hostnamectl hostname nexus

2:安装Docker(两台机器都操作)
[root@docker ~]# yum install -y docker-ce

3:启动Docekr(两台机器都操作)
[root@docker ~]# systemctl enable docker --now

4:准备两个SSL证书,一个是nexus的证书,另一个是mirrors的证书,域名分别为
SSL:nexus.kudevops.cn
SSL:mirrors.kudevops.cn

5:在nexus服务器安装nginx
[root@nexus ~]# yum install -y nginx

6:创建SSL目录和Nexus的conf
[root@nexus ~]# mkdir /etc/nginx/ssl

[root@nexus ~]# cat /etc/nginx/conf.d/nexus.conf 
upstream nexus {
    server 127.0.0.1:8081;
}

server {
    listen 80;
    server_name  nexus.kudevops.cn;

    location / {
        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_redirect off;
        proxy_pass http://nexus;
        client_max_body_size       1000m;
    }
    access_log  /var/log/nginx/nexus.log  main;
}

server {
    listen 443 ssl http2;
    server_name  nexus.kudevops.cn;

    ssl_certificate /etc/nginx/ssl/nexus.pem;
    ssl_certificate_key /etc/nginx/ssl/nexus.key;

    location / {
        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";
        proxy_redirect off;
        proxy_pass http://nexus;
        client_max_body_size       1000m;
    }
    access_log  /var/log/nginx/nexus.log  main;
}

4:配置Nexus

1:拉取Nexus3镜像
# 当然 Nexus的服务器的Docker可以配置如下的daemon.json
[root@nexus ~]# cat << eof>>/etc/docker/daemon.json
{
  "registry-mirrors": ["https://6ze43vnb.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
eof

[root@nexus ~]# systemctl daemon-reload && systemctl restart docker
[root@nexus ~]# docker pull sonatype/nexus3

2:创建nexus数据持久化
[root@nexus ~]# docker volume create nexus

3:启动Nexus容器
[root@nexus ~]# docker run -d --name nexus3 --restart=always -e "INSTALL4J_ADD_VM_PARAMS=-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=/nexus-data/javaprefs" -v /etc/localtime:/etc/localtime -v nexus:/nexus-data -p 127.0.0.1:8081:8081 -p 5000:5000 sonatype/nexus3:latest

4:查看密码
[root@nexus ~]# cat /var/lib/docker/volumes/nexus/_data/admin.password

5:上传两个证书到/etc/nginx/ssl下
[root@nexus ssl]# ls
mirrors.key  mirrors.pem  nexus.key  nexus.pem

6:启动Nginx
[root@nexus ssl]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@nexus ssl]# nginx

# 由于我这里用的是本地环境,所以没有用到DNS解析,直接写HOSTS了,大家是需要用DNS解析解析给服务器的公网IP/EIP/CLB/CDN的

image

根据上面查看到的密码来初始化Nexus,因为这次主要讲的是代理,所以我们不讲私仓。

5:创建代理服务

image

image

image

image

这些配置完成之后最后点击`Create repository`,这里我们可以创建多个代理服务,比如:dockerhub,gcr等

image

这些创建完成之后我们再去创建一个`group`来聚合这些代理

image

image

切记这里的端口一定是要提前我们在启动nexus服务的时候就映射好的。

image

image

创建完成之后我们还需要配置一下安全方面的问题。

image

完成之后我们需要再去配置一下nginx的另一个ssl的代理,配置如下
[root@nexus conf.d]# cat mirrors.conf
upstream mirrors {
    server 127.0.0.1:5000;
}

server {
    listen 80;
    server_name  mirrors.kudevops.cn;

    location / {
        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_redirect off;
        proxy_pass http://mirrors;
        client_max_body_size       1000m;
    }
    access_log  /var/log/nginx/nexus.log  main;
}

server {
    listen 443 ssl http2;
    server_name  mirrors.kudevops.cn;

    ssl_certificate /etc/nginx/ssl/mirrors.pem;
    ssl_certificate_key /etc/nginx/ssl/mirrors.key;

    location / {
        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";
        proxy_redirect off;
        proxy_pass http://mirrors;
        client_max_body_size       1000m;
    }
    access_log  /var/log/nginx/nexus.log  main;
}
# 重载nginx
[root@nexus conf.d]# nginx -s reload

6:测试代理仓库

我们上面就基本上结束了Nexus的配置了,然后我们只需要在docker的服务器上配置加速即可,配置如下

{
  "registry-mirrors": ["https://mirrors.kudevops.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

# 因为我这里是虚拟机,所以我写了hosts互信。

[root@docker ~]# systemctl daemon-reload && systemctl restart docker

# 测试拉取镜像

[root@docker ~]# docker pull mirrors.kudevops.cn/nginx:alpine
alpine: Pulling from nginx
213ec9aee27d: Pull complete 
6779501a69ba: Pull complete 
f294ffcdfaa8: Pull complete 
56424afbb509: Pull complete 
9a1e8d85723a: Pull complete 
5056d2fafbf2: Pull complete 
Digest: sha256:b87c350e6c69e0dc7069093dcda226c4430f3836682af4f649f2af9e9b5f1c74
Status: Downloaded newer image for mirrors.kudevops.cn/nginx:alpine
mirrors.kudevops.cn/nginx:alpine

[root@docker ~]# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
mirrors.kudevops.cn/nginx   alpine    568998804441   21 hours ago   23.5MB

# 这个时候我们会发现镜像拉取已经正常了,然后我们可以去Nexus查看一下是否已经缓存在了Nexus上

image

image

这里发现已经缓存下来了,其他人再去使用这个`mirrors`的地址去拉取镜像的时候其实就是拉取我们的缓存了。

# 日后我们想缓存哪儿个仓库,我们可以直接去创建对应仓库的代理,然后将代理仓库添加到group内即可缓存到Nexus了
posted @ 2022-10-08 04:27  Layzer  阅读(479)  评论(0编辑  收藏  举报