中文

在 Ubuntu 24.04 VPS 上安装并加固 MongoDB 8.0

1 min
VPS/VDS 主机

MongoDB 是一款面向文档的数据库,常用于 API、Node.js 应用和数据分析。Ubuntu 自带的软件源中没有它,因此需要从 MongoDB 官方仓库安装。本指南将在 VPS Linux Infrawire 上完成安装,启用身份验证并限制访问来源。

📋 前提条件

  • 一台运行 Ubuntu 24.04(noble)的 x86_64 或 ARM64 VPS,并拥有 root SSH 权限(IP 地址和 root 密码可在您的客户区找到)
  • CPU 需支持 AVX 指令集(MongoDB 5.0 及更高版本要求):grep -c avx /proc/cpuinfo 的结果必须大于 0
  • 建议至少 2 GB 内存

1. 添加官方仓库

导入签名密钥,并为 Ubuntu 24.04 声明软件源。

Bash
apt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | 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' > /etc/apt/sources.list.d/mongodb-org-8.0.list

2. 安装并启动服务

Bash
apt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager

元软件包 mongodb-org 会安装服务端(mongod)、命令行 shell(mongosh)和各类工具。数据存放在 /var/lib/mongodb,日志位于 /var/log/mongodb/mongod.log。

3. 创建管理员

此时身份验证尚未开启,本地 shell 无需凭据即可连接。在 admin 数据库中创建第一个管理员;passwordPrompt() 会交互式询问密码,因此不会留在 shell 历史记录里。

Bash
mongosh
JavaScript
1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})

4. 启用身份验证

编辑 /etc/mongod.conf,添加(或取消注释)security 配置块:

YAML
security: authorization: enabled
Bash
systemctl restart mongod

从现在起,所有连接都必须通过身份验证。

5. 创建应用用户

应用程序绝不应使用管理员账户。请为它创建一个仅限自身数据库的用户。

Bash
mongosh -u admin -p --authenticationDatabase admin
JavaScript
1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})

对应的连接字符串为 mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb。

6. 网络访问与防火墙

默认情况下 MongoDB 只监听 127.0.0.1,当应用与它运行在同一台 VPS 上时,这是最安全的设置。若要允许另一台服务器访问,请在 /etc/mongod.conf 中加入该 VPS 的地址:

YAML
net: port: 27017 bindIp: 127.0.0.1,VPS_IP

然后在防火墙中只放行应用服务器,切勿向整个互联网开放 27017 端口:

Bash
ufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod

✅ 验证安装

Bash
mongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017

最后一条命令会显示 MongoDB 监听的地址。此时像 db.getUsers() 这样的未认证查询应当以授权错误失败。

🔧 故障排查

mongod 无法启动(Illegal instruction 或退出码 132):虚拟 CPU 未暴露 AVX。用 grep avx /proc/cpuinfo 检查;没有 AVX,MongoDB 8.0 无法在该机器上运行。

启动时出现权限错误:用 chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb 修正数据和日志文件的属主,删除残留的 /tmp/mongodb-27017.sock 后重启。详细信息见 journalctl -u mongod。

Authentication failed:该用户是在特定数据库中创建的。请用 --authenticationDatabase(或 URI 中的 authSource)指定正确的数据库。

远程连接超时:检查 bindIp、ufw status 规则,以及客户端 IP 是否与您放行的一致。


🎉 MongoDB 8.0 已安装完成,启用了身份验证,可以供您的应用使用了!

及时了解最新的优惠、折扣和特别促销活动。

查看促销

我们使用Cookie

我们使用分析性Cookie来改善您在我们网站上的体验。数据不会出售给第三方。了解更多请查看我们的 隐私政策.