本站包含联盟链接——如果你通过链接注册,我们可能获得佣金。 Affiliate links.

DigitalOcean MongoDB 指南 2026 — 自托管 vs 托管服务

DigitalOcean MongoDB 指南 2026 — 自托管 vs 托管服务

MongoDB 是一种文档导向的数据库,深受 Node.js、Express 以及需要灵活数据结构的应用开发者青睐。在 DigitalOcean 上,你有两个主要选项:在 Droplet 上自行安装 MongoDB 以获得完全控制,或使用托管 MongoDB 数据库服务,它会自动处理补丁、备份和故障转移。本文将指导你了解基础知识、实际安装命令,以及常见陷阱和如何为你的项目选择合适的方案。

什么是 MongoDB 以及哪些应用适合它

MongoDB 是一种文档导向的 NoSQL 数据库,以 BSON(二进制 JSON)格式存储数据,而不是关系数据库的行列表。每条记录称为一个文档,组织在集合中,这些集合不强制严格的模式。这意味着你可以添加或调整字段结构,而不需要每次都运行 SQL 迁移。这种灵活性使 MongoDB 非常适合数据形状不确定或经常变化的应用,如内容管理系统 (CMS)、电子商务产品目录(每个产品具有不同属性)、移动应用后端或基本的时间序列日志和事件数据存储。连接和数据验证通过 mongosh 处理,这是一个新的交互式 shell,替代了旧的 mongo shell,支持 JavaScript 命令和 MongoDB 查询语言——例如,调用 db.collection.find() 或聚合管道 db.collection.aggregate([...]) 以进行复杂处理,如分组、计数或在单个命令中跨多个步骤计算统计信息。但需要注意的是,MongoDB 不适合所有工作。如果你的应用需要表之间的复杂关系和严格的多表 ACID 事务(多表 ACID),关系数据库如 PostgreSQL 或 MySQL 通常效果更好。MongoDB 从版本 4.0 开始支持多文档事务,但在可能的情况下,在单个文档中嵌入文档结构通常提供更好的性能和简洁性。在启动项目之前理解你的数据查询模式和关系因此是承诺使用 MongoDB 前的关键步骤。

在 Droplet 上自行安装 MongoDB

这一点很重要——在 Droplet 上自行安装 MongoDB 首先需要选择合适的大小。对于测试或小项目,具有 2 GiB RAM / 1 vCPU 的基础 Droplet($12/月)就足够了。对于处理较大数据集的工作,考虑升级到 4 GiB / 2 vCPU($24/月),因为 MongoDB 严重依赖 RAM 来通过 WiredTiger 存储引擎缓存工作集。在 Ubuntu 24.04 上,首先添加 MongoDB GPG 密钥和 apt 存储库。例如,curl -fsSL https://pgp.mongodb.com/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor。接下来,将存储库添加到你的 sources.list.d 文件,然后运行 sudo apt-get update && sudo apt-get install -y mongodb-org。安装完成后,使用 sudo systemctl enable --now mongod 启用服务,并使用 sudo systemctl status mongod 检查其状态,或通过 journalctl -u mongod -f 查看日志。主配置文件位于 /etc/mongod.conf,它设置 dbpath、bindIp 和 port。默认 bindIp 是 127.0.0.1,限制连接仅限于本地主机——对于在同一 Droplet 上运行的应用是安全的。如果需要从另一个服务器连接,将其更改为你的 VPC 私有 IP 而不是直接打开 0.0.0.0。在启用 security.authorization: enabled 之前,你必须通过 mongosh 创建管理员用户来启用身份验证。最后,使用 sudo ufw allow from <app-server-ip> to any port 27017 限制访问仅来自指定 IP,永远不要向不受限的互联网开放数据库端口。

  1. 在安装前添加官方 apt 存储库,使用 apt-get install mongodb-org
  2. 使用 systemctl enable --now mongod 启用服务,使用 systemctl status mongod 检查状态
  3. 编辑 /etc/mongod.conf 配置文件以调整 dbpath、bindIp 和 port
  4. 启用 security.authorization: enabled 并在生产使用前创建管理员用户

使用托管 MongoDB 数据库(起价 $15.23/月)

对于不想自己管理补丁、监控和故障转移的团队,DigitalOcean 通过控制台提供托管 MongoDB 数据库服务。基础层起价为 1 vCPU、1 GiB RAM 和 15-25 GiB 存储,每月 $15.23。对于超出该配额的额外存储,你需要额外支付每 GiB 每月 $0.215(截至 2026 年 7 月的定价——请查看提供商网站以获取当前费率)。创建集群通过控制台中的数据库部分完成:选择 MongoDB 引擎、选择区域和选择你的大小。对于泰国用户,sgp1(新加坡)在延迟方面最近,blr1(班加罗尔)是下一个选项。集群创建完成后,DigitalOcean 会立即提供格式为 mongodb+srv://user:password@cluster-host/dbname?tls=true&authSource=admin 的连接字符串。TLS 默认启用——无需加密设置。你可以立即使用 mongosh "mongodb+srv://cluster-host/dbname" --username user 测试连接。一个关键功能是受信源系统,它限制连接仅来自指定的 Droplet 或 VPC,而不是接受来自任何地方的连接。应始终启用此功能,而不是全局打开连接。该服务还包括自动备份和维护窗口,用于提前安排安全补丁。没有先前试用经验的新 DigitalOcean 用户在注册后 60 天内会获得 $200 的积分(需要链接信用卡或 PayPal)——足以在决定上线之前的几个月内探索托管 MongoDB 和 Droplet 应用。

