MongoDB
部署带有持久存储的 MongoDB 数据库
MongoDB
部署带有持久存储的 MongoDB 文档数据库。
快速部署
创建服务
进入 Services → New Service
输入服务名称:mongodb 并点击 Create
配置源
- 进入 Source 标签页
- 选择 Docker Image 作为源类型
- 输入镜像:
mongo:7 - 点击 Save
添加环境变量
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=your-secure-password
MONGO_INITDB_DATABASE=myapp添加存储
| 挂载路径 | 卷 |
|---|---|
/data/db | mongo-data |
部署
点击 Create 部署。
配置
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
MONGO_INITDB_ROOT_USERNAME | Root 用户名 | 是 |
MONGO_INITDB_ROOT_PASSWORD | Root 密码 | 是 |
MONGO_INITDB_DATABASE | 初始数据库 | 否 |
连接
从其他服务
使用 Docker 网络:
mongodb://admin:your-secure-password@mongodb:27017/myapp?authSource=admin连接字符串格式
mongodb://username:password@host:port/database?authSource=adminNode.js 示例
const { MongoClient } = require('mongodb');
const uri = process.env.MONGODB_URI;
const client = new MongoClient(uri);
await client.connect();
const db = client.db('myapp');创建应用用户
连接到 MongoDB 并创建受限用户:
use myapp
db.createUser({
user: "appuser",
pwd: "app-password",
roles: [
{ role: "readWrite", db: "myapp" }
]
})然后使用以下连接:
mongodb://appuser:app-password@mongodb:27017/myapp副本集
生产环境使用副本集:
单节点副本集
- 使用命令覆盖创建:
Image: mongo:7
Command: --replSet rs0- 初始化副本集:
rs.initiate({
_id: "rs0",
members: [{ _id: 0, host: "mongodb:27017" }]
})外部访问
公开暴露 MongoDB 是重大安全风险。请使用 SSH 隧道或 VPN。
如需要:
- 添加端口映射:
27017:27017 - 启用认证(使用环境变量已启用)
- 使用防火墙限制 IP
MongoDB Express(管理界面)
部署基于 Web 的管理界面:
Service: mongo-express
Image: mongo-express
Environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: admin
ME_CONFIG_MONGODB_ADMINPASSWORD: your-secure-password
ME_CONFIG_MONGODB_URL: mongodb://admin:password@mongodb:27017/
ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: admin-ui-password
Domain: mongo-admin.example.com备份
使用 mongodump
docker exec senate-mongodb-xxx mongodump \
-u admin -p password \
--authenticationDatabase admin \
--out /dump从容器复制备份
docker cp senate-mongodb-xxx:/dump ./backup恢复
docker exec senate-mongodb-xxx mongorestore \
-u admin -p password \
--authenticationDatabase admin \
/dump性能
索引
为常见查询创建索引:
db.users.createIndex({ email: 1 }, { unique: true })
db.orders.createIndex({ userId: 1, createdAt: -1 })WiredTiger 缓存
通过环境变量调整缓存大小:
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=password或使用配置文件的 storage.wiredTiger.engineConfig.cacheSizeGB。