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的
根据上面查看到的密码来初始化Nexus,因为这次主要讲的是代理,所以我们不讲私仓。
5:创建代理服务
这些配置完成之后最后点击`Create repository`,这里我们可以创建多个代理服务,比如:dockerhub,gcr等
这些创建完成之后我们再去创建一个`group`来聚合这些代理
切记这里的端口一定是要提前我们在启动nexus服务的时候就映射好的。
创建完成之后我们还需要配置一下安全方面的问题。
完成之后我们需要再去配置一下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上
这里发现已经缓存下来了,其他人再去使用这个`mirrors`的地址去拉取镜像的时候其实就是拉取我们的缓存了。
# 日后我们想缓存哪儿个仓库,我们可以直接去创建对应仓库的代理,然后将代理仓库添加到group内即可缓存到Nexus了