在 Debian 上配置 MongoDB,有几个常见坑点和最佳实践值得注意,下面按“安装 → 配置 → 安全 → 运维”来梳理。
Debian 自带的 mongodb 通常是旧版本或已废弃(如 buster 后是 dummy 包)。
✅ 推荐方式:
# 以 MongoDB 6.0 为例
curl -fsSL https://pgp.mongodb.com/server-6.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg --dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/debian $(lsb_release -cs)/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
⚠️ 注意:
$(lsb_release -cs) 必须匹配(如 bookworm / bullseye)404MongoDB 官方明确要求关闭 THP,否则会有性能问题和警告。
临时关闭:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
永久生效(systemd):
sudo systemctl edit mongod
添加:
[Service]
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
ExecStartPre=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
MongoDB 推荐:
nofile ≥ 64000nproc ≥ 32000在 Debian 上:
sudo nano /etc/security/limits.conf
添加:
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000
并确保 PAM 加载 limits:
/etc/pam.d/common-session
session required pam_limits.so
默认:
bindIp: 127.0.0.1
⚠️ 如果对外网开放,必须:
bindIp示例:
net:
port: 27017
bindIp: 0.0.0.0
❌ 不要直接 0.0.0.0 + 无密码
Debian 下 MongoDB 使用 mongod 用户:
sudo chown -R mongod:mongod /var/lib/mongodb
sudo chown -R mongod:mongod /var/log/mongodb
否则会启动失败(非常常见)
security:
authorization: enabled
然后创建管理员:
use admin
db.createUser({
user: "admin",
pwd: "strongpassword",
roles: ["root"]
})
重启:
sudo systemctl restart mongod
Debian 包默认已经是 mongod 用户,⚠️ 不要手贱改成 root。
sudo systemctl enable mongod
sudo systemctl start mongod
查看状态:
sudo systemctl status mongod
journalctl -u mongod -f
| 问题 | 原因 |
|---|---|
| 启动失败 | 权限 / THP / ulimit |
| 外网连不上 | 防火墙 / bindIp |
| 性能差 | THP 没关 |
| 升级后起不来 | 配置文件格式变化 |
mongodump如果你愿意,我可以:
你现在是开发环境还是生产环境?