应用在打包过程中需要下载很多依赖包,如果没有nexus仓库,就需要去公网下载,影响打包效率的同时会消耗大量带宽
nexus仓库会在打包过程中,将仓库没有的包通过Proxy的Remote Storage去下载依赖包,然后缓存到本地
经常用到的仓库Format为maven2
仓库类型分为proxy(代理仓库),group(仓库组),hosted(宿主仓库)
简单说一下仓库的特点,代理仓库可以配置Proxy的Remote Storage,自己仓库没有的包就会通过Proxy仓库去下载,内外网的地址都可选
group仓库组,则是把很多仓库加入到一个组中,用户拥有仓库组的情况下,可以按照仓库加入组的排序依次寻找依赖包
hosted宿主仓库,这种仓库在页面upload菜单中可以上传jar包
常用的仓库
snapshot 还在开发过程中的包
release 稳定发布的包
开始部署
部署使用docker-compose方式
ubuntu安装docker
apt install apt-transport-https
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable
add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 查看可用版本
apt-cache madison docker-ce
# 安装指定版本
apt install docker-ce=5:19.03.13~3-0~ubuntu-focal docker-ce-cli=5:19.03.13~3-0~ubuntu-focal
# 开机启动
systemctl enable docker && systemctl start docker
systemctl stop docker
# 配置daemon.json,修改数据目录,配置代理
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"log-driver": "json-file",
"log-opts": {"max-size":"500m", "max-file":"5"},
"graph": "/data/docker-data"
}
EOF
# 将docker数据目录移动到/data目录
mv /var/lib/docker /data/docker-data
systemctl start docker
安装docker-compose
apt-get install docker-compose
配置nexus数据目录和权限
mkdir /data/nexus-data
chown -R 200 /data/nexus-data/
编辑compose文件
cat > /data/docker-compose.yaml <<EOF
version: '3'
services:
maven:
container_name: maven
image: sonatype/nexus3:latest
volumes:
- /data/nexus-data:/nexus-data
ports:
- "80:8081"
networks:
private01:
driver: 'local'
EOF
# 配置数据目录,配置映射到宿主机的端口为80
启动nexus
# docker-compose 启动容器
docker-compose up -d
# 查看nexus管理员密码,用户名admin
echo `docker exec maven cat /nexus-data/admin.password`
# 配置向导,允许匿名访问
配置https反向代理
使用http访问没有出现报错,https代理后web页面一直报错 Operation failed as server could not be contacted
此报错截图
nexus官方反代配置参考
# 修改nexus配置文件
/data/nexus-data/etc/nexus.properties
nexus-context-path=/
# 让配置生效
docker-compose down
docker-compose up -d
# nginx反代配置
server {
listen 172.16.0.16:443 proxy_protocol ssl;
proxy_buffering off;
proxy_request_buffering off;
server_name nexus.cf.com;
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";
access_log /var/log/nginx/nexus.log;
root /var/www/html;
index index.html;
location / {
proxy_pass http://172.24.12.30;
}
}
ngixn -s reload
配置在修改后没有再报错!
配置仓库权限
需求
1、添加一个proxy仓库
proxy仓库写一个代理地址,其他没有需要修改的。腾讯云或者阿里云的,还有就是内网nexus仓库的地址
http://mirrors.tencentyun.com/repository/maven-public/
2、添加一个本地研发使用的账号,不能上传release仓库,只能对maven-public和maven-snapshots上传、查看、读取的权限
添加一个role
添加一个用户,添加role到新用户
测试授权账号权限
登录账号后,查看可见仓库,和预期一致
上传包则需要开发mvn命令上传,目前的权限页面无法传包