实战运维|CentOS7 Nexus3.21.1 迁移至 Rocky Linux9.5 + 升级至3.68.1

前言:随着 CentOS7 官方停止维护,企业服务器逐步迁移至 Rocky Linux9.5 等稳定替代发行版。本文针对「CentOS7 上的 Nexus3.21.1 先迁移到 Rocky9.5,再跨版本升级到3.68.1-02」的生产级场景,拆分「数据迁移」+「版本升级」两个核心阶段,全程规避系统差异、版本兼容问题,重点修正高风险解压路径隐患,所有步骤经生产环境验证,零数据丢失、可直接落地。

一、场景说明与环境对比

1. 业务目标

  1. 数据迁移:将 CentOS7 上 Nexus3.21.1 的仓库、用户、配置全量迁移到 Rocky Linux9.5;
  2. 版本升级:在 Rocky9.5 环境中,把迁移后的3.21.1升级至最新稳定版3.68.1-02;
  3. 核心要求:迁移不丢数据、升级不毁服务、适配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. 功能验证

  1. 访问 http://Rocky9.5_IP:8081,确认版本为3.68.1-02
  2. 原有仓库、构件、用户完全正常;
  3. 执行 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. 回滚方案(升级失败)

  1. 停止新版本服务:pkill -f nexus
  2. 恢复升级前数据备份(遵循安全解压规范):tar -zxvf /var/nexus/backup/nexus_data_before_upgrade_*.tar.gz -C /var/nexus
  3. 重新启动迁移版3.21.1,快速恢复业务。

八、总结(生产核心要点,重点强调安全)

  1. 分步操作最安全:先迁移数据到Rocky9.5跑通3.21.1,再升级版本,避免迁移+升级同时出错;
  2. 系统差异必适配 :Rocky9.5用dnf、JDK11、/sbin/nologin/usr/share/java/tzdb.dat,完全区别CentOS7;
  3. 数据安全是底线 :迁移前、升级前双备份 ,且所有解压操作均限定在 /var/nexus 目录,杜绝覆盖系统文件的致命风险;
  4. 验证闭环:迁移验证数据、升级验证版本+功能,确保业务无影响;
  5. 关键修正记牢 :数据解压路径必须为 -C /var/nexus,严禁使用 -C /,这是生产环境安全运行的核心前提。

本文全程覆盖「CentOS7迁移+Rocky9.5升级」双场景,修正高风险安全隐患,所有步骤经生产环境验证,是企业老旧Nexus迁移升级的标准化实操文档,可直接落地使用。

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220708 天前
如何搭建本地yum源(上)
运维
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质11 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务