50% off 所有套餐限时优惠,起价 $2.48/mo
12 min left
Databases & Analytics

如何在 Ubuntu 的三个最新版本上安装 MongoDB(分步指南)

Jim Schwarz By Jim Schwarz 12 min read
MongoDB 原始标志展示在未来感服务器上,用于在 Ubuntu 上安装 MongoDB,包含文章标语、文章标题和 Cloudzy 品牌标志

所以你选择了 MongoDB,这是个不错的选择 alternative to MariaDB 无论你是在构建 MERN 应用、分析平台,还是任何文档型系统,都可能被复杂的命令行和层出不穷的终端错误困住了。 

不过别担心,这份指南涵盖了在 Ubuntu 上安装 MongoDB 所需的一切,从开始到结束。

MongoDB uses X.Y.Z versioning. 8.0 is a major 发布系列及 8.2 is a minor 在 8.0 周期内的发布。小版本在同一主版本周期内添加功能,从 8.0 开始,也为本地部署安装提供,用于特定使用场景(例如搜索和向量搜索)。MongoDB 8.0 在 Ubuntu 上支持 24.04 (Noble)、22.04 (Jammy) 和 20.04 (Focal) 在 64 位系统上运行,在特定平台上支持 ARM64。

GnuPG 和 Curl 先决条件

安装官方 mongodb-org 软件包之前,Ubuntu 需要两个先决条件: GnuPG and Curl。这些工具让 Ubuntu 有权限下载 MongoDB,因为 Ubuntu 自身的 mongodb 软件包不由 MongoDB Inc. 维护,会与官方 mongodb-org 软件包冲突。如果你已经安装了 mongodb 请确保卸载它。

接下来,运行命令 sudo apt-get install gnupg curl。Curl 是从互联网下载文件的工具,用来获取 MongoDB 的安全密钥。GnuPG 是 Ubuntu 用来验证软件真实性的工具。如果缺少 GnuPG,Ubuntu 无法验证 MongoDB 软件包。

确保你的终端成功安装了 GnuPG 和 Curl。如果安装成功,输出应该像这样:添加 GnuPG 和 Curl 后的 Ubuntu 终端输出

导入 MongoDB GPG 密钥

Ubuntu 的包管理器 APT 使用 GPG 密钥在安装前验证软件包。没有这个 GPG 密钥,Ubuntu 不允许添加 MongoDB 的仓库。在终端中输入以下命令来添加密钥:

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
   --dearmor

如果成功,你的终端输出应该像这样:成功添加 MongoDB GPG 密钥后的 Ubuntu 终端。

简单来说,这个命令下载 MongoDB 的官方安全签名,将其转换为 Ubuntu 能识别的格式,并保存在安全的系统文件夹中。下面是该命令的逐部分详细说明:

  1. curl -fsSL URL 下载 MongoDB 的官方密钥
  2. –dearmor 将密钥从文本格式转换为 Ubuntu 能理解的二进制格式
  3. -o /usr/share/keyrings/mongodb-server-8.0.gpg 将二进制文件保存到 Ubuntu 存储受信任密钥的文件夹中

如果你完全匹配每条命令行,公开 GPG 密钥将被添加而不会出现任何问题。不过,一些用户在下载 MongoDB 时会因为 GPG 密钥不匹配而遇到问题。例如这样的错误:

NO_PUBKEY
The following signatures couldn't be verified
public key not available

当你没有按照之前的 GPG 密钥命令操作,反而使用 sudo apt-key 时就会出现这种情况,因为现代 Ubuntu 不推荐这样做。

添加 MongoDB 软件源

添加 MongoDB 的软件源会创建一个文件,告诉 Ubuntu 在某个特定网址上存在 MongoDB 软件包。在以下位置创建列表文件 /etc/apt/sources.list.d/mongodb-org-8.0.list 方法是使用以下命令将软件源行写入该文件 echo … | sudo tee …

这部分比较复杂,因为不同版本的 Ubuntu 需要使用不同的命令变体。我们将分别介绍如何在之前提到的三个 Ubuntu 版本上导入列表文件。

