MongoDB是一个开源、跨平台的分布式NoSQL(非SQL或非关系型)数据库系统。与传统SQL数据库使用表存储数据不同,MongoDB使用灵活的文档来存储各种数据形式。MongoDB使用二进制JSON格式(BSON)来存储数据。
MongoDB是一个分布式NoSQL数据库,具有内置的高可用性、自动故障转移和数据冗余功能,支持通过分片(sharding)在分布式集群中实现水平扩展,并支持多区域地理部署。MongoDB还提供查询API,支持CRUD操作(读写)、数据聚合管道、文本搜索和地理空间查询。
在本教程中,你将学习如何在Debian 12服务器上安装MongoDB。你还将学习如何启用MongoDB身份验证、使用mongosh MongoDB客户端,以及使用基本查询在MongoDB中创建新用户和数据库。
前提条件
- 一台Debian 12服务器
- 一个具有管理员权限的非root用户
准备Debian服务器
在将MongoDB安装到Debian服务器之前,建议进行以下设置:
- 通过systemd脚本禁用透明大页(THP)
- 增加MongoDB用户的默认限制
- 通过/etc/sysctl.conf文件启用swapiness并增加max_mmap内存
现在让我们来配置Debian服务器。
首先,运行以下nano命令创建新的服务文件/etc/systemd/system/disable-thp.service。
sudo nano /etc/systemd/system/disable-thp.service
粘贴以下服务脚本,将transparent_hugepage设置为never。
[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服务。这样,transparent_hugepage将在每次系统启动时被禁用。
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service

接下来,使用nano编辑器创建新文件/etc/security/limits.d/mongodb.conf。
sudo nano /etc/security/limits.d/mongodb.conf
插入以下配置,为用户mongod设置最大进程数和文件数为64000。
mongod soft nproc 64000 mongod hard nproc 64000 mongod soft nofile 64000 mongod hard nofile 64000
完成后保存文件并退出。
然后,编辑/etc/sysctl.conf文件。
sudo nano /etc/sysctl.conf
将以下配置插入到文件末尾。
fs.file-max = 2097152 vm.max_map_count = 262144 vm.swappiness = 1
保存文件并退出。
最后,运行以下sysctl命令立即应用/etc/sysctl.conf文件中的更改。
sudo sysctl -p
在Debian上安装MongoDB服务器
现在你已经配置好了Debian服务器,让我们开始安装MongoDB。在此步骤中,你将通过官方MongoDB仓库在Debian服务器上安装MongoDB 7.0。
使用以下命令安装gnupg和curl软件包。
sudo apt install gnupg curl
现在使用以下命令添加MongoDB GPG密钥和Debian仓库。在此示例中,你将设置MongoDB 7.0的仓库。
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
接下来,运行以下apt命令刷新软件包列表并安装mongodb-org软件包。
sudo apt update && sudo apt install mongodb-org -y

在安装完成后,使用systemctl命令重新加载systemd管理器。
sudo systemctl daemon-reload
启动并启用mongod服务,然后验证其是否正在运行。
sudo systemctl enable --now mongod
sudo systemctl status mongod
如果MongoDB正在运行,你将看到类似以下的输出。

通过身份验证保护MongoDB服务器
MongoDB安装完成后,你需要通过启用MongoDB身份验证来保护安装。在本节中,你将设置MongoDB身份验证并为MongoDB创建新的管理员用户。这将向你展示如何使用mongosh MongoDB客户端和基本MongoDB查询。
使用以下mongosh命令登录MongoDB服务器。默认MongoDB安装没有密码。
mongosh

运行disableTelemetry()命令禁用MongoDB的匿名数据收集。
disableTelemetry()

使用use查询切换到admin数据库。
use admin
现在运行以下查询创建新用户myAdmin,该用户将作为MongoDB服务器的管理员。在提示时输入你的密码。
db.createUser(
{
user: "myAdmin",
pwd: passwordPrompt(),
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)

输入quit()命令退出MongoDB服务器。
quit()
接下来,使用nano编辑器编辑/etc/mongod.conf文件。
sudo nano /etc/mongod.conf
取消注释security选项并添加authorization: enabled以启用MongoDB身份验证。
security: authorization: enabled
保存文件并退出编辑器。
现在运行以下systemctl命令重启MongoDB服务器以应用你的修改。
sudo systemctl restart mongod

测试MongoDB身份验证
现在你已经创建了管理员用户并在MongoDB服务器上启用了身份验证。让我们通过以myAdmin用户身份登录MongoDB服务器来验证你的配置。
运行以下mongosh命令以myAdmin用户身份登录MongoDB服务器,并在提示时输入你的密码。
mongosh --port 27017 --authenticationDatabase \
"admin" -u "myAdmin" -p

登录后,运行以下查询检查与MongoDB服务器的连接状态。
db.runCommand({connectionStatus : 1})

创建第一个数据库和用户
在本节中,你将通过mongosh MongoDB客户端创建一个新数据库和用户,用于你的应用程序。请确保你处于mongosh环境中。
首先,运行use查询创建并切换到目标数据库。在此示例中,你将创建一个名为mydb的新数据库。你的MongoDB提示符将变为mydb。
use mydb
现在运行以下查询创建新用户myUser,该用户具有对数据库mydb的读写权限。在提示时输入新密码。
use mydb
db.createUser(
{
user: "myUser",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "mydb" },
{ role: "read", db: "reporting" } ]
}
)

接下来,运行以下查询切换到admin数据库并验证MongoDB服务器上的用户列表。
use admin
db.system.users.find()

你应该能看到已创建的用户myAdmin和myUser。
现在输入quit()退出MongoDB服务器。
最后,使用以下命令以新用户myUser身份登录到数据库mydb的MongoDB服务器。在提示时输入你的密码。
mongosh --port 27017 -u "myUser" \
--authenticationDatabase "mydb" -p

运行以下查询检查你当前的连接。
db.runCommand({connectionStatus : 1})

在authInfo部分,你可以看到你已经以用户myUser和数据库mydb进行了身份验证。
结论
恭喜!你已经完成了在Debian 12服务器上安装MongoDB 7.0的操作。你还学习了如何通过启用身份验证来保护MongoDB服务器,以及如何为MongoDB创建新的管理员用户。最后,你学习了如何为你的应用程序创建新的MongoDB数据库和用户。