备份和副本集基础

对于在 Droplet 上自行安装的 MongoDB,基本备份通过 MongoDB 数据库工具附带的 mongodumpmongorestore 工具执行。示例命令如 mongodump --db mydb --out /backup/$(date +%F) 将整个数据库导出到 BSON 文件中的按日期命名的文件夹,并使用 mongorestore --db mydb /backup/2026-07-17/mydb 恢复。你应该设置一个 cron 任务定期运行此操作,例如每晚,然后将备份文件移出主 Droplet——例如,移到单独的 DigitalOcean Volume(按 $0.10 每 GiB 每月计费)或通过创建整个机器的 Droplet 快照(按 $0.06 每 GiB 每月计费)来保护主 Droplet 上的问题。为实现高可用性,MongoDB 使用副本集架构,至少需要 3 个节点来在主节点故障时自动选举新的主节点。初始设置通过在每个 Droplet 上使用参数 --replSet rs0 运行 mongod 完成,然后通过 mongosh 连接到一个节点并运行 rs.initiate(),然后 rs.add("host2:27017")rs.add("host3:27017") 以将成员添加到集群。对于节点之间的安全性,使用 openssl rand -base64 756 生成 keyFile,将文件权限设置为 600,然后在每个节点的配置中指定路径。DigitalOcean 托管 MongoDB 数据库在服务中包括自动备份,并在基础层以上的层中支持备用节点,减少自己设置副本集和备份的负担。但是,团队应该定期测试数据恢复,以确保在真正的紧急情况下恢复过程有效。

要点总结: 使用 mongodump 备份,使用 mongorestore 恢复;设置 cron 任务定期运行

比较自托管 vs 托管

综合多次测试,在 Droplet 上自行安装 MongoDB 和使用托管数据库之间的选择取决于三个主要因素:成本、控制和操作负担。在成本方面,比较很直接:托管 MongoDB 的基础层为每月 $15.23(单节点),而在 2 GiB Droplet 上的 3 节点副本集以每个 $12 计为大约每月 $36——虽然每月成本较高,但你获得了对 MongoDB 版本的完全控制和深度配置自定义(如 wiredTigerCacheSizeGB 或自定义扩展),这些是托管数据库出于稳定性原因限制的。在操作负担方面,自托管意味着你拥有一切:安全补丁、磁盘使用监控、设置监控和编写备份脚本。托管数据库通过预先宣布的维护窗口自动处理这些,开箱即用地包括备份和 TLS,无需额外设置。对于没有专业 DevOps 的小团队或需要快速启动而不冒配置安全风险的项目,托管数据库通常可以证明稍高的月度成本是合理的。反之,对于拥有现有 Linux 专业知识、想要完全控制或在早期原型中预算紧张的团队,在 Droplet 上运行单个 MongoDB(在没有副本集的情况下初期接受停机风险)在 MVP 或测试阶段仍然是更经济的选择。

何时使用此功能(真实用例)

MongoDB 适合许多数据具有灵活结构或经常变化的场景。真实世界的例子包括内容管理系统(CMS),其中每个页面或文章具有不同的元数据字段——将其存储为每篇文章的单个文档加快了查询和呈现速度,无需多表连接。另一个情况是移动应用后端,其中用户配置文件和偏好在用户之间差异;灵活的文档存储在新功能添加字段时减少了架构迁移复杂性。MongoDB 也适合在小到中等规模存储来自物联网系统的日志或事件,使用受限集合自动限制数据大小,或自版本 5.0 起支持的时间序列集合用于实时仪表板,需要快速聚合管道计算来汇总结果。就项目规模而言,每月 $15.23 的托管 MongoDB 基础层适合原型、MVP 或用户负载较轻的应用。具有快速增长的数据和高可用性需求的项目应考虑升级到具有备用节点的更高层或手动构建副本集。要避免的是:对需要许多行中严格的多表事务保证的系统使用 MongoDB,例如会计或金融交易系统,其中数据一致性至关重要。对于这些情况,关系数据库如 PostgreSQL 通常仍然是更安全、更久经考验的长期选择。

常见错误及其修复方法