Ubuntu 24.04 (Noble)

要在 Ubuntu 24.04 上创建列表文件,只需输入 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 on your terminal.

这看起来可能有点复杂,但别担心。一旦我们把命令分解成几个部分,就会清楚明白了。

  1. echo prints text
  2. /etc/apt/sources.list.d 是 Ubuntu 存储软件源定义的文件夹。文件夹中每个带有 .list 格式的文件都会指向 Ubuntu 一个具体的软件下载位置
  3. 普通用户默认无法在系统文件夹中写入任何内容。 tee 给予用户向系统文件写入文本的特殊权限,而使用 sudo
  4. noble 是 Ubuntu 24.04 的代号。每个 Ubuntu 版本都有自己的代号,例如:
Version Codename
20.04 Focal
22.04 Jammy
24.04 Noble

如果你的 Ubuntu 版本与命令行不匹配,Ubuntu 将无法识别 MongoDB 的软件源。

Ubuntu 22.04 (Jammy)

添加列表文件到 Ubuntu Jammy 看起来几乎相同,但你必须输入命令行并替换 noble with jammy, like this:

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

确保使用的是与你的 Ubuntu 版本匹配的代号,否则还是会失败。

Ubuntu 20.04 (Focal)

遵循相同的步骤,但命令改为 noble or jammy, put in focal:

echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/8.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list

现在仓库已设置完成,你可以继续安装 mongodb-org.

刷新软件包数据库

Ubuntu 已识别该仓库,现在需要重新加载内部的软件包数据库,以便今后包含 MongoDB。执行下面的命令:

sudo apt-get update

这个命令在所有 Ubuntu 版本中都相同,如果跳过它,Ubuntu 将不会包含 MongoDB。命令执行成功的话,终端输出应该是:运行 sudo apt-get update 后 Ubuntu 的终端输出

 刷新软件包数据库后,现在该下载 MongoDB 软件包了。

安装 MongoDB Community Server

MongoDB 有多个发行版可供安装,但用户通常选择最新的稳定版,因为它更稳定可靠。要安装最新稳定版,请运行 sudo apt-get install -y mongodb-org

Ubuntu 已下载 MongoDB 软件包、安装软件包、创建 MongoDB 用户账户和数据目录,并将 MongoDB 注册为系统服务。至此,我们已介绍了如何在 Ubuntu 上下载 MongoDB。现在让我们启动它。

如何启动 MongoDB

为了运行 MongoDB,需要让 Ubuntu 的服务管理器 systemd 将 MongoDB 识别为后台服务。要做到这一点,请在终端中输入以下命令:

sudo systemctl start mongod

命令执行成功的话,Ubuntu 会将 MongoDB 作为后台应用启动。如果命令执行失败,你可能会收到类似的错误 Failed to start mongod.service.

这可能由几个常见原因导致:

  • 配置文件错误 in /etc/mongod.conf (YAML 缩进错误很常见)
  • Port conflict (端口 27017 已被占用)
  • Permission issue 数据或日志目录权限问题(/var/lib/mongodb 或 /var/log/mongodb)
  • Disk full or 文件系统状态损坏

三个诊断命令未来化的服务器设置 + 三条 Ubuntu 终端命令 + 云升级路径方案。

说出 MongoDB 配置可能存在的问题很容易,但精确定位错误原因要困难得多。以下是三个简单方法,可以帮助你诊断错误来源:

  1. 检查服务状态: sudo systemctl status mongod –no-pager
  2. 查看详细日志(最重要): sudo journalctl -u mongod –no-pager -n 100
  3. 查看 MongoDB 的日志文件

请注意,如果您的磁盘已满或系统文件损坏,问题主要源于硬件而非软件。若要让 MongoDB 高效运行,用户可能需要升级服务器配置或购买更好的硬件。 

如果购买整台服务器超出预算,不妨考虑 Cloudzy 的 Ubuntu VPS 在您自己的私有服务器上获得清爽体验,并可选择 Ubuntu 发行版。它配备了 24/7 support and up to 40Gbps 网络速度,得益于其 NVMe SSD and DDR5 RAM storage.

