赞
踩
搭建说明
nexus做为后端java项目的maven私服。目前统一将私服依赖上传到zhgd这个repository,nexus部署在内网IP为10.100.10.100的ECS上。
一、安装
###使用docker一键安装nexus3.47.1,低于此版本阿里云基线扫描会扫出漏洞。
###镜像来源于官方配置。
- [root@zhgd-jumpserver-prod scripts]# cat nexus.sh
-
- docker rm -f zhgd-nexus
-
- docker run -d --user root \
-
- -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 \
-
- -v /opt/nexus/nexus-data:/nexus-data \
-
- --name zhgd-nexus sonatype/nexus3:3.47.1
二、基本配置
创建一个项目统一使用的repository。
同时为了拉取非私有的公共组件时能够走代理仓库从阿里云拉取,将zhgd加入maven-public组中。
由于上线时没有做充分的低权限角色调试,nexus目前分发给开发者都是admin账号,未做角色区分。
三、代码pom适配
由于nexus存在一次迁移,并且老的依赖包都统一放在了zhgd这个repository,为保障迁移后代码都能正常编译,各后端项目pom文件都需要按此修改适配。
- <repositories>
- <repository>
- <id>pms-nexus-zhgd</id>
- <name>PMS Repository</name>
- <url>https://zhgd-nexus.xingshicloud.com/repository/zhgd/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- </repositories>
-
- <distributionManagement>
- <repository>
- <id>pms-nexus-zhgd</id>
- <name>Nexus Release Repository</name>
- <url>https://zhgd-nexus.xingshicloud.com/repository/zhgd/</url>
- </repository>
- <snapshotRepository>
- <id>pms-nexus-zhgd</id>
- <name>Nexus Snapshot Repository</name>
- <url>https://zhgd-nexus.xingshicloud.com/repository/zhgd/</url>
- </snapshotRepository>
- </distributionManagement>
注意,上传和下载的逻辑都要到一个仓库zhgd下,不然新deploy的包会下载不到。
如果代码中还配置了公共插件的下载逻辑,可以不写成zhgd库,连nexus上的阿里云代理仓库去下载即可,私有的包都要到zhgd下。
- <pluginRepositories>
- <pluginRepository>
- <id>nexus</id>
- <url>http://zhgd-nexus.xingshicloud.com/repository/maven-public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </pluginRepository>
- </pluginRepositories>
四、编译环境适配
考虑在公网,nexus取消了匿名用户拉包的权限,目前统一使用admin账号,本地的setting文件中需要配置仓库id和密码
- <server>
- <id>pms-nexus-zhgd</id>
- <username>admin</username>
- <password>qDsU#Nl%orDo</password>
- </server>
- <server>
- <id>nexus</id>
- <username>admin</username>
- <password>qDsU#Nl%orDo</password>
- </server>
同时,由于智慧工地存在一次迁移逻辑,部分被依赖的依赖还存在nexus.pinming.org这个内网无法被连接的maven私服中,本地编译环境需要做超时配置,快速过掉连不上的pinming仓库的包。
- <server>
- <id>pms-nexus-thirdparty</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
- <server>
- <id>pms-nexus-snapshots</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
- <server>
- <id>pinming-nexus-snapshots</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
- <server>
- <id>pms-nexus-releases</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
- <server>
- <id>3rd-party</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
- <server>
- <id>pinming-nexus</id>
- <configuration>
- <httpConfiguration>
- <all>
- <connectionTimeout>100</connectionTimeout>
- <readTimeout>100</readTimeout>
- </all>
- </httpConfiguration>
- </configuration>
- </server>
否则会由于层层依赖,导致外部开发者下不到metadata文件
五、nexus备份
由于高权限账号的不安全性,运维利用了rsync将nexus的数据目录定期增量备份到了nas存储中(IP为10.100.10.202的ECS挂载了NAS存储)。
- ###以nexus部署机器做为rsync服务端,安装rsync及服务端配置略
- ###编写备份脚本并放到crontab中定期执行
- [root@zhgd-mysql-cloudcanal-kubepi-prod ~]# cat /k8slog/10.100.10.206/nexus_backup/rsync_nexus.sh
- #!/bin/bash
- remote_ip=10.100.10.206
- rsync_user=opshaibo
- rsync_dir=/k8slog/$remote_ip/nexus_backup/nexus-data
- DATE=`date +%Y%m%d%H%M%S`
- LogFile=/k8slog/$remote_ip/nexus_backup/nexusbackup.log
-
- echo -e "\033[36m ---------------------开始备份 $DATE -----------------\033[0m">>$LogFile
- #备份命令如下:
- ##--delete删除目标目录比源目录中多的文件
- rsync -avzu --delete --progress rsync://${rsync_user}@${remote_ip}/nexusdata ${rsync_dir} --password-file=/etc/rsync_client.pas
-
- if [ $? -eq 0 ];
- then
- echo -e " \033[32m 三局私有nexus仓库 rsync备份成功\033[0m">>$LogFile
- #微信报警
- curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=126acc51-3bd8-421d-ae1c-19bfdbff70e2' \
- -H 'Content-Type: application/json' \
- -d '
- {
- "msgtype": "markdown",
- "markdown": {
- "content": "<font color=\"warning\">三局私有nexus仓库 rsync备份成功</font>"
- }
- }'
- else
- echo -e "\033[31m 三局私有nexus仓库 rsync备份失败\033[0m">>$LogFile
- #微信报警
- curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=126acc51-3bd8-421d-ae1c-19bfdbff70e2' \
- -H 'Content-Type: application/json' \
- -d '
- {
- "msgtype": "markdown",
- "markdown": {
- "content": "<font color=\"warning\">三局私有nexus仓库 rsync备份失败,请快速解决问题!!</font>"
- }
- }'
- fi
- now_time=`date +%Y%m%d%H%M%S`
- echo -e "\033[36m ---------------------结束备份 $now_time -----------------\033[0m">>$LogFile
- tar -czPf nexus-${now_time}.tar.gz /k8slog/$remote_ip/nexus_backup/nexus-data
- mv nexus-${now_time}.tar.gz /k8slog/$remote_ip/nexus_backup/tar/
- find /k8slog/$remote_ip/nexus_backup/tar -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。