在 Ubuntu 上配置 MongoDB(以常见的 Ubuntu 20.04/22.04 + MongoDB 6.x/7.x 为例),有几个容易踩坑的点和安全/性能注意事项。下面按「安装 → 配置 → 安全 → 运维」给你梳理。
Ubuntu 自带仓库的 mongodb 通常版本很老(甚至是已废弃的 3.6)。
# 导入公钥
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
# 添加源
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
Ubuntu 使用 systemd,不要手动起 mongod。
sudo systemctl enable mongod
sudo systemctl start mongod
检查状态:
sudo systemctl status mongod
默认:
net:
bindIp: 127.0.0.1
如果只本地用:保持 127.0.0.1
如果远程访问:
bindIp: 0.0.0.0
⚠️ 一旦开放 0.0.0.0,必须开启鉴权
security:
authorization: enabled
否则任何人都能直接操作数据库。
默认:
storage:
dbPath: /var/lib/mongodb
确保目录权限正确:
sudo chown -R mongodb:mongodb /var/lib/mongodb
否则会启动失败(常见坑)。
进入 mongo shell:
mongosh
use admin
db.createUser({
user: "root",
pwd: "强密码",
roles: ["root"]
})
然后重启:
sudo systemctl restart mongod
登录:
mongosh -u root -p --authenticationDatabase admin
只允许必要端口:
sudo ufw allow 27017
# 或只放行内网
sudo ufw allow from 10.0.0.0/8 to any port 27017
net:
port: 37017
MongoDB 官方强烈建议:
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
持久化(systemd):
sudo nano /etc/systemd/system/disable-thp.service
MongoDB 需要较高 ulimit:
sudo nano /etc/security/limits.conf
mongodb soft nofile 64000
mongodb hard nofile 64000
/var/log/mongodb/mongod.log| 问题 | 原因 |
|---|---|
| 启动失败 | 权限不对 / dbPath 不存在 |
| 远程连不上 | bindIp 没改 / 防火墙 |
| 被黑 | 没开鉴权 + 0.0.0.0 |
| 性能差 | THP 没关 / ulimit 低 |
| 升级失败 | 用了 Ubuntu 旧源 |
net:
port: 27017
bindIp: 127.0.0.1
security:
authorization: enabled
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置模板。