如何在 Ubuntu 上安装 MongoDB 并确保其安全性

简介

MongoDB是一个开源的、跨平台的、分布式的NoSQL(非SQL或非关系型)数据库系统。与传统SQL数据库不同,MongoDB不使用表格存储数据,而是使用灵活的文档来存储各种数据形式。MongoDB使用二进制JSON格式BSON来存储数据。

MongoDB是一个具有内置高可用性、自动故障转移和数据冗余的分布式NoSQL数据库,通过在分布式集群中进行分片来实现水平扩展。它支持多区域地理部署,并提供支持CRUD操作(读写)、数据聚合管道、文本搜索和地理空间查询的查询API。

在本指南中,我们将向你展示如何在Ubuntu 22.04服务器上安装MongoDB。你将准备你的Ubuntu服务器,添加MongoDB仓库,安装MongoDB服务器,为MongoDB创建管理员,并启用MongoDB认证。最后,你将学习如何使用'mongosh' shell在MongoDB中创建用户和数据库。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh [email protected] 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

准备系统

在你的Ubuntu系统上安装MongoDB之前,请确保你已配置系统。在这种情况下,你将使用以下配置Ubuntu服务器:

  • 通过systemd禁用透明大页面 (THP)
  • 增加默认MongoDB mongod用户的上限
  • 通过/etc/sysctl.conf文件设置最大fs.file-max和启用swappiness

禁用透明大页面 (THP)

要在系统上禁用THP,你将创建一个新的systemd服务文件,该文件将在每次启动时自动执行。

使用nano编辑器创建一个新的服务文件/etc/systemd/system/disable-thp.service

bash 复制代码
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将在系统启动时被禁用。

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service

设置Ulimits

禁用THP后,你需要将用户mongod的默认最大文件和进程数增加到至少64000

使用以下nano编辑器命令创建新文件/etc/security/limits.d/mongodb.conf

bash 复制代码
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

bash 复制代码
sudo nano /etc/sysctl.conf

插入以下配置设置fs.file-max并启用swappiness。

复制代码
fs.file-max = 2097152
vm.max_map_count = 262144
vm.swappiness = 1

完成后,保存文件并退出编辑器。

现在运行以下sysctl命令应用更改而不重启。

bash 复制代码
sudo sysctl -p

使用APT包管理器安装MongoDB

现在你已经配置了Ubuntu系统,准备安装MongoDB。在本节中,你将从官方MongoDB仓库安装最新版本的MongoDB 8.0。

首先,运行以下apt命令更新你的Ubuntu包索引并安装gnupgcurl包。输入'Y'确认安装。

bash 复制代码
sudo apt update && sudo apt install gnupg curl

现在运行以下命令添加MongoDB的GPG密钥和仓库。在这个例子中,你将在Ubuntu 22.04服务器上安装MongoDB 8。

bash 复制代码
curl -fsSL <https://www.mongodb.org/static/pgp/server-8.0.asc> | \\
sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg \\
--dearmor
bash 复制代码
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'继续安装。

bash 复制代码
sudo apt update && sudo apt install mongodb-org

安装完成后,执行以下systemctl命令重新加载systemd管理器。mongod服务已添加到你的Ubuntu系统。

bash 复制代码
sudo systemctl daemon-reload

最后,运行以下命令启动、启用并验证MongoDB mongod服务。你将看到MongoDB在你的系统上运行。

bash 复制代码
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服务器。

bash 复制代码
mongosh

现在运行以下查询禁用MongoDB遥测。

jsx 复制代码
disableTelemetry()

接下来,转到数据库admin并运行以下查询为MongoDB创建一个新的管理员用户。在这个例子中,你将创建一个新用户myAdmin,然后系统会提示你输入新密码。

jsx 复制代码
use admin
jsx 复制代码
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

bash 复制代码
sudo nano /etc/mongod.conf

添加以下行以在MongoDB中启用认证。

复制代码
security:
    authorization: enabled

完成后,保存文件并退出编辑器。

现在运行以下systemctl命令重启MongoDB服务器并应用更改。这样,MongoDB认证将被启用。

bash 复制代码
sudo systemctl restart mongod

测试MongoDB认证

现在你已经保护了MongoDB服务器安装,让我们通过使用mongosh shell和新管理员用户及密码登录到MongoDB来验证你的配置。

使用以下mongosh命令以用户myAdmin登录到MongoDB服务器。系统会提示你输入密码。

bash 复制代码
mongosh --port 27017 --authenticationDatabase \\
"admin" -u "myAdmin" -p

登录后,运行以下查询检查你的连接状态。你应该已经使用myAdmin用户登录到MongoDB服务器。

jsx 复制代码
db.runCommand({connectionStatus : 1})

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

在MongoDB中创建数据库和用户

在本节中,你将学习如何使用mongosh shell在MongoDB中创建新的数据库和用户。因此,请确保你已经以管理员用户登录到MongoDB。

首先,运行以下查询转到数据库mydb

jsx 复制代码
use mydb

现在运行以下查询创建一个新用户myUser,并允许对数据库mydb进行读写访问。系统会提示你输入密码。

jsx 复制代码
db.createUser(
{
    user: "myUser",
    pwd: passwordPrompt(), // or cleartext password
    roles: [ { role: "readWrite", db: "mydb" },
             { role: "read", db: "reporting" } ]
}
)

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

现在运行以下mongosh命令以myUser身份登录到数据库mydb。系统会提示你输入密码。

bash 复制代码
mongosh --port 27017 --authenticationDatabase \\
"mydb" -u "myUser" -p

登录后,使用以下查询检查你的连接状态。

jsx 复制代码
db.runCommand({connectionStatus : 1})

你可以看到你已经使用用户myUser和对数据库mydb的权限连接到了MongoDB服务器。

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
淋过很多场雨5 分钟前
现代c++获取linux所有的网络接口名称
java·linux·c++
await 40424 分钟前
Windows查看和修改IP,IP互相ping通
linux·网络协议·tcp/ip
GoodStudyAndDayDayUp44 分钟前
docker拉取国内镜像
运维·docker·容器
中草药z1 小时前
【Docker】Docker拉取部分常用中间件
运维·redis·mysql·docker·容器·nacos·脚本
码熔burning1 小时前
【MongoDB篇】MongoDB的索引操作!
数据库·mongodb·nosql
AI_CPU_GPU_Cloud2 小时前
上海地区IDC机房服务器托管选型报告(2025年4月30日)
运维·服务器
network_tester2 小时前
服务器丢包率测试保姆级教程:从Ping到网络打流仪实战
运维·服务器·网络·网络协议·信息与通信·信号处理·tcpdump
liwulin05062 小时前
【JAVAFX】实现屏幕指定区域截图,带尺寸显示
服务器·前端·python
头顶秃成一缕光2 小时前
JVM快速入门
java·linux·jvm·ide·spring·spring cloud·servlet
Lucky_MrBai2 小时前
汽车OTA在线升级法规分析
服务器·网络·汽车