Skip to main content

如何在 Ubuntu 20.04 上安装 MongoDB

作者 Mark Drake MongoDB 是一个文档数据库,被应用于许多现代网络应用。它被归类为 NoSQL 数据库,因为它不依赖于传统的基于表格的关系数据库结构。 相反,它使用具有动态模式的类 JSON 文档,这意味着,与关系型数据库不同,MongoDB 在向数据库添加数据之前不需要预定义模式。你可以在任何时候根据需要改变模式,而不需要用更新的模式建立一个新的数据库。 在本教程中,你将在 Ubuntu 20.04 服务器上安装 MongoDB,对其进行测试,并学习如何将其作为一个 systemd 服务来进行管理。

前期准备

要学习本教程,你将需要:

  • 一台 Ubuntu 20.04 服务器。这台服务器应该有一个非 root 管理用户和一个配置了 UFW 的防火墙。

第1步 - 安装 MongoDB

Ubuntu 的官方软件包库包括一个稳定版本的 MongoDB。然而,截至目前,Ubuntu 默认软件库中的 MongoDB 版本是3.6,而最新的稳定版本是 4.4(文章写于2020年8月1日)。 为了获得该软件的最新版本,你必须将 MongoDB 的专用软件包库纳入你的 APT 源。然后你就可以安装 mongodb-org,这是一个元包,总是指向 MongoDB 的最新版本。 首先,通过运行以下命令导入最新稳定版本的 MongoDB 的公共 GPG 密钥。如果你不打算使用 4.4 版本的 MongoDB,请确保在该命令的 URL 部分改变 4.4,以符合你要安装的版本。

$ curl -fsSL https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

cURL是许多操作系统上使用的命令行工具,用于传输数据。它读取存储在传递给它的 URL 中的任何数据,并将其内容打印到系统的输出端。在下面的例子中,cURL 打印了 GPG 密钥文件的内容,然后将其输送到下面的 sudo apt-key add - 命令中,从而将 GPG 密钥添加到你的可信密钥列表中。 另外,请注意,这个 curl 命令使用了选项 -fsSL,这两个选项加在一起主要是为了让 cURL 静默失败。这意味着如果 cURL 由于某种原因无法联系到 GPG 服务器或者 GPG 服务器宕机,它不会意外地将产生的错误代码添加到你的可信密钥列表中。 如果密钥被成功添加,该命令将返回 OK

Output
OK

可以用下面的命令来仔细检查钥匙是否被正确添加:

$ apt-key list

以上代码会在输出中的某个地方返回 MongoDB 密钥:

Output
/etc/apt/trusted.gpg
--------------------
pub rsa4096 2019-05-28 [SC] [expires: 2024-05-26]
2069 1EEC 3521 6C63 CAF6 6CE1 6564 08E3 90CF B1F5
uid [ unknown] MongoDB 4.4 Release Signing Key <packaging@mongodb.com>
. . .

目前,你的 APT 安装仍然不知道在哪里可以找到安装最新版本的 MongoDB 所需要的 mongodb-org包。 APT 会在你的服务器的两个地方寻找要下载和安装的软件包的在线来源:sources.list 文件和 sources.list.d 目录。sources.list 是一个列出 APT 数据活动来源的文件,每行有一个来源,最推荐的来源列在前面。sources.list.d 目录允许你将这样的 sources.list 条目作为单独的文件添加。 运行以下命令,在 sources.list.d 目录下创建一个名为mongodb-org-4.4.list 的文件。这个文件中唯一的内容是这样一行:deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

这一行告诉了 APT 它需要知道的所有内容,包括源代码是什么,以及在哪里可以找到它:

  • deb:表示该源码条目引用了一个常规的 Debian 架构。在其他情况下,这一行的这部分内容可能是 deb-src,这意味着该源码条目代表了 Debian 发行版的源代码。
  • [arch=amd64,arm64]:指定了 APT 数据应该被下载到哪个架构。在这个例子中,它指定了 amd64arm64 架构。
  • https://repo.mongodb.org/apt/ubuntu:这是一个 URI,代表可以找到 APT 数据的位置。本例中,URI 指向 MongoDB 官方存储库所在的 HTTPS 地址。
  • focal/mongodb-org/4.4:Ubuntu 仓库可能包含几个不同的版本。这段代码指定了你只想要可用于 Ubuntu focal 版本的 mongodb-org 包的 4.4 版本(“Focal Fossa”是Ubuntu 20.04的代码名称)。
  • multiverse:这一部分将 APT 指向四个主要的 Ubuntu 存储库之一。本例中,它指向 multiverse 软件库。 运行此命令后,更新你的服务器的本地软件包索引,以便 APT 知道在哪里可以找到 mongodb-org 软件包:
