version: '3.8' services: # MongoDB Database mongodb: image: mongo:7.0 container_name: recipe-management-mongodb restart: unless-stopped ports: - "27017:27017" 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: recipe-management-backend restart: unless-stopped environment: - PORT=5000 - MONGODB_HOST=mongodb - MONGODB_PORT=27017 - MONGODB_DATABASE=recipe-management - JWT_SECRET=${JWT_SECRET} ports: - "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 container_name: recipe-management-frontend restart: unless-stopped ports: - "3000:80" depends_on: - backend networks: - recipe-network environment: - REACT_APP_API_URL=http://localhost:5000 # Optional: MongoDB Express for database management mongo-express: image: mongo-express:1.0.0 container_name: recipe-management-mongo-express restart: unless-stopped ports: - "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