version: '3.8' services: # MongoDB Database mongodb: image: mongo:7.0 container_name: scoffer-mongodb restart: unless-stopped volumes: - mongodb_data:/data/db - ./backend/seedData.js:/docker-entrypoint-initdb.d/01-seedData.js:ro networks: - recipe-network healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')", "--quiet"] interval: 30s timeout: 10s retries: 5 start_period: 40s # Backend API Service backend: build: context: ./backend dockerfile: Dockerfile container_name: scoffer-backend restart: unless-stopped environment: - PORT=5000 - MONGODB_HOST=mongodb - MONGODB_PORT=27017 - MONGODB_DATABASE=scoffer - JWT_SECRET=${JWT_SECRET} - ALLOW_REGISTRATION=${ALLOW_REGISTRATION:-true} ports: - "127.0.0.1:${BACKEND_PORT:-5000}:5000" depends_on: mongodb: condition: service_healthy networks: - recipe-network volumes: - ./backend:/app - /app/node_modules # Frontend React App frontend: build: context: ./frontend dockerfile: Dockerfile args: - REACT_APP_API_URL=${REACT_APP_API_URL:-http://backend:5000/api} container_name: scoffer-frontend restart: unless-stopped environment: - REACT_APP_API_URL=${REACT_APP_API_URL:-http://backend:5000/api} ports: - "127.0.0.1:${FRONTEND_PORT:-3000}:80" depends_on: - backend # nginx in the image listens on IPv4 only; "localhost" resolves to ::1 healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://127.0.0.1:80/ || exit 1"] interval: 30s timeout: 3s retries: 3 start_period: 5s networks: - recipe-network # Optional: MongoDB Express for database management mongo-express: image: mongo-express:1.0.0 container_name: scoffer-mongo-express restart: unless-stopped ports: - "127.0.0.1:${MONGO_EXPRESS_PORT:-8081}:8081" environment: ME_CONFIG_MONGODB_URL: mongodb://mongodb:27017/ ME_CONFIG_BASICAUTH: "false" depends_on: mongodb: condition: service_healthy networks: - recipe-network volumes: mongodb_data: driver: local networks: recipe-network: driver: bridge