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

禁用THP服务

接下来,使用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。

使用以下命令安装gnupgcurl软件包。

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

安装MongoDB软件包

在安装完成后,使用systemctl命令重新加载systemd管理器。

sudo systemctl daemon-reload

启动并启用mongod服务,然后验证其是否正在运行。

sudo systemctl enable --now mongod
sudo systemctl status mongod

如果MongoDB正在运行,你将看到类似以下的输出。

MongoDB服务运行状态

通过身份验证保护MongoDB服务器

MongoDB安装完成后,你需要通过启用MongoDB身份验证来保护安装。在本节中,你将设置MongoDB身份验证并为MongoDB创建新的管理员用户。这将向你展示如何使用mongosh MongoDB客户端和基本MongoDB查询。

使用以下mongosh命令登录MongoDB服务器。默认MongoDB安装没有密码。

mongosh

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" }
]
}
)

创建管理员用户myAdmin

输入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身份验证

现在你已经创建了管理员用户并在MongoDB服务器上启用了身份验证。让我们通过以myAdmin用户身份登录MongoDB服务器来验证你的配置。

运行以下mongosh命令以myAdmin用户身份登录MongoDB服务器,并在提示时输入你的密码。

mongosh --port 27017 --authenticationDatabase \
"admin" -u "myAdmin" -p

使用myAdmin用户登录MongoDB

登录后,运行以下查询检查与MongoDB服务器的连接状态。

db.runCommand({connectionStatus : 1})

检查MongoDB连接状态

创建第一个数据库和用户

在本节中,你将通过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" } ]
}
)

创建数据库用户myUser

接下来,运行以下查询切换到admin数据库并验证MongoDB服务器上的用户列表。

use admin
db.system.users.find()

查看MongoDB用户列表

你应该能看到已创建的用户myAdminmyUser

现在输入quit()退出MongoDB服务器。

最后,使用以下命令以新用户myUser身份登录到数据库mydb的MongoDB服务器。在提示时输入你的密码。

mongosh --port 27017 -u "myUser" \
--authenticationDatabase "mydb" -p

使用myUser用户登录MongoDB

运行以下查询检查你当前的连接。

db.runCommand({connectionStatus : 1})

验证myUser连接状态

authInfo部分,你可以看到你已经以用户myUser和数据库mydb进行了身份验证。

结论

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