如何在Ubuntu服务器上安装MongoDB?
概述
- Ubuntu 是一种基于 Debian 的开源、免费操作系统,由 Canonical Ltd. 和开源社区共同开发和维护。它的名字源自于南非祖鲁语和科萨语中的一种哲学理念,意为“人性”和“我因我们而存在”。
- MongoDB 是一种开源的文档型数据库管理系统,由 MongoDB, Inc. 维护和开发。它采用了无模式结构(schema-less),数据存储在类似 JSON 的 BSON(Binary JSON)格式中,因此与传统的关系型数据库相比,具有更灵活的数据模型和更高的性能。
- 使用本教程,学习安装 MongoDB 8.0 Community Edition,方法是使用
apt
软件包管理器在 Ubuntu Linux 的 LTS(长期支持)版本上进行安装。
-
平台支持
MongoDB 8.0MongoDB Community Edition支持 x86_64 架构上的以下 64 位 Ubuntu LTS(长期支持)版本:
- 24.04 LTS (“Noble”)
- 22.04 LTS (“Jammy”)
- 20.04 LTS (“Focal”)
MongoDB 仅支持这些平台的 64 位版本。要确定您的主机当前正在运行的 Ubuntu 版本,请在主机的终端上运行以下命令:
1
cat /etc/lsb-release
-
官方 MongoDB 软件包
- 要在 Ubuntu 系统上安装 MongoDB Community,以下说明将使用由 MongoDB Inc. 维护和支持的官方
mongodb-org
软件包。官方mongodb-org
软件包始终包含最新版本的 MongoDB,并且可以从其专用存储库中获取。 - Ubuntu 提供的
mongodb
包并不由 MongoDB Inc. 维护,且与官方的mongodb-org
包冲突。如果您已在您的 Ubuntu 系统上安装了mongodb
包,则必须先卸载mongodb
包,才能继续执行这些操作。
- 要在 Ubuntu 系统上安装 MongoDB Community,以下说明将使用由 MongoDB Inc. 维护和支持的官方
-
导入公钥
从终端安装
gnupg
和curl
(如果尚未安装):1
sudo apt-get install gnupg curl
要导入 MongoDB 公共 GPG 密钥,请运行以下命令:
1
2
3curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor -
创建列表文件
为您的 Ubuntu 版本创建列表文件
/etc/apt/sources.list.d/mongodb-org-8.0.list
。为 Ubuntu 24.04 (Noble) 创建列表文件:
1
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) 创建列表文件:
1
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 20.04 (Focal) 创建列表文件:
1
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
-
重新加载包数据库
发出以下命令以重新加载本地软件包数据库:
1
sudo apt-get update
-
安装 MongoDB Community Server
您可以安装最新稳定版本的 MongoDB 或指定版本的 MongoDB。
要安装最新的稳定版本,请执行以下命令:
1
sudo apt-get install -y mongodb-org
要安装特定版本,必须单独指定每个组件包以及版本号,如以下示例所示:
1
sudo apt-get install -y mongodb-org=8.0.0 mongodb-org-database=8.0.0 mongodb-org-server=8.0.0 mongodb-mongosh=8.0.0 mongodb-org-mongos=8.0.0 mongodb-org-tools=8.0.0
如果您仅安装
mongodb-org=8.0.0
并且不包含组件包,则无论您指定哪个版本,都将安装每个 MongoDB 包的最新版本。可选。虽然您可以指定任意可用版本的 MongoDB,但当有新版本可用时,
apt-get
仍会升级这些包。要防止意外升级,可将此包固定到当前安装的版本:1
2
3
4
5
6echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
-
ulimit 注意事项
- 大多数类 Unix 操作系统都会限制进程可以使用的系统资源。这些限制可能会对 MongoDB 操作产生负面影响,应该进行调整。有关平台的建议设置,请参阅自管理部署的 UNIX
ulimit
设置。 - 如果打开文件数的
ulimit
值低于64000
,MongoDB 会生成初创企业警告。
- 大多数类 Unix 操作系统都会限制进程可以使用的系统资源。这些限制可能会对 MongoDB 操作产生负面影响,应该进行调整。有关平台的建议设置,请参阅自管理部署的 UNIX
-
目录
- 如果通过软件包管理器安装,则在安装过程中会创建数据目录
/var/lib/mongodb
和日志目录/var/log/mongodb
。 - 默认情况下,MongoDB 使用
mongodb
用户账户运行。如果更改运行 MongoDB 进程的用户,您还必须修改数据和日志目录以赋予该用户访问这些目录的权限。
- 如果通过软件包管理器安装,则在安装过程中会创建数据目录
-
配置文件
- MongoDB 官方软件包有一份配置文件 (
/etc/mongod.conf
)。这些设置(如数据目录和日志目录规范)将在启动时生效。换言之,如果在 MongoDB 实例运行时更改该配置文件,则必须重新启动实例才能使更改生效。
- MongoDB 官方软件包有一份配置文件 (
-
步骤
-
请按照以下步骤在系统上运行 MongoDB 社区版。 这些说明假定您使用的是官方
mongodb-org
包,而不是由 Ubuntu 提供的非官方mongodb
包,并且您使用的是默认设置。 -
初始化系统
-
要运行和管理
mongod
进程,需使用操作系统内置的初始化系统。较新版本的 Linux 倾向于使用 systemd(它会使用systemctl
命令),而较旧版本的 Linux 倾向于使用 System V init(它使用service
命令)。 -
如果您不确定您的平台使用的是哪个初始化系统,请运行以下 命令:
1
ps --no-headers -o comm 1
-
然后根据结果选择下面合适的标签页:
systemd
- 选择下方的 systemd (systemctl) 标签页。init
- 选择下方的 System V Init (service) 标签页。
-
启动 MongoDB。
您可以通过发出以下命令来启动
mongod
进程:1
sudo systemctl start mongod
如果收到类似下方的错误(在启动
mongod
时):Failed to start mongod.service: Unit mongod.service not found.
首先运行以下命令:
1
sudo systemctl daemon-reload
然后再次运行上面的启动命令。
-
验证 MongoDB 是否已成功启动。
1
sudo systemctl status mongod
您可以通过选择执行以下命令,来确保 MongoDB 将在系统 重新启动后启动:
1
sudo systemctl enable mongod
-
停止 MongoDB。
您可以根据需要,通过发出以下命令来停止
mongod
进程:1
sudo systemctl stop mongod
-
重启 MongoDB。
您可以通过发出以下命令来重启
mongod
进程:1
sudo systemctl restart mongod
通过观察
/var/log/mongodb/mongod.log
文件中的输出,可以跟踪错误或重要消息的进程状态。 -
开始使用 MongoDB。
在与
mongod
相同的主机上启动mongosh
会话。您可以在不使用任何命令行选项的情况下运行mongosh
,从而连接在本地主机上运行且默认端口号为 27017 的mongod
。1
mongosh
如需进一步了解使用
mongosh
进行连接(例如连接在其他主机和/或端口上运行的mongod
实例),请参阅 mongosh 文档。为了帮助您开始使用 MongoDB,MongoDB 提供了各种驱动程序版本的入门指南。关于驱动程序文档,请参阅 开始使用 MongoDB 开发。
-
启动 MongoDB。
发出以下命令启动
mongod
:1
sudo service mongod start
-
验证 MongoDB 是否已成功启动。
验证
mongod
进程是否已成功启动:1
sudo service mongod status
您还可以在日志文件中查看
mongod
进程的当前状态,默认情况下位于:/var/log/mongodb/mongod.log
。正在运行的mongod
实例将表明它已准备好使用以下行进行连接:[initandlisten] waiting for connections on port 27017
-
停止 MongoDB。
您可以根据需要,通过发出以下命令来停止
mongod
进程:1
sudo service mongod stop
-
重启 MongoDB。
发出以下命令重新启动
mongod
:1
sudo service mongod restart
-
开始使用 MongoDB。
在与
mongod
相同的主机上启动mongosh
会话。您可以在不使用任何命令行选项的情况下运行mongosh
,从而连接在本地主机上运行且默认端口号为 27017 的mongod
。1
mongosh
如需进一步了解使用
mongosh
进行连接(例如连接在其他主机和/或端口上运行的mongod
实例),请参阅 mongosh 文档。为了帮助您开始使用 MongoDB,MongoDB 提供了各种驱动程序版本的入门指南。关于驱动程序文档,请参阅 开始使用 MongoDB 开发。
-
-
要从系统中完全删除 MongoDB,您必须删除 MongoDB 应用程序本身、配置文件以及任何包含 数据和日志的目录。以下部分将指导您完成所需的步骤。
警告:此过程将完全删除 MongoDB、其配置以及所有数据库。此过程不可逆,因此请确保在继续之前备份所有配置和数据。
-
停止 MongoDB。
通过发出以下命令来停止
mongod
进程:1
sudo service mongod stop
-
删除包。
删除您之前安装的所有 MongoDB 包。
1
sudo apt-get purge mongodb-org*
-
删除数据目录。
删除 MongoDB 数据库和日志文件。
1
2sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
设置用户密码
-
启动 MongoDB 服务
确保 MongoDB 服务正在运行,可以使用以下命令启动:
1
sudo systemctl start mongod
-
连接到 MongoDB shell
进入 MongoDB shell:
1
mongosh
-
切换到
admin
数据库在 MongoDB shell 中,切换到
admin
数据库:1
use admin
-
创建管理员用户
创建一个具有管理权限的用户:
1
2
3
4
5db.createUser({
user: "adminUser",
pwd: "securePassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}) -
退出 MongoDB shell
输入
exit
退出 MongoDB shell。 -
编辑 MongoDB 配置文件
启用身份验证,编辑
/etc/mongod.conf
文件。在security
部分添加或取消注释以下行:1
2security:
authorization: enabled -
重启 MongoDB 服务
重启服务以应用更改:
1
sudo systemctl restart mongod
-
使用管理员用户登录
再次进入 MongoDB shell,使用管理员账号登录:
1
mongosh -u "adminUser" -p "securePassword" --authenticationDatabase "admin"
-
创建数据库特定用户
切换到目标数据库,并创建用户:
1
2
3
4
5
6use yourDatabase
db.createUser({
user: "dbUser",
pwd: "dbPassword",
roles: [ { role: "readWrite", db: "yourDatabase" } ]
}) -
验证用户权限
测试新用户权限,使用以下命令重新连接:
1
mongosh -u "dbUser" -p "dbPassword" --authenticationDatabase "yourDatabase"
- 默认情况下,MongoDB 启动时会将
bindIp
设置为127.0.0.1
,绑定到本地主机网络接口。这意味着mongod
只能接受来自同一计算机上运行的客户端的连接。远程客户端将无法连接到mongod
,并且mongod
将无法初始化副本集,除非将此值设置为有效的网络接口。 - 该值可通过以下任一方式配置:
- 警告:在将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自托管部署的安全检查清单。至少应考虑启用身份验证并强化网络基础架构。
- 有关配置
bindIp
的详细信息,请参阅自托管部署中的 IP 绑定。