一、Nexus在云环境部署的准备
1.1 先搞懂Nexus是啥
很多开发者可能平时没听过这个名字,但其实每天用的各种软件包,比如Java开发用的jar包、Node.js用的npm包、Python用的pip包,还有Docker的镜像包,都可以存在Nexus里。简单说,它就是个统一的软件“仓库管理员”,你可以把需要的各种依赖都存在里面,不用每次从外网(比如官方的仓库)拉,尤其适合团队一起开发的时候用。在云环境里用它,好处更多——不用自己买服务器,不用管硬件维护,按使用量付费,弹性扩容,方便得很。
1.2 部署前的基础准备
选云环境的时候,不用选太高端的,至少要满足内存2G以上,因为Nexus本身吃内存,要是给它分1G内存,跑起来会卡甚至崩。系统选常用的CentOS或者Ubuntu都行,接下来的部署我们用Docker,因为它统一了环境,不会出现“我这行,你那不行”的问题,所有示例都用Docker技术栈,不会混别的。
二、Nexus的具体部署步骤(Docker版)
2.1 云服务器的前置配置
先在云服务器上创建用来存Nexus数据的目录,这个很重要,因为如果直接把数据存在Docker容器里,一旦容器被删除,所有包和配置都会没,所以必须挂载到服务器的本地硬盘。命令如下:
# 创建Nexus数据的持久化目录,路径自己选,这里用/opt/nexus-data,方便找
mkdir -p /opt/nexus-data
# 给目录赋权限,Docker容器里的Nexus进程需要读写这个目录,不然会报错
chmod -R 777 /opt/nexus-data
这里要注意,云服务器的硬盘选高性能云盘,别选普通的,不然拉包的时候会慢。然后去云服务商的控制台,给这台服务器的安全组开8081端口,因为Nexus默认用8081端口对外提供服务,不开的话,外面的电脑访问不了。
2.2 正式部署Nexus容器
接下来用Docker拉取Nexus的镜像并启动,命令如下,每个参数都有注释:
# 启动Nexus3容器,分步骤解释:
# --name nexus3 给容器起个名字,方便管理
# -p 8081:8081 把容器的8081端口映射到云服务器的8081端口,这样外面就能访问
# -v /opt/nexus-data:/nexus-data 把服务器的持久化目录挂载到容器里,数据就存在这了
# -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g" 给Nexus分配内存,最小2G,最大2G,避免内存爆了
# sonatype/nexus3:latest 用最新版的Nexus3镜像
docker run -d \
--name nexus3 \
-p 8081:8081 \
-v /opt/nexus-data:/nexus-data \
-e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g" \
sonatype/nexus3:latest
启动后等个2-3分钟,因为Nexus启动比较慢,然后用浏览器访问云服务器的公网IP:8081,就能看到登录界面了。
三、Nexus在云环境里的日常管理要点
3.1 资源监控,别让它“累垮”
Nexus跑起来之后,得盯着它的资源用得咋样,不然内存满了或者磁盘满了,就会报错停服务。常用的监控命令:
# 查看Nexus容器的实时资源使用,包括CPU、内存、网络等
docker stats nexus3 --no-stream
# 查看Nexus数据目录的磁盘占用,要是超过90%就得清理没用的包
df -h /opt/nexus-data
比如发现内存占用接近2G,就检查是不是同时有太多人在拉包,或者有没有长时间没关的构建进程,要是磁盘快满了,就得删旧的、不用的软件包。
3.2 权限管理,防止“乱搞”
云环境里的Nexus要是没权限,谁都能改配置、删包,那麻烦就大了。必须分好用户和角色,比如:
- 管理员角色:能改配置、删包、新建仓库
- 开发角色:只能拉包,不能改东西
- 测试角色:只能读指定的仓库 操作也简单,先从/opt/nexus-data/admin.password里找到默认密码,登录后,进到“安全设置”里,新建角色,再建用户,把用户分到对应角色里。还要注意,别用默认的admin用户名和密码,登录后第一时间改密码,或者删掉默认用户,自己建管理员用户。
3.3 定期备份,别等丢数据才后悔
云环境虽然稳定,但也有意外,比如云硬盘故障或者误删,所以必须定期备份Nexus的持久化目录。可以写个定时任务,每天自动备份:
# 手动备份命令,把数据打包成带日期的压缩包,存在另一个目录或者云对象存储
tar -zcvf /opt/backup/nexus-data-$(date +%Y%m%d).tar.gz /opt/nexus-data
# 要是要存到云对象存储,比如阿里云OSS,可以用ossutil上传,这里只讲备份本地
# 设置定时任务,每天凌晨2点自动备份
crontab -e
# 打开编辑界面后,加入这行,注意转义%,不然crontab会识别错
0 2 * * * tar -zcvf /opt/backup/nexus-data-$(date+\%Y\%m\%d).tar.gz /opt/nexus-data
备份文件别存在和Nexus同一个云硬盘里,最好存在对象存储里,这样就算硬盘坏了,备份还能拿回来。
四、Nexus在云环境里的核心应用场景
4.1 团队开发的依赖缓存
这个是最常用的场景,比如公司有10个开发,每个人拉Maven包的时候,都从外网拉,每个包要10秒,10个人同时拉的话,外网带宽全占了,还卡。要是有个内部的Nexus,大家都从这里拉,Nexus已经缓存了常用的包,第一次拉的人从外网拉,后面的人直接从Nexus拉,速度变成1秒,省了带宽,还快了很多。
4.2 私有镜像的统一管理
很多公司用Docker部署服务,要是把镜像存在外网的Docker Hub,万一哪天Hub访问不了,或者有版本合规问题,就麻烦了。在云环境里部署Nexus,把私有镜像存在里面,所有容器都从Nexus拉,稳定又合规,还能控制谁能拉镜像,安全。
4.3 测试环境的包源统一
测试环境里,所有服务用的包必须一致,不然测出来的结果不对。用Nexus当测试环境的唯一包源,所有测试机都从这里拉包,保证所有环境的包都是同一个版本,不会出现“我这测的没问题,你那测的崩了”的情况,减少测试的坑。
五、Nexus在云环境里的优缺点分析
5.1 优点
- 部署快:用Docker的话,几分钟就能搞定,不用自己编译安装,也不用搞各种依赖。
- 成本低:云环境按需付费,不用买自己的服务器,小团队每月几十块钱就能搞定。
- 功能全:支持Java、Node、Python、Docker等各种类型的包,还能设权限、备份,不用自己加额外工具。
- 稳定:Docker容器隔离,不会影响云服务器上的其他服务,出问题了删容器重开就行,数据还在。
5.2 缺点
- 吃内存:最少2G,小的云服务器(1核2G)的话,可能Nexus吃满内存,导致服务器卡,得给服务器加内存。
- 备份麻烦:需要自己写定时任务备份,云服务商不会自动给你备份Nexus的数据,得自己操心。
- 磁盘占用快:存的包越多,磁盘用得越快,得定期清理没用的旧包,不然磁盘满了Nexus用不了。
- 配置复杂:刚开始可能搞不懂权限和仓库类型,比如不知道分hosted、proxy、group这三种仓库,得花点时间研究。
六、云环境部署管理Nexus的注意事项
6.1 安全配置别马虎
- 云服务器的安全组一定要开8081端口,别全放开,只允许公司内部的IP访问,或者需要的开发者IP。
- 默认的admin密码一定要改,别用默认的,也别泄露,最好删掉默认用户,自己建管理员账号。
- 别在公网直接暴露Nexus,要是给外部人用,最好加个反向代理,用HTTPS加密,安全。
6.2 数据持久化别偷懒
绝对不能把Nexus的数据存在Docker容器里,必须挂载到云服务器的本地硬盘,或者云盘,不然一删容器,数据全没,哭都来不及。之前部署的时候已经强调了,这个是最基础的。
6.3 资源别配太少
内存最少2G,要是团队超过5个人,或者经常有多人同时拉包,给4G内存,不然Nexus会因为内存不够崩溃。磁盘选高性能云盘,IO快,拉包速度也快。
6.4 定期清理旧包
每隔1-2个月,清理Nexus里没用的包,比如旧版本的jar包,已经废弃的项目的镜像,这些包占空间又没用,清理后磁盘压力就小了。
6.5 监控要开
开云服务商的监控,设置内存、磁盘、CPU的告警,比如内存超过80%就发邮件或者短信告警,这样能提前处理,不会等到崩了才发现。
七、总结
Nexus在云环境里用Docker部署是最方便的,不用搞复杂的环境,几分钟就能搭好。核心要注意的就是数据别存在容器里,要持久化,定期备份,权限要管好,别让别人乱改,还有监控资源,别让它累垮。它适合团队用,省带宽,加快开发速度,统一包源,减少各种坑,虽然有一些小缺点,但只要注意那些要点,就能用得很顺畅,是开发团队必备的工具之一。
Comments