version: '3.8' networks: app-network: driver: bridge services: # setup MongoDB cluster for production mongo-replica-setup: container_name: mongo-setup image: 'mongo:latest' restart: on-failure networks: - app-network volumes: - ./.docker/mongodb/scripts/mongosetup.sh:/scripts/mongosetup.sh entrypoint: ['bash', '/scripts/mongosetup.sh'] env_file: - .env environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} depends_on: - mongodb1 - mongodb2 - mongodb3 mongodb1: image: mongo:latest container_name: mongodb1 restart: always ports: - '127.0.0.1:27017:27017' networks: - app-network volumes: - mongodb1-data:/data/db command: ['--replSet', 'rs0', '--bind_ip_all', '--port', '27017'] healthcheck: test: ['CMD', 'mongo', '--eval', "db.adminCommand('ping')"] interval: 5s start_period: 10s mongodb2: image: mongo:latest container_name: mongodb2 restart: always ports: - '127.0.0.1:27018:27018' networks: - app-network volumes: - mongodb2-data:/data/db command: ['--replSet', 'rs0', '--bind_ip_all', '--port', '27018'] healthcheck: test: ['CMD', 'mongo', '--eval', "db.adminCommand('ping')"] interval: 5s start_period: 10s mongodb3: image: mongo:latest container_name: mongodb3 restart: always ports: - '127.0.0.1:27019:27019' networks: - app-network volumes: - mongodb3-data:/data/db command: ['--replSet', 'rs0', '--bind_ip_all', '--port', '27019'] healthcheck: test: ['CMD', 'mongo', '--eval', "db.adminCommand('ping')"] interval: 5s start_period: 10s api: build: . volumes: - .:/app - /app/node_modules ports: - ${APP_PORT}:${APP_PORT} command: npm run start:dev env_file: - .env depends_on: - mongodb1 - mongodb2 - mongodb3 networks: - app-network volumes: mongodb1-data: mongodb2-data: mongodb3-data: