应用在打包过程中需要下载很多依赖包,如果没有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
此报错截图
image
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仓库
image
proxy仓库写一个代理地址,其他没有需要修改的。腾讯云或者阿里云的,还有就是内网nexus仓库的地址
http://mirrors.tencentyun.com/repository/maven-public/
2、添加一个本地研发使用的账号,不能上传release仓库,只能对maven-public和maven-snapshots上传、查看、读取的权限
添加一个role
image
添加一个用户,添加role到新用户
image

测试授权账号权限

登录账号后,查看可见仓库,和预期一致
上传包则需要开发mvn命令上传,目前的权限页面无法传包
image