Don't use in production!!! For development purpose only
- Create compose.yml file with the following content:
services:
mongodb:
image: mongo
container_name: mongodb
volumes:
- mongodb:/data/db
- ./replica.key:/data/replica.key
environment:
MONGO_INITDB_ROOT_USERNAME: ${DATABASE_USER}
MONGO_INITDB_ROOT_PASSWORD: ${DATABASE_PASSWORD}
healthcheck:
test: test $$(echo "rs.initiate().ok || rs.status().ok" | mongosh -u $${MONGO_INITDB_ROOT_USERNAME} -p $${MONGO_INITDB_ROOT_PASSWORD} --quiet) -eq 1
interval: 10s
start_period: 5s
ports:
- 27017:27017
command: "--bind_ip_all --keyFile /data/mongo/replica.key --replSet rs0"
mongo-express:
image: mongo-express
container_name: mongo-express
depends_on:
mongodb:
condition: service_healthy
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: ${DATABASE_USER}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${DATABASE_PASSWORD}
ME_CONFIG_MONGODB_URL: mongodb://${DATABASE_USER}:${DATABASE_PASSWORD}@mongodb:27017/?replicaSet=rs0&w=majority&readPreference=primary&directConnection=true&authSource=admin
restart: unless-stopped
volumes:
mongodb:
- Generate replica key:
openssl rand -base64 756 > replica.key
- Create .env file with variables:
DATABASE_USER=
DATABASE_PASSWORD=
- Run
docker compose up -d