$ sudo apt update

之后,你可以安装 MongoDB:

$ sudo apt install mongodb-org

当出现提示时,按 Y 键,然后按 ENTER 键确认你想安装该软件包。 命令完成后,MongoDB 将被安装在你的系统上。不过它还没有做好使用的准备。接下来,你将启动 MongoDB 并确认它是否正常工作。

第2步 - 启动 MongoDB 服务并测试数据库

上一步描述的安装过程自动将 MongoDB 配置为由 systemd 控制的后台守护进程,这意味着你可以使用各种 systemctl 命令管理 MongoDB。然而,这个安装过程并没有自动启动服务。 运行下面的 systemctl 命令来启动 MongoDB 服务:

$ sudo systemctl start mongod.service

然后检查该服务的状态。注意,这条命令的服务文件的定义中不包括 .service。如果没有这个后缀,systemctl 会将其自动附加到你传递的任何参数上,所以没有必要包括它。

$ sudo systemctl status mongod

该命令将返回如下输出,表明该服务已经启动并运行。

Output
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2020-06-09 12:57:06 UTC; 2s ago
Docs: https://docs.mongodb.org/manual
Main PID: 37128 (mongod)
Memory: 64.8M
CGroup: /system.slice/mongod.service
└─37128 /usr/bin/mongod --config /etc/mongod.conf

在确认服务按预期运行后,启用 MongoDB 服务,使其在开机时启动:

$ sudo systemctl enable mongod

你可以连接到数据库服务器并执行诊断命令,来进一步验证数据库是否运行。下面的命令将连接到数据库并输出其当前版本、服务器地址和端口。它还将返回 MongoDB 内部 connectionStatus 命令的结果。

$ mongo --eval 'db.runCommand({ connectionStatus: 1 })'

connectionStatus 将检查并返回数据库连接的状态。响应的 ok 字段的值为 1,表明服务器正在按预期工作。

Output
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("1dc7d67a-0af5-4394-b9c4-8a6db3ff7e64") }
MongoDB server version: 4.4.0
{
"authInfo" : {
"authenticatedUsers" : [ ],
"authenticatedUserRoles" : [ ]
},
"ok" : 1
}

另外,请注意,数据库运行在 127.0.0.127017 端口上,这是代表本地主机的本地回环地址。这是 MongoDB 的默认端口号。 接下来,我们来看看如何用 systemd 来管理 MongoDB 服务器实例。

第3步 - 管理 MongoDB 服务

如前所述,第1步中描述的安装过程将 MongoDB 配置为作为 systemd 服务运行。这意味着你可以使用标准的 systemctl 命令来管理它,就像管理其他 Ubuntu 系统服务那样。 如前所述,systemctl status 命令用于检查 MongoDB 服务的状态:

$ sudo systemctl status mongod

你可以随时通过输入以下命令停止该服务:

$ sudo systemctl stop mongod

要在服务停止后启动它,请运行:

$ sudo systemctl start mongod

你也可以在服务器已经运行的情况下重新启动它:

$ sudo systemctl restart mongod

在本文第2步中,你设置让 MongoDB 与服务器一起自动启动。如果你想禁用这种自动启动,请输入:

$ sudo systemctl disable mongod

要重新启用它在开机时启动,请再次运行 enable 命令:

$ sudo systemctl enable mongod

总结

在本教程中,你学习了向 APT 实例添加 MongoDB 官方仓库,并安装了最新版本的 MongoDB。然后你测试了 Mongo 的功能,并练习了一些 systemctl 命令。 我们鼓励你查看 MongoDB 的官方文档,它对于 MongoDB 所能提供的功能展现了相当丰富的资源。