如何在 VPS 上安装和配置 MongoDB(完整 2024 指南)
MongoDB 是世界上应用最广泛的 NoSQL 数据库之一——这是有原因的。其灵活的文档模型、高吞吐量读写性能和原生水平可扩展性使其成为现代 API、SaaS 平台、CRM、电子商务引擎和数据密集型应用的首选后端。与托管云数据库服务不同,在自己的 VPS Hosting 上运行 MongoDB 可以让你完全控制性能调优、安全加固和长期成本。
本指南将引导你在 Linux VPS 上进行生产级 MongoDB Community Edition 8.0 安装——涵盖 Debian 12 和 Ubuntu LTS 的官方仓库设置、服务管理、用户和数据库创建、安全加固(身份验证、网络绑定、防火墙规则)、备份策略和常见故障排除步骤。无论你是启动第一个应用还是迁移现有工作负载,本指南都能让 MongoDB 从第一天起可靠地运行。
目录
- 前置条件
- 在 Debian 12 (Bookworm) 上安装 MongoDB
- 在 Ubuntu LTS (24.04 / 22.04) 上安装 MongoDB
- 启动并启用 MongoDB 服务
- 创建数据库和用户
- 保护你的 MongoDB 实例
- 备份和恢复
- 故障排除常见问题
- 最后的想法
1. 前置条件 {#prerequisites}
在开始之前,请确保满足以下条件:
| 要求 | 详情 |
|---|---|
| VPS 访问 | Root 或 sudo 级别的 SSH 访问 |
| 操作系统 | 64 位 Debian 12 (Bookworm) 或 Ubuntu 22.04/24.04 LTS |
| RAM | 最少 1 GB;生产环境推荐 2 GB+ |
| 存储 | 强烈推荐 SSD 支持的存储 |
| 防火墙 | UFW 或 iptables 可用 |
> 重要: MongoDB 8.0 官方支持 Debian 12 和 Ubuntu LTS 版本。始终从 MongoDB 官方仓库安装——永远不要使用 Linux 发行版附带的 mongodb 包,因为它已过时、不受支持,并且可能与官方 mongodb-org 包冲突。
如果你还没有服务器,AlexHost 的 VPS Hosting 计划提供高性能基础设施上的 SSD 支持 Linux VPS 实例——非常适合运行生产数据库工作负载。
首先更新你的系统
始终从完全更新的系统开始:
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y gnupg curl2. 在 Debian 12 (Bookworm) 上安装 MongoDB {#install-debian}
MongoDB 在默认 Debian 仓库中不可用,因此你必须手动添加官方 MongoDB APT 仓库。
步骤 1 — 导入 MongoDB GPG 签名密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc |
sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg这会下载并存储用于验证包完整性的 GPG 密钥。如果没有此步骤,APT 将拒绝从 MongoDB 仓库安装包。
步骤 2 — 添加官方 MongoDB 仓库
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg]
https://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" |
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list > /dev/null步骤 3 — 安装 MongoDB Community Edition
sudo apt-get update
sudo apt-get install -y mongodb-orgAPT 现在将直接从 MongoDB 官方 CDN 拉取最新的 MongoDB 8.0 版本。
3. 在 Ubuntu LTS (24.04 / 22.04) 上安装 MongoDB {#install-ubuntu}
该过程与 Debian 几乎相同,但仓库 URL 因 Ubuntu 代号而异。
步骤 1 — 导入 MongoDB GPG 签名密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc |
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor步骤 2 — 为你的 Ubuntu 版本添加仓库
Ubuntu 24.04 (Noble Numbat):
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ]
https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" |
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.listUbuntu 22.04 (Jammy Jellyfish):
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ]
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" |
sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list步骤 3 — 安装 MongoDB Community Edition
sudo apt-get update
sudo apt-get install -y mongodb-org4. 启动并启用 MongoDB 服务 {#start-service}
安装后,使用 systemctl 启动 MongoDB 并将其配置为在服务器重启时自动启动。
sudo systemctl daemon-reload
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod --no-pager为什么是 daemon-reload?
MongoDB 官方文档特别建议在启动服务之前运行 systemctl daemon-reload。如果你跳过此步骤并看到错误 “Unit mongod.service not found”,请先运行 daemon-reload——它强制 systemd 从磁盘重新读取单元文件。
预期输出
健康的 MongoDB 服务将显示类似于以下的输出:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled)
Active: active (running) since ...如果状态显示 failed 或 inactive,请跳转到故障排除部分。
5. 创建数据库和用户 {#create-databases-users}
MongoDB 在全新安装后默认不强制身份验证。这意味着你应该在启用身份验证之前创建管理员和应用用户——否则你可能会将自己锁在外面。
打开 MongoDB Shell
在 VPS 上本地连接到 MongoDB:
mongosh步骤 1 — 创建管理员用户
切换到 admin 数据库并创建特权管理员账户:
use admin
db.createUser({
user: "admin",
pwd: "STRONG_PASSWORD_HERE",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
})> 安全提示: 将 STRONG_PASSWORD_HERE 替换为至少 20 个字符的随机生成密码。使用密码管理器或在服务器上运行 openssl rand -base64 24 来生成一个。
步骤 2 — 创建应用数据库和用户
创建一个专用数据库和一个仅限于该数据库的最小权限用户:
use myapp
db.createUser({
user: "myapp_user",
pwd: "STRONG_PASSWORD_HERE",
roles: [
{ role: "readWrite", db: "myapp" }
]
})这遵循最小权限原则——你的应用只对自己的数据库有读写访问权限,而不是整个 MongoDB 实例。
步骤 3 — 验证用户已创建
use admin
db.getUsers()退出 shell:
exit6. 保护你的 MongoDB 实例 {#secure-mongodb}
这是指南中最关键的部分。暴露在公网上的配置不当的 MongoDB 实例已导致许多高调的数据泄露。MongoDB 自己的安全检查清单明确指出:在将实例暴露到任何网络之前加固它。
A) 将 MongoDB 绑定到仅本地主机(推荐默认)
默认情况下,MongoDB 可能监听所有网络接口。除非你有特定的、合理的远程访问需求,否则将其限制为本地主机。
编辑 /etc/mongod.conf:
net:
bindIp: 127.0.0.1应用更改:
sudo systemctl restart mongod这确保 MongoDB 只能从服务器本身访问——而不是从公网。
B) 启用身份验证
如果未启用身份验证,任何本地进程都可以不使用密码连接到 MongoDB。编辑 /etc/mongod.conf:
security:
authorization: enabled重启服务:
sudo systemctl restart mongod现在测试身份验证是否被强制执行:
mongosh -u admin -p --authenticationDatabase adminC) 配置防火墙
如果你需要允许远程连接(例如,从不同机器上的应用服务器),将端口 27017 限制为仅特定的受信任 IP 地址。永远不要将端口 27017 开放给 0.0.0.0/0。
使用 UFW:
sudo ufw allow from YOUR.TRUSTED.IP.ADDRESS to any port 27017 proto tcp
sudo ufw enable
sudo ufw status验证规则是否处于活跃状态:
sudo ufw status verboseD) 使用 SSH 隧道进行安全远程访问(最佳实践)
远程访问 MongoDB 的最安全方式是通过 SSH 隧道。这避免了完全打开端口 27017,并加密了传输中的所有流量。
从你的本地机器:
ssh -L 27017:127.0.0.1:27017 root@YOUR_VPS_IP然后从你的本地 MongoDB shell 连接,就像它是本地的一样:
mongosh "mongodb://myapp_user:PASS@127.0.0.1:27017/myapp?authSource=myapp"强烈推荐此方法供开发人员从笔记本电脑或远程工作站访问生产数据库。
安全加固总结
| 安全措施 | 配置位置 | 优先级 |
|---|---|---|
| 绑定到仅本地主机 | /etc/mongod.conf → net.bindIp | 关键 |
| 启用身份验证 | /etc/mongod.conf → security.authorization | 关键 |
| 防火墙端口限制 | UFW / iptables | 高 |
| SSH 隧道用于远程访问 | 客户端 SSH 配置 | 高 |
| 使用最小权限数据库用户 | mongosh → db.createUser() | 高 |
| 保持 MongoDB 更新 | apt-get upgrade mongodb-org | 中 |
7. 备份和恢复 {#backup-restore}
定期备份对任何生产数据库都是不可协商的。MongoDB 包括 mongodump 和 mongorestore 作为 MongoDB 数据库工具包的一部分。
创建压缩备份存档
mongodump
--username admin
--password STRONG_PASSWORD_HERE
--authenticationDatabase admin
--archive=/root/mongo-backup.archive
--gzip这创建了一个包含所有数据库逻辑转储的单个压缩存档文件。
从备份存档恢复
mongorestore
--username admin
--password STRONG_PASSWORD_HERE
--authenticationDatabase admin
--archive=/root/mongo-backup.archive
--gzip使用 Cron 自动化备份
使用 cron 计划每日备份:
crontab -e添加以下行以每天凌晨 2:00 运行备份:
0 2 * * * mongodump --username admin --password PASS --authenticationDatabase admin --archive=/root/backups/mongo-$(date +%F).archive --gzip> 专业提示: 为了实现异地冗余,考虑使用 rsync 或 rclone 将备份存档同步到外部存储位置。永远不要将你唯一的备份存储在与数据库相同的服务器上。
8. 故障排除常见问题 {#troubleshooting}
检查服务日志
当 MongoDB 无法启动或行为异常时,首先要查看的地方:
sudo journalctl -u mongod --no-pager -n 200这显示了 MongoDB 的 systemd 日志的最后 200 行——通常足以识别根本原因。
验证 MongoDB 在预期端口上监听
sudo ss -lntp | grep 27017如果 MongoDB 正在运行并绑定到本地主机,预期输出为:
LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* users:(("mongod",...))如果没有输出,MongoDB 未运行或绑定到不同的接口。
检查已安装的 MongoDB 版本
mongod --version常见错误消息和修复
| 错误 | 可能原因 | 修复 | |
|---|---|---|---|
Unit mongod.service not found | systemd 未加载单元文件 | 运行 sudo systemctl daemon-reload | |
Address already in use | 端口 27017 被另一个进程占用 | 运行 `sudo ss -lntp | grep 27017` 以识别冲突 |
Authentication failed | 错误的凭证或错误的 authSource | 验证用户名、密码和 ###PPT_NOTR_64 |
