version: '3.8' services: # MongoDB Service mongodb: image: mongo:6.0 container_name: infinity-mongodb restart: always environment: MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} volumes: - mongodb_data:/data/db ports: - "27017:27017" networks: - infinity-network # Web Application (Next.js) webapp: build: context: . dockerfile: webapp/Dockerfile container_name: infinity-webapp restart: always depends_on: - mongodb environment: - NODE_ENV=${NODE_ENV} - DB_URI=${DB_URI} - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} ports: - "3000:3000" networks: - infinity-network # Worker Service worker: build: context: . dockerfile: worker/Dockerfile container_name: infinity-worker restart: always depends_on: - mongodb environment: - DB_URI=${DB_URI} networks: - infinity-network # Helper Service (runs once to create admin account) create-admin: build: context: . dockerfile: helpers/Dockerfile container_name: infinity-create-admin depends_on: mongodb: condition: service_healthy environment: - DB_URI=${DB_URI} - ADMIN_USERNAME=${ADMIN_USERNAME} - ADMIN_PASSWORD=${ADMIN_PASSWORD} networks: - infinity-network # This ensures the container exits after creating the admin account command: sh -c "python create_account.py" networks: infinity-network: driver: bridge volumes: mongodb_data: driver: local