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 声明软件源。
Bashapt 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. 安装并启动服务
Bashapt 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 历史记录里。
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. 启用身份验证
编辑 /etc/mongod.conf,添加(或取消注释)security 配置块:
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
从现在起,所有连接都必须通过身份验证。
5. 创建应用用户
应用程序绝不应使用管理员账户。请为它创建一个仅限自身数据库的用户。
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use 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 的地址:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
然后在防火墙中只放行应用服务器,切勿向整个互联网开放 27017 端口:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ 验证安装
Bashmongod --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 已安装完成,启用了身份验证,可以供您的应用使用了!