所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 管理 虚拟服务器

如何在 VPS 上安装和配置 MongoDB(完整 2024 指南)

MongoDB 是世界上应用最广泛的 NoSQL 数据库之一——这是有原因的。其灵活的文档模型、高吞吐量的读写性能和原生水平可扩展性使其成为现代 API、SaaS 平台、CRM、电子商务引擎和数据密集型应用的首选后端。与托管云数据库服务不同,在自己的 VPS Hosting 上运行 MongoDB 可以让您完全控制性能调优、安全加固和长期成本。

本指南将引导您在 Linux VPS 上进行生产级 MongoDB Community Edition 8.0 安装——涵盖 Debian 12 和 Ubuntu LTS 的官方存储库设置、服务管理、用户和数据库创建、安全加固(身份验证、网络绑定、防火墙规则)、备份策略和常见故障排除步骤。无论您是启动第一个应用程序还是迁移现有工作负载,本指南都能确保 MongoDB 从第一天起就可靠地运行。

1. 前置条件

开始之前,请确保满足以下条件:

要求详情
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 托管计划在高性能基础设施上提供 SSD 支持的 Linux VPS 实例 — 非常适合运行生产数据库工作负载。

首先更新您的系统

始终从完全更新的系统开始:

sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y gnupg curl

2. 在 Debian 12 (Bookworm) 上安装 MongoDB

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-org

APT 现在将直接从 MongoDB 的官方 CDN 拉取最新的 MongoDB 8.0 版本。

3. 在 Ubuntu LTS (24.04 / 22.04) 上安装 MongoDB

该过程与 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.list

Ubuntu 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-org

4. 启动并启用 MongoDB 服务

安装完成后,使用 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 ...

如果状态显示 failedinactive,请跳转到故障排除部分。

5. 创建数据库和用户

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:

exit

6. 保护您的 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 admin

C) 配置防火墙

如果您需要允许远程连接(例如,从不同机器上的应用服务器),请将端口 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 verbose

D) 使用 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.confnet.bindIp关键
启用身份验证/etc/mongod.confsecurity.authorization关键
防火墙端口限制UFW / iptables
SSH 隧道用于远程访问客户端 SSH 配置
使用最小权限数据库用户mongoshdb.createUser()
保持 MongoDB 更新apt-get upgrade mongodb-org

7. 备份和恢复

定期备份对任何生产数据库都是必不可少的。MongoDB 包含 mongodumpmongorestore 作为 MongoDB Database Tools 包的一部分。

创建压缩备份存档

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

> 专业提示:为了实现异地冗余,请考虑使用 rsyncrclone 将备份存档同步到外部存储位置。切勿将唯一的备份存储在与数据库相同的服务器上。

8. 故障排除常见问题

检查服务日志

当 MongoDB 无法启动或行为异常时,首先要查看的地方:

sudo journalctl -u mongod --no-pager -n 200

这显示 MongoDB 的 systemd 日志的最后 200 行 — 通常足以识别根本原因。

验证 MongoDB 在预期端口上监听

sudo ss -lntp | grep 27017

如果 MongoDB 正在运行并绑定到 localhost,预期的输出:

LISTEN  0  128  127.0.0.1:27017  0.0.0.0:*  users:(("mongod",...))

如果没有输出,MongoDB 未运行或绑定到不同的接口。

检查已安装的 MongoDB 版本

mongod --version

常见错误消息和修复

错误可能原因修复
Unit mongod.service not foundsystemd 未加载单元文件运行 sudo systemctl daemon-reload
Address already in use端口 27017 被另一个进程占用运行 `sudo ss -lntpgrep 27017` 以识别冲突
Authentication failed凭证错误或 authSource 错误验证用户名、密码和 authenticationDatabase
Connection refusedMongoDB 未运行或绑定到错误的 IP检查 mongod.conf 中的 bindIp 和服务状态
mongod.conf permission denied文件权限问题运行 sudo chmod 600 /etc/mongod.conf

9. 最终想法

在 VPS 上运行 MongoDB 是一种经过验证的、具有成本效益的方法,适用于需要灵活性、性能和完整基础设施控制的生产工作负载。按照本指南,您已经从官方存储库安装了 MongoDB 8.0,配置了身份验证和网络绑定,创建了最小权限数据库用户,设置了防火墙规则,并建立了备份例程。

需要记住的几个关键要点:

  • 始终启用身份验证 — 未经身份验证的 MongoDB 实例是一个严重的安全漏洞。
  • 永远不要将端口 27017 暴露到公网 — 使用 SSH 隧道或限制对特定受信任 IP 的访问。
  • 保持 MongoDB 更新 — 定期运行 sudo apt-get upgrade mongodb-org 以接收安全补丁。
  • 测试您的备份 — 从未恢复过的备份是您无法信任的备份。

对于需要可靠、高性能的 MongoDB 部署基础的团队,AlexHost 的 VPS 主机提供 SSD NVMe 存储、完整的 root 访问权限和灵活的资源扩展。如果您的工作负载超出单个 VPS 的范围,专用服务器提供专用 CPU 和 RAM 资源,没有邻居干扰 — 非常适合高流量 MongoDB 副本集或分片集群。

需要完整的主机堆栈?将您的数据库 VPS 与 共享网络主机配对用于您的前端或静态资产,并使用 SSL 证书保护您的应用程序流量,以保护用户和服务器之间传输的数据。

*最后更新于 Debian 12 (Bookworm) 和 Ubuntu 22.04/24.04 LTS 上的 MongoDB Community Edition 8.0。*