根据我们的实测——自托管 MongoDB 用户最常见的错误是设置 bindIp: 0.0.0.0 以便于外部访问,同时关闭身份验证,也不限制防火墙。这会将 27017 端口暴露给整个互联网而没有保护,是全球 MongoDB 数据泄露的主要原因。修复方法是在部署到生产之前始终启用 security.authorization: enabled,并使用 ufw 或 DigitalOcean 云防火墙限制访问仅来自应用服务器的 IP。下一个错误是未能创建适合实际查询模式的索引,迫使 MongoDB 在每个查询上扫描整个集合(集合扫描)——随着数据增长速度极慢。使用 db.collection.find(query).explain("executionStats") 检查查询以查看是否使用了索引,然后使用 db.collection.createIndex({field: 1}) 为经常使用的模式构建一个。自托管服务器上的第三个问题是磁盘填满而没有注意到,因为日志文件和 oplog(对于副本集)持续增长。磁盘满可能会损坏 WiredTiger 存储并阻止 mongod 正常启动。当磁盘空间降至 20% 以下时设置监控警报,并使用 logrotate 轮换日志以防止无限制增长。最后,不适当的 wiredTigerCacheSizeGB 设置相对于 Droplet RAM 可能会损害性能。推荐的公式是(总 RAM - 1)除以 2 GB,为操作系统和其他进程留下可用内存。

最佳实践

无论选择自托管还是托管 MongoDB,某些实践适用于两者。首先,始终在生产环境中为每个连接启用 TLS。DigitalOcean 上的托管数据库自动启用它;自托管需要通过配置中的 tlsMode 参数配置证书。其次,在创建用户时遵循最小权限原则——避免为所有内容使用单个根级用户。相反,创建仅具有对特定数据库的必要读/写权限的基于角色的用户,以及具有仅读访问权限的备份任务的单独用户。管理连接字符串同样重要:将其存储在环境变量或秘密管理器中,而不是在源代码中硬编码,防止源代码管理中的意外密码泄露。对于监控,DigitalOcean 监控是免费的,包括基本指标和每个账户一个正常运行时间检查,帮助你持续跟踪 Droplet 的 CPU、RAM 和磁盘使用情况。为实现高可用性,即使在小项目上也应从一开始使用副本集——从单节点迁移到副本集稍后比最初设置它更复杂。从备份中定期测试数据恢复以确保备份在紧急情况下正常工作。最后,应用应该通过 MongoDB Node.js 驱动程序或 Mongoose 等驱动程序使用连接池,而不是按请求打开和关闭连接,显著降低延迟和数据库负载。

  1. 为每个生产连接启用 TLS(托管自动启用)
  2. 创建仅具有必要权限的基于角色的用户;避免对所有内容使用单个根用户
  3. 将连接字符串存储在环境变量或秘密管理器中,永远不要在源代码中硬编码
  4. 启用 DigitalOcean 监控(免费)以持续跟踪 CPU/RAM/磁盘
  5. 即使在小项目上也从一开始使用副本集,并定期从备份测试恢复

领取 $200 免费额度 →

常见问题(FAQ)

在 DigitalOcean 上运行 MongoDB 需要多少成本?
这取决于你的安装方法。使用托管 MongoDB 数据库,基础层起价为每月 $15.23(1 vCPU、1 GiB RAM、15-25 GiB 存储)。对于 Droplet 上的自托管,成本取决于你选择的机器大小——例如,2 GiB RAM 起价为每月 $12(截至 2026 年 7 月的定价——请查看提供商网站以获取当前费率)。
自托管和托管 MongoDB 有什么区别?
在 Droplet 上自托管为你提供对版本和配置的完全控制,但需要你自己管理补丁、备份和监控。DigitalOcean 的托管数据库自动处理这些,从一开始就启用 TLS,并包括内置备份——代价是比自己运行单个节点的月度价格更高。
MongoDB 需要多大的 Droplet?
对于测试或小项目,具有 2 GiB RAM / 1 vCPU 的基础 Droplet(每月 $12)就足够了。对于较大的数据集,考虑 4 GiB RAM / 2 vCPU(每月 $24),因为 MongoDB 主要依赖 RAM 通过 WiredTiger 存储引擎缓存数据。
托管 MongoDB 数据库支持副本集吗?
DigitalOcean 的托管 MongoDB 包括自动备份,并为基础层以上的层支持备用节点,提高可用性而无需手动副本集设置。对于自托管,你通过 rs.initiate() 和 rs.add() 命令自己配置副本集。
如何备份在自己的 Droplet 上安装的 MongoDB?
使用 mongodump 工具将数据导出到 BSON 文件,然后使用 mongorestore 恢复。设置 cron 任务定期运行,并将备份文件存储在主 Droplet 之外——例如在 DigitalOcean Volume 上或作为 Droplet 快照——以防止主机失败。
哪些项目适合 MongoDB?
MongoDB 适合数据具有灵活结构或经常变化的应用,如 CMS、移动应用后端、产品目录和日志/事件存储。避免用于需要严格多表事务的系统,如会计——关系数据库如 PostgreSQL 在那里效果更好。