Senate

MongoDB

部署带有持久存储的 MongoDB 数据库

MongoDB

部署带有持久存储的 MongoDB 文档数据库。

快速部署

创建服务

进入 ServicesNew Service

输入服务名称:mongodb 并点击 Create

配置源

  1. 进入 Source 标签页
  2. 选择 Docker Image 作为源类型
  3. 输入镜像:mongo:7
  4. 点击 Save

添加环境变量

MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=your-secure-password
MONGO_INITDB_DATABASE=myapp

添加存储

挂载路径
/data/dbmongo-data

部署

点击 Create 部署。

配置

环境变量

变量描述必填
MONGO_INITDB_ROOT_USERNAMERoot 用户名
MONGO_INITDB_ROOT_PASSWORDRoot 密码
MONGO_INITDB_DATABASE初始数据库

连接

从其他服务

使用 Docker 网络:

mongodb://admin:your-secure-password@mongodb:27017/myapp?authSource=admin

连接字符串格式

mongodb://username:password@host:port/database?authSource=admin

Node.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

副本集

生产环境使用副本集:

单节点副本集

  1. 使用命令覆盖创建:
Image: mongo:7
Command: --replSet rs0
  1. 初始化副本集:
rs.initiate({
  _id: "rs0",
  members: [{ _id: 0, host: "mongodb:27017" }]
})

外部访问

公开暴露 MongoDB 是重大安全风险。请使用 SSH 隧道或 VPN。

如需要:

  1. 添加端口映射:27017:27017
  2. 启用认证(使用环境变量已启用)
  3. 使用防火墙限制 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

相关内容

目录