Ubuntu 24.04部署MongoDB
方法一:安装 MongoDB 6.0(兼容 Ubuntu 24.04)
1. 添加 MongoDB 6.0 的源(使用 jammy 版本兼容)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
2. 重新更新并安装
# 更新包索引 sudo apt update# 安装MongoDB 6.0 sudo apt install -y mongodb-org
3. 启动服务并验证
# 启动服务
sudo systemctl start mongod# 设置开机自启
sudo systemctl enable mongod# 检查状态
sudo systemctl status mongod
这样下载启动之后无法远程连接:
要解决 MongoDB 远程连接问题,需要从 网络权限 和 MongoDB 配置 两个层面进行设置,以下是详细步骤:
一、修改 MongoDB 配置(允许远程连接)
编辑 MongoDB 配置文件
# 对于常规安装(非Docker)
sudo nano /etc/mongod.conf# 对于Docker安装,先进入容器再编辑(或通过宿主机映射配置文件,见后文)
docker exec -it mongodb nano /etc/mongod.conf
修改绑定 IP 和认证配置
找到并修改以下内容(按Ctrl+O
保存,Ctrl+X
退出):
net:port: 27017bindIp: 0.0.0.0 # 从127.0.0.1改为0.0.0.0,允许所有IP连接security:authorization: enabled # 开启认证(必须设置,否则有安全风险)
二、配置 MongoDB 账号密码(强制认证)
进入 MongoDB 命令行
# 常规安装
mongosh# Docker安装
docker exec -it mongodb mongosh
2.创建管理员用户
// 切换到admin数据库
use admin// 创建管理员(用户名/密码自定义)
db.createUser({user: "admin",pwd: "你的强密码", // 建议包含大小写字母+数字+符号roles: [{ role: "root", db: "admin" }] // 最高权限
})// 退出
exit
三、开放服务器端口(关键步骤)
宝塔面板开放 27017 端口
- 登录宝塔面板 → 左侧「安全」→ 「防火墙」→ 「添加规则」
- 端口:
27017
,备注:MongoDB
,保存。
服务器系统防火墙开放端口
执行以下命令(无论是否用宝塔,都建议执行):
# 开放27017端口
sudo ufw allow 27017/tcp# 重启防火墙
sudo ufw reload# 查看开放的端口(确认27017已在列表中)
sudo ufw status
四、重启 MongoDB 使配置生效
# 常规安装
sudo systemctl restart mongod# Docker安装(先停止再启动容器)
docker restart mongodb
五、测试远程连接(本地电脑验证)
使用 MongoDB 客户端连接
以mongosh
为例(本地电脑需安装 MongoDB 工具):
mongosh "mongodb://服务器公网IP:27017" -u "admin" -p "你的密码" --authenticationDatabase "admin"
如果使用可视化工具(如 Robo 3T)
- 连接地址:服务器公网 IP
- 端口:27017
- 认证数据库:admin
- 用户名 / 密码:上面创建的 admin 和密码
常见问题排查
连接超时
- 检查服务器公网 IP 是否正确
- 确认 27017 端口在宝塔和系统防火墙中均已开放
- 尝试关闭服务器厂商的安全组(如阿里云、腾讯云的安全组需单独开放 27017)。
认证失败
- 确认用户名、密码、认证数据库(
admin
)是否正确 - 重新创建用户:
db.dropUser("admin")
后重新执行创建用户命令。
- 确认用户名、密码、认证数据库(
Docker 安装特殊配置
如果 Docker 启动时未映射配置文件,修改配置后需重新启动容器
# 停止并删除旧容器(数据不会丢失,因为用了volume)
docker stop mongodb && docker rm mongodb# 重新启动容器(确保端口映射正确)
docker run -d \--name mongodb \-p 27017:27017 \-v mongodb_data:/data/db \--restart=always \mongo:latest
通过以上步骤,即可实现从本地电脑远程连接服务器上的 MongoDB。注意:开启认证和限制 IP 访问 能大幅提高安全性,避免数据库被恶意攻击。
# mongod.conf# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.
storage:dbPath: /var/lib/mongodb
# engine:
# wiredTiger:# where to write logging data.
systemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.log# network interfaces - 允许远程连接的关键配置
net:port: 27017bindIp: 0.0.0.0 # 从127.0.0.1改为0.0.0.0,允许所有IP访问# how the process runs
processManagement:timeZoneInfo: /usr/share/zoneinfo# 启用身份验证 - 重要!否则存在安全风险
security:authorization: enabled#operationProfiling:#replication:#sharding:## Enterprise-Only Options:#auditLog:#snmp:
修改说明
允许远程连接
将bindIp: 127.0.0.1
改为bindIp: 0.0.0.0
,这样 MongoDB 就会监听服务器上所有可用的网络接口,而不仅仅是本地回环地址。启用身份验证
取消注释并添加security:
配置块,启用authorization: enabled
,这要求所有连接必须提供有效的用户名和密码才能操作数据库。
修改后操作步骤
保存配置文件
如果你使用nano
编辑器,按Ctrl+O
保存,Ctrl+X
退出。重启 MongoDB 服务
sudo systemctl restart mongod
3.确认服务状态
sudo systemctl status mongod
创建管理员用户(首次配置必须执行)
参考之前步骤创建管理员账号,否则启用认证后将无法连接数据库。
完成这些配置后,配合服务器防火墙和宝塔面板的端口开放设置,就能安全地进行远程连接了。
MongoDB 的用户名和密码需要你手动创建,默认情况下是没有预设账号密码的。创建方法如下:
1. 先登录 MongoDB 命令行(无需密码,因为刚启用认证但还没创建用户)
# 常规安装(非Docker)
mongosh# Docker安装
docker exec -it mongodb mongosh
2. 创建管理员用户(在命令行中执行)
// 切换到系统数据库
use admin// 创建管理员账号(请替换为你的用户名和密码)
db.createUser({user: "admin", // 用户名(自定义,比如root、mongoAdmin等)pwd: "你的密码", // 密码(建议设置复杂密码,包含大小写+数字+符号)roles: [{ role: "root", db: "admin" }] // 最高权限(管理所有数据库)
})
执行成功后会显示类似 { ok: 1 }
的提示,说明用户创建成功。
3. 后续连接方式(需要验证密码)
# 本地连接
mongosh -u "admin" -p "你的密码" --authenticationDatabase "admin"# 远程连接(本地电脑连接服务器)
mongosh "mongodb://服务器IP:27017" -u "admin" -p "你的密码" --authenticationDatabase "admin"
说明
- 用户名和密码是你自己定义的,建议记录下来
--authenticationDatabase "admin"
必须指定,因为用户是在 admin 数据库中创建的- 后续可以根据需要创建其他数据库的专用用户(权限更小,更安全)
创建完成后,远程连接时就需要填写你设置的用户名和密码了。
要在 MongoDB 中创建这些集合(对应关系型数据库的表),并为每个集合创建专用用户,可按以下步骤操作:
1. 连接到 MongoDB 并切换到 admin 数据库
# 连接时使用之前创建的管理员账号 mongosh -u "admin" -p "你的管理员密码" --authenticationDatabase "admin"
2. 创建数据库和集合
在 MongoDB 中,集合会在首次插入数据时自动创建,我们可以通过插入一条测试数据来初始化:
// 创建device-sms数据库并切换到该库
use device-sms// 创建SettleAnAccount集合
db.SettleAnAccount.insertOne({"test": "初始化数据","createdAt": new Date()
})// 创建orders集合
db.orders.insertOne({"test": "初始化数据","createdAt": new Date()
})// 创建smsMessageHistory集合
db.smsMessageHistory.insertOne({"test": "初始化数据","createdAt": new Date()
})// 创建smsMessageLogHistory集合
db.smsMessageLogHistory.insertOne({"test": "初始化数据","createdAt": new Date()
})// 创建smsMessageLogHistoryDto集合
db.smsMessageLogHistoryDto.insertOne({"test": "初始化数据","createdAt": new Date()
})
执行后会返回类似 { "acknowledged" : true, "insertedId" : ObjectId("...") }
的成功信息。
3. 为 device-sms 数据库创建专用用户(推荐)
为了安全,建议创建一个仅能操作 device-sms 数据库的用户,而不是一直使用管理员账号:
// 切换到admin数据库
use admin// 创建专用用户(替换用户名和密码)
db.createUser({user: "sms_user", // 用户名pwd: "你的专用密码", // 密码roles: [{ role: "readWrite", // 读写权限db: "device-sms" // 仅对device-sms数据库有效}]
})
4. 验证创建结果
// 查看所有数据库
show dbs// 切换到device-sms数据库
use device-sms// 查看所有集合
show collections
执行后会显示你创建的所有集合名称,说明操作成功。
后续应用程序连接时,建议使用创建的sms_user
账号,连接字符串格式如下:
mongodb://sms_user:你的专用密码@服务器IP:27017/device-sms?authSource=admin
这样就完成了所有集合的创建和权限配置。如果需要为集合添加索引或验证规则,可以在后续根据业务需求进行设置。