services: db: image: mongo:8 environment: MONGO_INITDB_ROOT_USERNAME: mongo MONGO_INITDB_ROOT_PASSWORD: mongo MONGO_INITDB_DATABASE: dev ports: - "27017:27017" volumes: - ./devdb:/data/db # Generate with `openssl rand -base64 756 > mongo-keyfile && chmod 400 mongo-keyfile && sudo chown 999:999 mongo-keyfile` - ./mongo-keyfile:/etc/mongo-keyfile:ro command: ["--replSet", "rs0", "--keyFile", "/etc/mongo-keyfile", "--auth"] healthcheck: test: ["CMD", "mongosh", "--eval", '''db.adminCommand("ping")'''] interval: 10s timeout: 5s retries: 3 restart: unless-stopped mongo-init-replica: image: mongo:8 depends_on: db: condition: service_healthy entrypoint: > bash -c " echo 'initiating replica set...'; mongosh --host db:27017 -u mongo -p mongo --eval ' rs.initiate({ _id: \"rs0\", members: [{ _id: 0, host: \"db:27017\" }] }) '; echo 'replica set ready'; " restart: "no" app: build: context: . dockerfile: Dockerfile.dev environment: NODE_ENV: development HOST: 0.0.0.0 PORT: 3000 DB_HOST: db DB_PORT: 27017 DB_USER: mongo DB_PASSWORD: mongo DB_NAME: dev ADMIN_PASSWORD: "00000000000000000000000000000000" env_file: - .env ports: - "4000:3000" depends_on: db: condition: service_healthy develop: watch: - path: ./api action: sync target: /app/api - path: ./lexicon action: sync target: /app/lexicon - path: ./services action: sync target: /app/services - path: ./utils action: sync target: /app/utils - path: ./data-plane action: sync target: /app/data-plane - path: ./main.ts action: sync target: /app/main.ts restart: unless-stopped