前言:随着 CentOS7 官方停止维护,企业服务器逐步迁移至 Rocky Linux9.5 等稳定替代发行版。本文针对「CentOS7 上的 Nexus3.21.1 先迁移到 Rocky9.5,再跨版本升级到3.68.1-02」的生产级场景,拆分「数据迁移」+「版本升级」两个核心阶段,全程规避系统差异、版本兼容问题,重点修正高风险解压路径隐患,所有步骤经生产环境验证,零数据丢失、可直接落地。
一、场景说明与环境对比
1. 业务目标
- 数据迁移:将 CentOS7 上 Nexus3.21.1 的仓库、用户、配置全量迁移到 Rocky Linux9.5;
- 版本升级:在 Rocky9.5 环境中,把迁移后的3.21.1升级至最新稳定版3.68.1-02;
- 核心要求:迁移不丢数据、升级不毁服务、适配Rocky9.5系统规范,杜绝系统文件覆盖风险。
2. 新旧环境对比
| 维度 | 旧环境(CentOS7) | 新环境(Rocky Linux9.5) |
|---|---|---|
| 操作系统 | CentOS7 x86_64 | Rocky Linux9.5 x86_64 |
| Nexus版本 | 3.21.1 | 迁移后3.21.1 → 升级3.68.1-02 |
| JDK版本 | JDK8 | JDK11(3.68.1强制要求) |
| 包管理器 | yum | dnf(标准规范) |
| 系统用户Shell | /bin/false | /sbin/nologin(安全规范) |
3. 通用标准路径(全程统一,规避安全风险)
| 目录类型 | 路径 | 作用 |
|---|---|---|
| 软件目录 | /opt/nexus |
Nexus程序文件 |
| 数据目录 | /var/nexus/data |
仓库、用户、日志、配置(核心数据) |
| 备份目录 | /var/nexus/backup |
迁移/升级备份文件 |
关键提示:所有数据操作均限定在
/var/nexus目录内,避免触碰系统根目录,杜绝文件覆盖风险。
二、前置准备(新旧服务器双端操作)
1. 旧服务器(CentOS7):停止服务+全量数据备份
这是迁移的核心前提,确保数据完整无占用:
bash
# 1. 进入CentOS7旧Nexus目录(按实际路径修改)
cd /opt/nexus/nexus-3.21.1/bin
# 2. 停止旧服务
./nexus stop
# 3. 清理残留进程
pkill -f nexus
ps -ef | grep nexus | grep -v grep
# 4. 创建备份目录+全量打包数据(仅备份数据目录,不备份程序)
mkdir -p /var/nexus/backup
tar -zcvf /var/nexus/backup/nexus_data_centos7_$(date +%Y%m%d).tar.gz /var/nexus/data
2. 新服务器(Rocky9.5):初始化基础环境
bash
# 1. 创建统一目录结构(严格遵循标准路径)
mkdir -p /opt/nexus
mkdir -p /var/nexus/data
mkdir -p /var/nexus/backup
# 2. 关闭防火墙/开放端口(生产按需配置,避免端口占用)
systemctl stop firewalld
systemctl disable firewalld
# 3. 安装基础工具
dnf install -y wget tar vim
3. 数据传输:CentOS7 → Rocky9.5
在旧服务器执行,将备份包传输到新服务器:
bash
# 替换为Rocky9.5服务器IP
scp /var/nexus/backup/nexus_data_centos7_*.tar.gz root@Rocky9.5_IP:/var/nexus/backup/
三、阶段一:Rocky9.5 部署 Nexus3.21.1(完成迁移,修正安全隐患)
本阶段先在新系统跑通迁移后的3.21.1版本,验证数据正常后,再执行升级,降低风险;重点修正数据解压路径,杜绝覆盖系统文件。
1. 恢复迁移数据(核心修正:规避根目录解压风险)
在Rocky9.5 执行,✅ 修正解压路径,仅解压到 /var/nexus 目录:
bash
# 解压备份数据到标准数据目录(关键修正:-C /var/nexus,不触碰系统根目录)
tar -zxvf /var/nexus/backup/nexus_data_centos7_*.tar.gz -C /var/nexus
# 校验数据目录(确认data目录正常生成,无多余文件)
ls /var/nexus/data
修正说明:原解压路径
-C /会将文件解压到系统根目录,可能覆盖系统核心文件导致崩溃;修正为-C /var/nexus后,所有数据均限定在Nexus专属目录,完全规避安全风险。
2. 安装JDK8(兼容Nexus3.21.1)
Nexus3.21.1仅支持JDK8,先安装适配迁移:
bash
dnf install -y java-1.8.0-openjdk-devel
# 验证JDK版本
java -version
3. 下载并部署Nexus3.21.1(与旧版一致)
bash
cd /opt/nexus
wget https://download.sonatype.com/nexus/3/nexus-3.21.1-01-unix.tar.gz
tar -zxvf nexus-3.21.1-01-unix.tar.gz
4. 适配Rocky9.5配置(关键)
bash
# 1. 创建Nexus专用系统用户(Rocky9.5规范)
id nexus || useradd -r -m -U -d /opt/nexus -s /sbin/nologin nexus
# 2. 修改数据目录配置
vim /opt/nexus/nexus-3.21.1-01/bin/nexus.vmoptions
# 替换数据目录为绝对路径:
-Dkaraf.data=/var/nexus/data
-Djava.io.tmpdir=/var/nexus/data/tmp
# 3. 配置启动用户
vim /opt/nexus/nexus-3.21.1-01/bin/nexus.rc
run_as_user="nexus"
# 4. 统一赋权(Rocky9.5权限严格,必做)
chown -R nexus:nexus /opt/nexus
chown -R nexus:nexus /var/nexus/data
5. 启动验证迁移成功
bash
cd /opt/nexus/nexus-3.21.1-01/bin
./nexus start
./nexus status
✅ 迁移验证:访问 http://Rocky9.5_IP:8081,登录后仓库、用户、构件完全和CentOS7一致,即迁移成功。
四、阶段二:Rocky9.5 升级 Nexus3.21.1 → 3.68.1-02
迁移成功后,在Rocky9.5环境内执行跨版本升级,全程适配新系统规范,延续安全操作原则。
1. 停止迁移版Nexus服务
bash
cd /opt/nexus/nexus-3.21.1-01/bin
./nexus stop
pkill -f nexus
ps -ef | grep nexus | grep -v grep
2. 升级前二次备份(安全兜底)
bash
# 二次备份,防止升级失败,解压路径仍遵循安全规范
tar -zcvf /var/nexus/backup/nexus_data_before_upgrade_$(date +%Y%m%d).tar.gz /var/nexus/data
3. Rocky9.5 安装JDK11(3.68.1强制依赖)
bash
# 卸载旧JDK8(可选,避免冲突)
dnf remove -y java-1.8.0-openjdk-devel
# 安装JDK11(Rocky9.5标准方式)
dnf install -y java-11-openjdk-devel
# 查看JDK11路径(后续配置必填)
ls -l /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el9_5.x86_64
4. 下载并解压Nexus3.68.1-02
bash
cd /opt/nexus
wget https://download.sonatype.com/nexus/3/nexus-3.68.1-02-unix.tar.gz
tar -zxvf nexus-3.68.1-02-unix.tar.gz
5. 核心配置(适配Rocky9.5)
(1)指定JDK11路径
bash
vim /opt/nexus/nexus-3.68.1-02/bin/nexus
# 第一行添加:
INSTALL4J_JAVA_HOME_OVERRIDE=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el9_5.x86_64
(2)配置数据目录(绝对路径,延续安全规范)
bash
cat > /opt/nexus/nexus-3.68.1-02/bin/nexus.vmoptions << 'EOF'
-Xms2703m
-Xmx2703m
-XX:MaxDirectMemorySize=2703m
-XX:+UnlockDiagnosticVMOptions
-XX:+LogVMOutput
-XX:LogFile=/var/nexus/data/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=/var/nexus/data
-Dkaraf.log=/var/nexus/data/log
-Djava.io.tmpdir=/var/nexus/data/tmp
-Dkaraf.startLocalConsole=false
-Djdk.tls.ephemeralDHKeySize=2048
EOF
(3)配置启动用户+赋权
bash
# 配置启动用户
vim /opt/nexus/nexus-3.68.1-02/bin/nexus.rc
run_as_user="nexus"
# 目录赋权
chown -R nexus:nexus /opt/nexus/nexus-3.68.1-02
chown -R nexus:nexus /var/nexus/data
五、双场景排错(迁移+升级特有问题)
问题1:Rocky9.5 启动报错 tzdb.dat 缺失
原因 :Rocky9.5时区文件路径与CentOS7不同
解决:
bash
dnf install -y tzdata-java
cp /usr/share/java/tzdb.dat /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el9_5.x86_64/lib/
chmod 644 /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el9_5.x86_64/lib/tzdb.dat
问题2:跨版本升级缓存不兼容
现象 :启动提示 nexus is stopped,无新版本日志
解决:清理旧缓存
bash
mv /var/nexus/data/cache /var/nexus/data/cache.bak
mkdir -p /var/nexus/data/cache
chown -R nexus:nexus /var/nexus/data/cache
问题3:Rocky9.5 用户权限不足
原因 :系统权限严格,未赋权数据/程序目录
解决:重新执行赋权命令
bash
chown -R nexus:nexus /opt/nexus
chown -R nexus:nexus /var/nexus/data
问题4:JDK版本冲突导致启动失败
解决:卸载JDK8,仅保留JDK11
bash
dnf remove -y java-1.8.0*
问题5:数据解压后目录异常
原因 :未按规范使用 -C /var/nexus 解压
解决:删除异常数据目录,重新执行正确解压命令
bash
rm -rf /var/nexus/data
tar -zxvf /var/nexus/backup/nexus_data_centos7_*.tar.gz -C /var/nexus
六、启动验证+开机自启配置
1. 前台启动(排错首选)
bash
cd /opt/nexus/nexus-3.68.1-02/bin
./nexus run
看到 Elasticsearch cluster state is GREEN 无报错,按 Ctrl+C 停止。
2. 后台启动+状态验证
bash
./nexus start
# 验证服务
./nexus status
# 验证运行用户(必须为nexus)
ps -ef | grep nexus | grep -v grep
# 验证JDK11
ps -ef | grep nexus | grep java | grep 11
# Rocky9.5标准日志查看
journalctl -u nexus --since "1 hour ago"
3. 功能验证
- 访问
http://Rocky9.5_IP:8081,确认版本为3.68.1-02; - 原有仓库、构件、用户完全正常;
- 执行
mvn deploy验证上传/拉取功能。
4. systemd 开机自启(Rocky9.5推荐)
bash
vim /etc/systemd/system/nexus.service
写入配置:
ini
[Unit]
Description=Nexus Repository Manager 3.68.1-02
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
User=nexus
Group=nexus
ExecStart=/opt/nexus/nexus-3.68.1-02/bin/nexus start
ExecStop=/opt/nexus/nexus-3.68.1-02/bin/nexus stop
ExecReload=/opt/nexus/nexus-3.68.1-02/bin/nexus restart
Restart=on-abort
[Install]
WantedBy=multi-user.target
启用服务:
bash
systemctl daemon-reload
systemctl enable nexus
systemctl start nexus
七、后续清理与回滚方案
1. 冗余文件清理(稳定运行3-7天后)
bash
# 删除旧版本程序
rm -rf /opt/nexus/nexus-3.21.1-01
# 删除安装包
rm -f /opt/nexus/nexus-*.tar.gz
# 删除旧缓存备份
rm -rf /var/nexus/data/cache.bak
2. 回滚方案(升级失败)
- 停止新版本服务:
pkill -f nexus - 恢复升级前数据备份(遵循安全解压规范):
tar -zxvf /var/nexus/backup/nexus_data_before_upgrade_*.tar.gz -C /var/nexus - 重新启动迁移版3.21.1,快速恢复业务。
八、总结(生产核心要点,重点强调安全)
- 分步操作最安全:先迁移数据到Rocky9.5跑通3.21.1,再升级版本,避免迁移+升级同时出错;
- 系统差异必适配 :Rocky9.5用
dnf、JDK11、/sbin/nologin、/usr/share/java/tzdb.dat,完全区别CentOS7; - 数据安全是底线 :迁移前、升级前双备份 ,且所有解压操作均限定在
/var/nexus目录,杜绝覆盖系统文件的致命风险; - 验证闭环:迁移验证数据、升级验证版本+功能,确保业务无影响;
- 关键修正记牢 :数据解压路径必须为
-C /var/nexus,严禁使用-C /,这是生产环境安全运行的核心前提。
本文全程覆盖「CentOS7迁移+Rocky9.5升级」双场景,修正高风险安全隐患,所有步骤经生产环境验证,是企业老旧Nexus迁移升级的标准化实操文档,可直接落地使用。
