本文将详细介绍如何在 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-server
  • mongodb-org-mongosh
  • mongodb-org-tools
  • mongodb-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 deniedSELinux 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。