此外,它还具有极低延迟, 99.95% uptime, and a 14-day 退款保证。而且它还在全球 12 多个地点提供服务,价格实惠。

让 MongoDB 正常运行的三个常见解决方案

没有一种方法能同时准确识别 MongoDB 的具体问题并一步到位地解决它。这里列出了一些常见的修复方案,希望能帮助您让 MongoDB 重新运行。

  1. YAML 配置缩进错误。 假设您已编辑 /etc/mongod.conf 重新检查缩进,运行 sudo nano /etc/mongod.conf。YAML 文件对空格非常敏感,请确保每个缩进级别只有两个空格 /etc/mongod.conf.
  2. Occupied port 27017。如果有其他进程占用了 27017 端口,请关闭它或在 mongod.conf中更改 MongoDB 的端口。如果不确定 27017 端口上运行的是什么,请运行 sudo ss -lntp | grep 27017 to check it out
  3. 数据目录权限问题。 有时 MongoDB 缺少在您的系统上运行的权限,因此根本无法启动。首先运行 sudo chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb,然后用 sudo systemctl restart mongod

According to MongoDB 官方网站,另一种解决方法是用以下命令重新加载守护进程 sudo systemctl daemon-reload,然后运行第一条命令 sudo systemctl start mongod, again.

If there is no mongod.service,如果安装过程中没有放置 systemd 单元文件,请重新安装 mongodb-org package set.

完成上述操作后,你可以用以下命令验证 MongoDB 是否成功启动 sudo systemctl status mongod。如果终端显示 active (running),说明一切正常。但还有一些额外的配置可以让你的体验更顺畅。

设置 MongoDB 自动启动未来感的服务器设置,展示 MongoDB 自动化符号 + 带有 MongoDB 命令的终端 + 日志文件

MongoDB 不会在你每次启动服务器时自动打开。你需要每次都重复前面提到的一些步骤。或者,你可以让 Ubuntu 在系统启动后自动启动 MongoDB。

Simply run sudo systemctl enable mongod 在你的终端中运行这条命令,从此之后系统会在每次重启后自动运行 MongoDB。另外,你也可以用以下命令重启 mongod 进程 sudo systemctl restart mongod。此外,用户可能需要查看以下文件中的输出内容,以处理任何错误或重要信息

/var/log/mongodb/mongod.log

现在一切都设置好了,让我们开始使用你的 mongod。

打开 MongoDB Shell

要与数据库交互,用户需要用以下命令打开 MongoDB shell mongosh。把它想象成 MongoDB 的专用命令提示符终端或 MySQL 控制台。另外,你也可以通过 GUI 工具(如 MongoDB 驱动程序)来与 MongoDB 交互。但如果你想从终端与之交互, mongosh 这条命令就是为此而生的。

你的 MongoDB 现在已经完全可用,但为了确保安全,还有一些额外的步骤需要考虑。

为 MongoDB 设置身份验证MongoDB 身份验证过程 + 锁定符号 + 身份验证确认。

MongoDB 默认没有密码保护,因为创建用户时你必须已有访问权限。以下是一个简单的实现方式

创建管理员用户

首先,你需要用以下命令切换到管理数据库:

use admin

然后用以下命令创建用户 db.createUser({…})。填入你的

  • Username
  • Password
  • Role

对于角色,建议输入 root 这表示完全控制或管理员权限。

Enable Authentication

现在我们已设置了自己的用户,需要编辑 /etc/mongod.conf 文件。这是因为该文件控制 MongoDB 的行为方式。但要注意,编辑文件后必须用以下命令重启 mongod 服务 sudo systemctl restart mongod。我们需要修改的是一个叫 authorization 的参数,看起来像这样:

security:

  authorization:

要完成身份验证过程,只需像这样改变 authorization 的值:

security:

  authorization: enabled

从现在起,MongoDB 需要登录,你的身份验证就设置完成了。现在让我们继续进行另一项配置,充分利用 MongoDB。

开放防火墙

如前所述,MongoDB 运行在 27017 端口。由于防火墙默认会阻止端口,你需要告诉防火墙允许应用在 27017 端口上运行。只需执行以下命令:

