🚀 实战记录:在 Rocky Linux 9.6 上“强行”离线安装 MongoDB 4.4.12
导读:由于应用架构限制,必须使用 MongoDB 4.4,但生产环境已升级至最新的 Rocky Linux 9.6。官方不再提供 RHEL 9 的 4.4 版本 RPM 包,怎么办?本文带你通过“借力 EL8 包 + 补全 OpenSSL 依赖”的方式,完美解决跨版本离线安装难题。
🛑 背景与痛点
近期在维护一套遗留系统时,遇到了一个典型的“版本错配”问题:
- 操作系统:Rocky Linux 9.6 (基于 RHEL 9)
- 数据库需求:MongoDB 4.4.12 (因代码兼容性无法升级至 5.0+)
- 网络环境:纯内网,必须离线安装
核心矛盾:MongoDB 官方仓库中,4.4 系列最高只支持到 RHEL 8 (el8),而 Rocky 9 默认使用的是 OpenSSL 3.0,MongoDB 4.4 却强依赖 OpenSSL 1.1。直接安装 el8 的包会因缺少 libssl.so.1.1 而失败。
经过调研与测试,我们找到了一套成熟的**“曲线救国”**方案:强制安装 EL8 的 RPM 包,并手动注入兼容版的 OpenSSL 1.1 库。
📦 第一步:准备离线安装包
在有网络的机器上,我们需要下载两类资源:
- MongoDB 4.4.12 (el8 版本)
- OpenSSL 1.1.1k (el8 版本) —— 这是成功的关键
1. 下载 MongoDB 4.4.12
访问 MongoDB 官方 RHEL 8 仓库下载以下 5 个文件:
BASE_URL="https://repo.mongodb.org/yum/redhat/8/mongodb-org/4.4/x86_64/RPMS/"
VER="4.4.12"
wget ${BASE_URL}mongodb-org-server-${VER}-1.el8.x86_64.rpm
wget ${BASE_URL}mongodb-org-shell-${VER}-1.el8.x86_64.rpm
wget ${BASE_URL}mongodb-org-mongos-${VER}-1.el8.x86_64.rpm
wget ${BASE_URL}mongodb-org-tools-${VER}-1.el8.x86_64.rpm
wget ${BASE_URL}mongodb-org-${VER}-1.el8.x86_64.rpm
2. 下载 OpenSSL 1.1 兼容库
由于 CentOS 8 源已归档,我们从阿里云镜像或 Vault 下载最终稳定版 (1.1.1k-5 或更高):
# 示例:从阿里云镜像下载
ALIYUN_BASE="https://mirrors.aliyun.com/centos/8.5.2111/BaseOS/x86_64/os/Packages/"
wget ${ALIYUN_BASE}openssl-libs-1.1.1k-5.el8_5.x86_64.rpm
wget ${ALIYUN_BASE}openssl-1.1.1k-5.el8_5.x86_64.rpm
✅ 文件清单验证
打包前,请确认你的目录中有以下 7 个文件(与你实际下载的版本号可能微调,但必须包含这 7 个):
[root@k8s-node06 mongo44_bundle]# ls -lh
-rw-r--r--. 1 root root 10900 Jan 22 2022 mongodb-org-4.4.12-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 17680404 Jan 22 2022 mongodb-org-mongos-4.4.12-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 22874236 Jan 22 2022 mongodb-org-server-4.4.12-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 14572304 Mar 24 15:13 mongodb-org-shell-4.4.12-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 10784 Mar 24 15:13 mongodb-org-tools-4.4.12-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 725656 Mar 24 15:24 openssl-1.1.1k-5.el8_5.x86_64.rpm
-rw-r--r--. 1 root root 1537572 Mar 24 15:24 openssl-libs-1.1.1k-5.el8_5.x86_64.rpm
mongo44_bundle.tar.gz
将上述文件打包上传至 Rocky Linux 9.6 服务器即可。
🛠️ 第二步:离线安装实操
1. 优先安装 OpenSSL 1.1
注意顺序! 必须先安装 OpenSSL,否则 MongoDB 启动时会报 libssl.so.1.1: cannot open shared object file。
由于是跨版本安装,需使用 --nodeps --force 忽略依赖检查。
# 安装 libs
rpm -ivh --nodeps --force openssl-libs-1.1.1k-5.el8_5.x86_64.rpm
# 安装主程序
rpm -ivh --nodeps --force openssl-1.1.1k-5.el8_5.x86_64.rpm
# 刷新动态链接库缓存(至关重要)
ldconfig
# 验证是否生效
ldconfig -p | grep libssl.so.1.1
# 若有输出,说明系统已识别到旧版库
2. 安装 MongoDB
使用 dnf 本地安装,它会自动处理 5 个 MongoDB RPM 包之间的依赖顺序。
dnf install -y ./*.rpm
注:如果 dnf 报错依赖冲突,可退而求其次使用 rpm -ivh --nodeps mongodb-org*.rpm 强制安装。
3. 初始化权限
mkdir -p /var/lib/mongo /var/log/mongodb
chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
restorecon -Rv /var/lib/mongo /var/log/mongodb
⚙️ 第三步:配置远程访问 (Navicat 连接必备)
默认配置仅允许本地连接,若需使用 Navicat 等工具远程管理,需执行以下操作:
1. 修改绑定 IP
编辑 /etc/mongod.conf:
net:
port: 27017
bindIp: 0.0.0.0 # 改为 0.0.0.0 允许所有 IP,或指定具体 IP
重启服务:
systemctl restart mongod
2. 创建管理员用户
启动服务后,先在本地登录创建用户:
mongo
use admin
db.createUser({
user: "admin",
pwd: "YourStrongPassword",
roles: [{ role: "root", db: "admin" }]
})
exit
然后再次编辑 /etc/mongod.conf 开启认证:
security:
authorization: enabled
3. 重启并开放防火墙
# 重启服务
systemctl restart mongod
# 开放 27017 端口或关闭防火墙
firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload
🎉 验证与总结
此时,打开你电脑上的 Navicat for MongoDB:
- Host:
192.168.4.6(你的服务器 IP) - Port:
27017 - User/Password: 刚才创建的 admin 账号
点击“测试连接”,应该能顺利看到绿色的成功提示!✅
💡 核心经验总结
- 依赖隔离:Rocky 9 自带 OpenSSL 3.0,我们通过并行安装 EL8 的 OpenSSL 1.1 库,实现了“新旧共存”,互不干扰。
- 版本选择:尽量下载 CentOS 8 生命周期内的最终版本(如
1.1.1k-5或-19),稳定性更好。 - 适用场景:此方法适用于必须保留旧版数据库且无法升级应用代码的过渡期场景。
温馨提示:由于是非官方支持的跨版本安装,建议在进行系统大版本升级(
dnf upgrade)时,注意保护已安装的openssl-1.1.1k包不被误删。
评论区