本文将详细介绍如何在 Rocky Linux 9 上安装 MongoDB Community Edition,并进一步配置自定义的数据库存储路径和日志路径。同时,针对 SELinux 安全机制可能带来的权限问题,提供完整的解决方案。
一、准备工作
1. 系统要求
- Rocky Linux 9(x86_64 架构)
- root 权限或具有 sudo 权限的用户
- 网络连接正常(用于下载 MongoDB 包)
2. 更新系统
sudo dnf update -y
3. 安装必要工具
sudo dnf install -y vim wget curl gnupg libcurl openssl
二、添加 MongoDB 官方 YUM 仓库
MongoDB 官方提供了适用于 RHEL 系列(包括 Rocky Linux)的 YUM 仓库。
# 创建 MongoDB 的 repo 文件
sudo tee /etc/yum.repos.d/mongodb-org-7.0.repo <<EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
💡 注意:截至 2025 年,MongoDB 最新稳定版为 7.0。如需其他版本,请替换
7.0为对应版本号(如6.0)。
三、安装 MongoDB
sudo dnf install -y mongodb-org
该命令将安装以下组件:
mongodb-org-servermongodb-org-mongoshmongodb-org-toolsmongodb-org-database-tools
四、启动并启用 MongoDB 服务
# 启动服务
sudo systemctl start mongod
# 设置开机自启
sudo systemctl enable mongod
# 检查状态
sudo systemctl status mongod
此时 MongoDB 默认使用以下路径:
- 数据目录:
/var/lib/mongo - 日志文件:
/var/log/mongodb/mongod.log - 配置文件:
/etc/mongod.conf
五、进阶配置:更改自定义数据目录与日志目录
假设我们要将数据目录改为 /data/mongodb,日志目录改为 /var/log/mongodb-custom。
1. 创建新目录并设置权限
sudo mkdir -p /data/mongodb
sudo mkdir -p /var/log/mongodb-custom
# 设置属主为 mongod 用户(MongoDB 默认运行用户)
sudo chown -R mongod:mongod /data/mongodb
sudo chown -R mongod:mongod /var/log/mongodb-custom
2. 修改 MongoDB 配置文件
编辑 /etc/mongod.conf:
sudo vim /etc/mongod.conf
修改以下部分:
storage:
dbPath: /data/mongodb
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb-custom/mongod.log
⚠️ 注意 YAML 格式对缩进敏感,确保使用空格而非制表符。
3. 重启 MongoDB 服务
sudo systemctl restart mongod
如果一切正常,服务应成功启动。
六、处理 SELinux 权限问题(关键步骤)
Rocky Linux 默认启用 SELinux(Enforcing 模式),它会阻止 MongoDB 访问非标准路径,即使文件权限正确。
方法一:为自定义目录设置正确的 SELinux 上下文(推荐)
1. 查看默认 MongoDB 目录的 SELinux 上下文
ls -Z /var/lib/mongo
# 输出类似:unconfined_u:object_r:mongod_var_lib_t:s0
ls -Z /var/log/mongodb
# 输出类似:unconfined_u:object_r:mongod_log_t:s0
2. 为新目录设置相同上下文
# 设置数据目录上下文
sudo semanage fcontext -a -t mongod_var_lib_t "/data/mongodb(/.*)?"
# 设置日志目录上下文
sudo semanage fcontext -a -t mongod_log_t "/var/log/mongodb-custom(/.*)?"
如果
semanage命令不存在,先安装策略管理工具:sudo dnf install -y policycoreutils-python-utils
3. 应用上下文
sudo restorecon -Rv /data/mongodb
sudo restorecon -Rv /var/log/mongodb-custom
方法二:临时禁用 SELinux(不推荐用于生产环境)
仅用于测试:
sudo setenforce 0 # 临时设为 Permissive 模式
永久禁用需修改 /etc/selinux/config,但强烈不建议。
七、验证配置是否生效
1. 检查服务状态
sudo systemctl status mongod
确保没有 Permission denied 或 SELinux is preventing 错误。
2. 查看日志
sudo tail -f /var/log/mongodb-custom/mongod.log
应看到正常启动信息,例如:
[initandlisten] waiting for connections on port 27017
3. 连接 MongoDB Shell
mongosh
执行简单命令验证:
db.version()
use test
db.test.insertOne({ hello: "world" })
db.test.find()
八、防火墙配置(可选)
若需远程访问 MongoDB(默认仅监听 localhost),请谨慎操作:
# 仅在必要时开放端口(默认 27017)
sudo firewall-cmd --permanent --add-port=27017/tcp
sudo firewall-cmd --reload
🔒 安全建议:不要直接暴露 MongoDB 到公网。应配合绑定 IP、认证、TLS 等安全措施。
九、总结
通过本教程,你已完成以下操作:
- 在 Rocky Linux 9 上安装 MongoDB 7.0
- 自定义数据库和日志存储路径
- 正确配置 SELinux 上下文以避免权限拒绝
- 验证服务正常运行
关键点回顾:
- SELinux 是常见“看不见的拦路虎”,务必使用
semanage + restorecon设置上下文。 - 所有自定义目录必须属于
mongod用户。 - 修改配置后务必重启
mongod服务。
📌 提示:生产环境中建议启用身份验证、网络绑定限制、定期备份及监控。
如有问题,可通过 journalctl -u mongod 或查看日志进一步排查。
✅ 教程完成于 2025 年 12 月,适用于 Rocky Linux 9 + MongoDB 7.0。