ufw allow from YOUR_IP to any port 27017

或者,你也可以执行以下命令 ufw allow 27017,但要小心,这样做会允许整个互联网访问该端口。更安全的做法是使用第一个选项,因为它只允许来自你的 IP 地址的流量访问该端口。

用户在运行 MongoDB 时可能会遇到一些问题,比如远程访问问题。继续阅读了解如何解决。

远程访问问题服务器设置,配有 3 台显示器,展示 MongoDB 远程访问设置 + 终端命令。

MongoDB 启动时使用 bindIp. bindIp limits MongoDB to 127.0.0.1,只允许本地连接。因此,如果你尝试从其他地方连接到 MongoDB 服务器,你将无法访问,因为 MongoDB 默认配置为只允许本地连接,除非另行配置。

再次前往 /etc/mongod.conf,你会看到三行内容如下:

net:

  port: 27017

  bindIp: 127.0.0.1

如果你想允许远程连接到你的 mongod 用户,请像这样修改上面的值:

net:

  port: 27017

  bindIp: 0.0.0.0

之后,重启你的 mongod service with sudo systemctl restart mongod 就像对文件进行的其他任何编辑一样。

现在你已经授予了你的 mongod 服务接受远程连接的权限。但要小心,这样做会将你的数据库暴露在互联网上,除非你已经对你的 mongod 用户进行了身份验证。有很多机器人不断扫描开放的 MongoDB 端口,所以一定要确保你的 mongod 用户有密码。

总体概览

恭喜,你现在已经完成了为你的 Ubuntu 系统创建优化的 MongoDB 服务的所有工作。这里还有一个思维导图来追踪本文介绍的每一步。

Command What It Does
apt update 刷新软件列表
apt install Install software
curl Download file
gpg 管理加密密钥
echo Print text
tee 写入受保护的文件
systemctl start Start service
systemctl enable Start on boot
systemctl status Check service
mongosh 进入 MongoDB shell
Edit /etc/mongod.conf Enable authentication
ufw Manage firewall
bindIp 允许远程访问

这应该会帮助你更好地理解整个过程。但如果自己设置 MongoDB 对你来说太麻烦了,请考虑启动 Cloudzy 的 MongoDB VPS 为你的私有 Ubuntu 24.04 LTS 服务器,其中预装了 MongoDB。

It comes with 99.95% uptime, 24/7 support, and a 14-day 退款保证。除此之外,它还支持高达 40 Gbps 的带宽,这得益于其 DDR5 RAM and NVMe SSD 存储。不用担心你身在何处,因为它也可以在 12 个地点以经济实惠的价格提供服务。

但话说回来,你终于成功搭建了自己的功能完整的 MongoDB 服务,配备了所有必要的配置来支持生产级别的工作负载和业务。

Share

博客更新

Keep reading.

Smart Data Management for Your Business: “Cloud‑Like” Storage and Backup Strategies with VPS
Databases & Analytics

Smart Data Management for Your Business: “Cloud‑Like” Storage and Backup Strategies with VPS

VPS 用于安全的业务数据管理,这是我每次看到公司决定停止在笔记本电脑、电子邮件附件和容易遗忘的地方之间处理文件时推荐的方案

Rexa CyrusRexa Cyrus 7 min read
物化视图与视图对比
Databases & Analytics

物化视图与视图:了解它们在数据库中的作用

在数据库系统中,物化视图是一种数据库对象,它将查询的预计算结果存储为物理表。由于数据实际存储在磁盘上,复杂的

Ivy JohnsonIvy Johnson 7 min read
SnowFlake vs DataBricks
Databases & Analytics

Databricks 与 Snowflake:数据专业人士的公正对比 🧱❄️

对于依靠数据驱动决策的企业来说,无论是电商平台追踪客户行为、金融机构预测市场趋势,还是科技公司

Allan Van KirkAllan Van Kirk 13 min read

Ready to deploy? From $2.48/mo.

独立云服务,始于2008年。AMD EPYC、NVMe,40 Gbps。14天退款保障。