1:简介
1:什么是Nexus
Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。
利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact。
Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
Nexus 使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
Nexus支持WebDAV与LDAP安全身份认证
2:它适用于什么场景
2.1:当java构建拉取网上包时时间过长
2.2:当你部署一个容器镜像仓库时
2.3:当你的系统(如CentOS/RedHat/Debian)安装软件包需要配置加速时
---
# 这本是一家做付费软件的公司,但是他们的免费版本的工具已经完全满足当下的要求
3:官网:https://help.sonatype.com/docs
2:环境简介
| 服务器 |
IP |
配置 |
软件包 |
| Agent |
10.0.0.17 |
1C1G |
python3 pip3 |
| Nexus3 |
10.0.0.16 |
2C4G |
Docker Nginx |
3:部署Nexus
1:部署docker
[root@agent ~]# yum install -y docker-ce
[root@agent ~]# systemctl enable docker --now
[root@nexus3 ~]# 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@nexus3 ~]# systemctl daemon-reload && systemctl reestart docker
2:拉取Nexus镜像
[root@nexus3 ~]# docker pull sonatype/nexus3
3:启动Nexus
[root@nexus3 ~]# docker volume create nexus #创建Nexus的存储(数据持久化)
nexus
[root@nexus3 ~]# docker run -d --name nexus3 --restart=always -v /etc/localtime:/etc/localtime -v nexus:/nexus-data -p 127.0.0.1:8081:8081 sonatype/nexus3:latest #可以根据hub.docker.com上搜索这个包,有更详细的操作
7960dcb8aee894a32f76e42765c57499bf94dc8cc68a081c9f8d8bfd1f55a8f2
# 这里映射127.0.0.1的地址到容器内,但是只能通过nginx反向代理才可以访问到,虽说安全但是如果nginx出故障,无法即使处理此问题的话就无法临时切换地址了,所以我这里并没有使用127.0.0.1来映射
4:部署Nginx
[root@nexus3 ~]# yum install -y nginx
5:配置Nginx SSL反向代理nexus
[root@nexus3 nginx]# cat /etc/nginx/nginx.conf #此配置为住配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
server_tokens off;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
[root@nexus3 ssl]# cat << eof>> /etc/nginx/conf.d/nexus.conf
[root@nexus3 ssl]# cat /etc/nginx/conf.d/nexus.conf
upstream nexus {
server 127.0.0.1:8081;
}
server {
listen 80;
server_name nexus.kubernetes-devops.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.kubernetes-devops.cn;
ssl_certificate /etc/nginx/ssl/server.pem;
ssl_certificate_key /etc/nginx/ssl/server.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;
}
eof
6:启动Nginx
[root@nexus3 ssl]# nginx
# 访问此地址 https://nexus.kubernetes-devops.cn即可访问到Nexus3
# 因为是内网,所以访问nexus的UI的时候走https,但是为了保证拉取效率,使用http拉取
4:验证

5:初始化Nexus

根据提示通过持久化路径获取密码
[root@nexus3 ssl]# cat /var/lib/docker/volumes/nexus/_data/admin.password
a113fb09-6779-4845-b3fb-5ed6926e003f



根据需求看您需不需要开启匿名访问

初始化完成之后就是这样子了
6:创建python缓存仓库

我这里先清除无用的仓库



1:给你的仓库起个名字
2:选择你要从哪儿里缓存包到你的服务器
3:勾选获取目标站点的证书
4:将证书信任添加一下



使用地址:http://nexus.kubernetes-devops.cn/repository/devops_pypi/simple
# 关于simple:pypi官网拉取包也是需要指定这个路径的
即可在客户端拉取软件包,此时Nexus就会从目标站点拉取包并缓存到本地
7:测试
因为是内网,所以本地机器需要进行host绑定
[root@agent ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.16 nexus.kubernetes-devops.cn
测试pip3 指定仓库拉取软件包
[root@agent ~]# pip3 install mycli -i "http://nexus.kubernetes-devops.cn/repository/devops_pypi/simple" --trusted-host nexus.kubernetes-devops.cn
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting mycli
Downloading http://nexus.kubernetes-devops.cn/repository/devops_pypi/packages/mycli/1.25.0/mycli-1.25.0-py2.py3-none-any.whl (97kB)
100% |████████████████████████████████| 102kB 41.7MB/s
Collecting pyaes>=1.6.1 (from mycli)
---
# --trusted-host 信任您的主机
这边装完之后可以在nexus上查看您的缓存包


这样子其他机器即使无法上网也可以通过指定:http://nexus.kubernetes-devops.cn/repository/devops_pypi/simple
此地址下载在线的包了