Senate

MongoDB

Deploy MongoDB database with persistent storage

MongoDB

Deploy MongoDB document database with persistent storage.

Quick Deploy

Create service

Go to ServicesNew Service

Enter service name: mongodb and click Create

Configure source

  1. Go to the Source tab
  2. Select Docker Image as source type
  3. Enter image: mongo:7
  4. Click Save

Add environment variables

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

Add storage

Mount PathVolume
/data/dbmongo-data

Deploy

Click Create to deploy.

Configuration

Environment Variables

VariableDescriptionRequired
MONGO_INITDB_ROOT_USERNAMERoot usernameYes
MONGO_INITDB_ROOT_PASSWORDRoot passwordYes
MONGO_INITDB_DATABASEInitial databaseNo

Connecting

From other services

Using Docker networking:

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

Connection string format

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

Node.js example

const { MongoClient } = require('mongodb');

const uri = process.env.MONGODB_URI;
const client = new MongoClient(uri);

await client.connect();
const db = client.db('myapp');

Creating Application Users

Connect to MongoDB and create a restricted user:

use myapp

db.createUser({
  user: "appuser",
  pwd: "app-password",
  roles: [
    { role: "readWrite", db: "myapp" }
  ]
})

Then connect with:

mongodb://appuser:app-password@mongodb:27017/myapp

Replica Set

For production, use a replica set:

Single-node replica set

  1. Create with command override:
Image: mongo:7
Command: --replSet rs0
  1. Initialize replica set:
rs.initiate({
  _id: "rs0",
  members: [{ _id: 0, host: "mongodb:27017" }]
})

External Access

Exposing MongoDB publicly is a major security risk. Use SSH tunnels or VPN.

If required:

  1. Add port mapping: 27017:27017
  2. Enable authentication (already enabled with env vars)
  3. Use firewall to restrict IPs

MongoDB Express (Admin UI)

Deploy a web-based admin interface:

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

Backups

Using mongodump

docker exec senate-mongodb-xxx mongodump \
  -u admin -p password \
  --authenticationDatabase admin \
  --out /dump

Copy backup from container

docker cp senate-mongodb-xxx:/dump ./backup

Restore

docker exec senate-mongodb-xxx mongorestore \
  -u admin -p password \
  --authenticationDatabase admin \
  /dump

Performance

Indexes

Create indexes for common queries:

db.users.createIndex({ email: 1 }, { unique: true })
db.orders.createIndex({ userId: 1, createdAt: -1 })

WiredTiger cache

Adjust cache size via environment:

MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=password

Or use config file with storage.wiredTiger.engineConfig.cacheSizeGB.

On this page