MongoDB是一个开源、跨平台的分布式NoSQL(非关系型)数据库系统。与传统的SQL数据库将数据存储在表中不同,MongoDB使用灵活的文档来存储各种数据形式。MongoDB使用二进制JSON格式(BSON)来存储数据。
MongoDB是一个具有内置高可用性、自动故障转移和数据冗余功能的分布式NoSQL数据库,支持通过分片在分布式集群中进行水平扩展。它支持多区域地理部署,并提供支持CRUD操作(读写)、数据聚合管道、文本搜索和地理空间查询的查询API。
在本教程中,我们将介绍如何在Ubuntu 24.04服务器上安装MongoDB。你将准备Ubuntu服务器、添加MongoDB仓库、安装MongoDB服务器、创建MongoDB管理员用户,然后启用MongoDB身份验证。最后,你将学习如何使用mongosh shell在MongoDB中创建用户和数据库。
前提条件
在开始之前,请确保你具备以下条件:
- 一台Ubuntu 24.04服务器
- 一个具有管理员权限的非root用户
系统准备
在Ubuntu系统上安装MongoDB之前,请确保已配置好系统。在本教程中,你将对Ubuntu服务器进行以下配置:
- 通过systemd禁用透明大页(THP)
- 提高MongoDB默认mongod用户的资源限制
- 通过/etc/sysctl.conf文件设置fs.file-max和swappiness
禁用透明大页(THP)
要在系统上禁用THP,你需要创建一个新的systemd服务文件,该文件将在每次启动时自动执行。
使用nano编辑器创建新的服务文件/etc/systemd/system/disable-thp.service。
sudo nano /etc/systemd/system/disable-thp.service
插入以下配置以通过服务禁用THP。
[Unit] Description=Disable Transparent Huge Pages (THP) [Service] Type=simple ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag" [Install] WantedBy=multi-user.target
保存文件并退出编辑器。
现在运行以下systemctl命令重新加载systemd管理器,启动并启用disable-thp服务。这样,THP将在系统启动时被禁用。
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service
设置Ulimits
禁用THP后,你需要将mongod用户的最大文件数和进程数增加到至少64000。
使用以下nano编辑器命令创建新文件/etc/security/limits.d/mongodb.conf。
sudo nano /etc/security/limits.d/mongodb.conf
插入以下配置,将最大打开文件数和进程数增加到64000。
mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
保存文件并退出编辑器。
设置swappiness和fs.file-max
最后,你需要增加默认的fs.file-max值并为MongoDB启用swappiness。为此,你需要编辑/etc/sysctl.conf文件。
使用nano编辑器命令打开/etc/sysctl.conf文件。
sudo nano /etc/sysctl.conf
插入以下配置以设置fs.file-max和swappiness。
fs.file-max = 2097152 vm.max_map_count = 262144 vm.swappiness = 1
完成后,保存文件并退出编辑器。
现在运行以下sysctl命令,在不重启的情况下应用更改。
sudo sysctl -p

使用APT包管理器安装MongoDB
现在你已经配置好了Ubuntu系统,可以开始安装MongoDB了。在本节中,你将从官方MongoDB仓库安装最新版本的MongoDB 8.0。
首先运行以下apt命令更新Ubuntu软件包索引并安装gnupg和curl包。输入Y确认安装。
sudo apt update && sudo apt install gnupg curl

现在运行以下命令添加MongoDB的GPG密钥和仓库。在本例中,你将在Ubuntu 24.04服务器上安装MongoDB 8。
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \
--dearmor
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

接下来运行以下apt命令更新软件包索引并将mongodb-org包安装到你的系统中。输入Y继续安装。
sudo apt update && sudo apt install mongodb-org

安装完成后,执行以下systemctl命令重新加载systemd管理器。mongod服务已添加到你的Ubuntu系统中。
sudo systemctl daemon-reload
最后运行以下命令启动、启用并验证MongoDB的mongod服务。你将看到MongoDB正在你的系统上运行。
sudo systemctl enable --now mongod
sudo systemctl status mongod

保护MongoDB服务器
安装MongoDB后,你将通过以下方式保护MongoDB服务器安装:
- 使用mongosh shell创建新的MongoDB管理员用户
- 通过编辑配置文件/etc/mongod.conf启用MongoDB身份验证
创建MongoDB管理员用户
在本节中,你将通过mongosh shell创建一个新的MongoDB管理员用户。mongosh shell是一个用于与MongoDB服务器交互的客户端命令行工具,类似于MySQL/MariaDB的mysql和PostgreSQL的psql。
要创建管理员用户,使用以下mongosh shell命令登录MongoDB服务器。
mongosh
现在运行以下查询以禁用MongoDB遥测。
disableTelemetry()

接下来切换到admin数据库,运行以下查询为MongoDB创建新的管理员用户。在本例中,你将创建一个名为myAdmin的新用户,然后在提示时输入你的新密码。
use admin
db.createUser(
{
user: "myAdmin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)
现在输入quit()退出MongoDB shell。

启用MongoDB身份验证
现在你已经创建了MongoDB管理员用户,可以通过/etc/mongod.conf文件启用MongoDB身份验证了。
使用以下nano编辑器命令打开MongoDB服务器默认配置文件/etc/mongod.conf。
sudo nano /etc/mongod.conf
添加以下行以启用MongoDB身份验证。
security: authorization: enabled
完成后,保存文件并退出编辑器。
现在运行以下systemctl命令重启MongoDB服务器以应用更改。这样MongoDB身份验证将被启用。
sudo systemctl restart mongod
测试MongoDB身份验证
现在你已经保护了MongoDB服务器安装,让我们通过使用mongosh shell和新管理员用户及密码登录MongoDB来验证你的配置。
使用以下mongosh命令以myAdmin用户身份登录MongoDB服务器。在提示时输入你的密码。
mongosh --port 27017 --authenticationDatabase \
"admin" -u "myAdmin" -p

登录后,运行以下查询检查你的连接状态。你应该已经以myAdmin用户身份登录到MongoDB服务器。
db.runCommand({connectionStatus : 1})
现在输入quit()退出MongoDB服务器。

在MongoDB中创建数据库和用户
在本节中,你将学习如何使用mongosh shell在MongoDB中创建新的数据库和用户。请确保你已以管理员用户身份登录MongoDB。
首先运行以下查询切换到mydb数据库。
use mydb
现在运行以下查询创建一个名为myUser的新用户,并授予对mydb数据库的读写权限。在提示时输入你的密码。
db.createUser(
{
user: "myUser",
pwd: passwordPrompt(), // 或明文密码
roles: [ { role: "readWrite", db: "mydb" },
{ role: "read", db: "reporting" } ]
}
)
输入quit()退出MongoDB服务器。

现在运行以下mongosh命令以myUser用户身份登录mydb数据库。在提示时输入你的密码。
mongosh --port 27017 --authenticationDatabase \
"mydb" -u "myUser" -p

登录后,使用以下查询检查你的连接状态。
db.runCommand({connectionStatus : 1})
你可以在下面看到你已以myUser用户身份连接到MongoDB服务器,并拥有对mydb数据库的权限。

总结
恭喜!你已经完成了在Ubuntu 24.04服务器上安装MongoDB服务器的工作。你还创建了一个管理员用户并保护了MongoDB安装。然后,你学习了如何使用mongosh连接到MongoDB服务器以及在MongoDB中管理用户和数据库的基本查询。