1. CentOS7环境下Nexus3私有仓库部署指南
在软件开发团队协作中,依赖管理是个永恒的话题。每次从公网拉取依赖不仅耗时,还会遇到网络波动导致的构建失败。三年前我们团队就曾因某公共仓库服务中断,导致整个研发流程停滞了整整一天。自建Nexus私有仓库后,这类问题再没出现过。本文将基于CentOS7环境,手把手带你完成Nexus3的完整部署。
生产环境建议使用物理服务器或独立虚拟机部署,资源分配至少4核CPU+8GB内存。我曾尝试在2GB内存的机器上运行,当并发构建任务多时经常出现OOM错误。
1.1 基础环境准备
首先确保系统为CentOS7最新版本。我习惯使用Minimal安装模式,减少不必要的服务占用资源:
bash复制# 查看系统版本
cat /etc/redhat-release
# 更新系统(重要!避免后续安装出现依赖冲突)
sudo yum update -y && sudo reboot
网络配置需要特别注意:
- 如果使用虚拟机,建议选择桥接模式
- 防火墙需开放8081端口(Nexus默认端口)
- 关闭SELinux(否则会出现权限问题)
bash复制# 防火墙设置
sudo firewall-cmd --permanent --add-port=8081/tcp
sudo firewall-cmd --reload
# 临时关闭SELinux(生产环境建议配置策略)
sudo setenforce 0
1.2 JDK安装与配置
Nexus3需要Java8及以上环境。推荐使用OpenJDK:
bash复制sudo yum install -y java-11-openjdk-devel
# 验证安装
java -version
配置JVM参数是个技术活。通过多年调优经验,建议在/etc/environment中添加:
bash复制JAVA_OPTS="-Xms4g -Xmx4g -XX:MaxDirectMemorySize=2g"
关键参数说明:
- Xms/Xmx设置为相同值避免动态调整开销
- MaxDirectMemorySize必须设置,否则大文件上传会失败
- 不要超过物理内存的70%,我曾在8GB机器设置6GB导致频繁GC
2. Nexus3安装与初始化
2.1 二进制包安装
官方推荐直接下载tar.gz包安装:
bash复制# 创建专用用户(安全最佳实践)
sudo useradd -M -d /opt/nexus -s /bin/false -r nexus
# 下载最新版(当前为3.58.1)
wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz
# 解压到/opt目录
sudo tar -zxvf latest-unix.tar.gz -C /opt/
sudo mv /opt/nexus-3* /opt/nexus
sudo chown -R nexus:nexus /opt/nexus
目录结构说明:
code复制/opt/nexus/
├── bin/ # 启动脚本
├── etc/ # 配置文件
├── system/ # 服务单元文件
└── sonatype-work/ # 数据存储目录
2.2 系统服务配置
创建systemd服务文件更利于管理:
bash复制sudo vim /etc/systemd/system/nexus.service
写入以下内容(注意路径要与实际一致):
ini复制[Unit]
Description=Nexus Service
After=network.target
[Service]
Type=forking
User=nexus
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
启动服务并设置开机自启:
bash复制sudo systemctl daemon-reload
sudo systemctl enable --now nexus
# 查看状态(正常会显示running)
sudo systemctl status nexus
常见问题:如果启动失败,检查/opt/nexus/sonatype-work/nexus3/log/nexus.log。我遇到过磁盘空间不足导致启动失败的情况。
3. 初始配置实战
3.1 首次登录配置
访问http://服务器IP:8081,初始管理员账号:
- 用户名:admin
- 密码:查看/opt/nexus/sonatype-work/nexus3/admin.password
首次登录会强制修改密码。建议使用密码管理器生成复杂密码。
3.2 仓库规划策略
根据多年经验,建议按以下结构组织仓库:
| 仓库类型 | 名称规范 | 用途说明 |
|---|---|---|
| Proxy | maven-central | 代理中央仓库 |
| Proxy | npm-registry | 代理npm官方源 |
| Hosted | maven-releases | 内部发布版本 |
| Hosted | maven-snapshots | 内部快照版本 |
| Group | maven-public | 聚合多个仓库的统一入口 |
创建示例(以Maven仓库为例):
- 进入Repository → Create repository
- 选择maven2(proxy)
- 填写Name为maven-central
- 在Remote storage填写https://repo1.maven.org/maven2/
- 其他保持默认,点击Create
性能调优:在Blob Stores中创建独立的存储分区,我通常按仓库类型划分,如maven-blobs、npm-blobs等,可以显著提升IO性能。
3.3 用户权限管理
RBAC配置是安全的关键。推荐角色划分:
-
开发者角色:
- nx-repository-view-*-browse
- nx-repository-view-*-read
- nx-repository-view-*-add
- nx-repository-view-*-edit
-
部署者角色:
- 包含开发者权限
- nx-repository-view-*-delete
-
管理员角色:
- 所有nx-*权限
创建用户时绑定对应角色,避免直接使用admin账户。
4. 高级配置与优化
4.1 存储空间优化
定期清理快照版本是个好习惯。配置Cleanup策略:
- 进入Repository → 选择目标仓库 → Cleanup
- 设置保留策略(如保留最近3个版本)
- 勾选"Release repositories"以外的所有选项
我还会设置定时任务自动清理:
bash复制# 每周日凌晨2点执行清理
0 2 * * 0 curl -u admin:密码 -X POST http://localhost:8081/service/rest/v1/script/cleanup/run
4.2 备份方案
采用全量+增量备份策略:
- 全量备份:每周备份sonatype-work整个目录
- 增量备份:每日备份DB和blob存储
bash复制# 简单备份脚本示例
tar -zcvf nexus-backup-$(date +%Y%m%d).tar.gz \
--exclude='./sonatype-work/nexus3/tmp' \
/opt/nexus/sonatype-work
4.3 性能监控
建议配置以下监控项:
- JVM内存使用情况
- 请求响应时间(P99<500ms)
- 存储空间使用率(预警阈值80%)
- 后台任务执行状态
可以通过JMX或Prometheus暴露指标。这是我常用的JMX配置:
bash复制# 在bin/nexus.vmoptions中添加
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=5000
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
5. 常见问题排坑指南
5.1 启动失败排查
现象:服务状态显示active但无法访问
解决步骤:
- 检查端口占用:
netstat -tlnp | grep 8081 - 查看日志:
tail -f /opt/nexus/sonatype-work/nexus3/log/nexus.log - 检查文件权限:
ls -l /opt/nexus/ - 检查内存:
free -h
5.2 上传包失败
典型错误:Return code is: 400
可能原因:
- 仓库类型不匹配(如传到了proxy仓库)
- 权限不足
- 包已存在且不允许覆盖
解决方案:
- 确认目标仓库是hosted类型
- 检查用户权限
- 在仓库设置中启用"Allow redeploy"
5.3 性能调优参数
在/opt/nexus/bin/nexus.vmoptions中添加:
bash复制-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35
-XX:+ParallelRefProcEnabled
这些参数在我们生产环境使GC时间减少了60%。建议通过VisualVM监控GC情况再调整。
6. 客户端配置示例
6.1 Maven配置
在settings.xml中添加:
xml复制<mirrors>
<mirror>
<id>nexus</id>
<url>http://nexus地址/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
6.2 npm配置
bash复制npm config set registry http://nexus地址/repository/npm-group/
6.3 Docker配置
在/etc/docker/daemon.json中添加:
json复制{
"insecure-registries": ["nexus地址:8082"],
"registry-mirrors": ["http://nexus地址:8082"]
}
记得重启docker服务:sudo systemctl restart docker
7. 安全加固建议
- 启用HTTPS(使用Nginx反向代理)
- 配置IP白名单(在$NX_SSL/nexus.properties设置)
- 定期审计用户权限
- 开启操作日志审计
- 禁用匿名访问(在Security → Anonymous)
上周刚帮客户排查过一个安全问题:因匿名用户有写权限,导致被上传了恶意组件。切记最小权限原则!
8. 维护与升级
小版本升级(如3.58.0→3.58.1)直接替换/opt/nexus目录即可。大版本升级建议:
- 完整备份数据
- 在新环境部署新版本
- 使用升级工具迁移数据
- 并行运行验证后再切换
我维护的Nexus实例已经平稳运行3年多,期间经过5次大版本升级。关键是要有完善的备份和回滚方案。
