MongoDB
Deploy MongoDB database with persistent storage
MongoDB
Deploy MongoDB document database with persistent storage.
Quick Deploy
Create service
Go to Services → New Service
Enter service name: mongodb and click Create
Configure source
- Go to the Source tab
- Select Docker Image as source type
- Enter image:
mongo:7 - Click Save
Add environment variables
MONGO_INITDB_ROOT_USERNAME=admin
MONGO_INITDB_ROOT_PASSWORD=your-secure-password
MONGO_INITDB_DATABASE=myappAdd storage
| Mount Path | Volume |
|---|---|
/data/db | mongo-data |
Deploy
Click Create to deploy.
Configuration
Environment Variables
| Variable | Description | Required |
|---|---|---|
MONGO_INITDB_ROOT_USERNAME | Root username | Yes |
MONGO_INITDB_ROOT_PASSWORD | Root password | Yes |
MONGO_INITDB_DATABASE | Initial database | No |
Connecting
From other services
Using Docker networking:
mongodb://admin:your-secure-password@mongodb:27017/myapp?authSource=adminConnection string format
mongodb://username:password@host:port/database?authSource=adminNode.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/myappReplica Set
For production, use a replica set:
Single-node replica set
- Create with command override:
Image: mongo:7
Command: --replSet rs0- 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:
- Add port mapping:
27017:27017 - Enable authentication (already enabled with env vars)
- 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.comBackups
Using mongodump
docker exec senate-mongodb-xxx mongodump \
-u admin -p password \
--authenticationDatabase admin \
--out /dumpCopy backup from container
docker cp senate-mongodb-xxx:/dump ./backupRestore
docker exec senate-mongodb-xxx mongorestore \
-u admin -p password \
--authenticationDatabase admin \
/dumpPerformance
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=passwordOr use config file with storage.wiredTiger.engineConfig.cacheSizeGB.
Related
- Storage - Volume management
- Environment Variables - Configuration