version: '3.8' services: # Database Services mongodb: image: mongo:5.0 container_name: energy-mongodb restart: unless-stopped environment: MONGO_INITDB_ROOT_USERNAME: admin MONGO_INITDB_ROOT_PASSWORD: password123 ports: - "27017:27017" volumes: - mongodb_data:/data/db - ./init-mongo:/docker-entrypoint-initdb.d networks: - energy-network redis: image: redis:7-alpine container_name: energy-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data networks: - energy-network # API Gateway api-gateway: build: context: ./api-gateway dockerfile: Dockerfile container_name: energy-api-gateway restart: unless-stopped ports: - "8000:8000" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard?authSource=admin - REDIS_URL=redis://redis:6379 - TOKEN_SERVICE_URL=http://token-service:8001 - BATTERY_SERVICE_URL=http://battery-service:8002 - DEMAND_RESPONSE_SERVICE_URL=http://demand-response-service:8003 - P2P_TRADING_SERVICE_URL=http://p2p-trading-service:8004 - FORECASTING_SERVICE_URL=http://forecasting-service:8005 - IOT_CONTROL_SERVICE_URL=http://iot-control-service:8006 depends_on: - mongodb - redis - token-service - battery-service - demand-response-service networks: - energy-network # Token Management Service token-service: build: context: ./token-service dockerfile: Dockerfile container_name: energy-token-service restart: unless-stopped ports: - "8001:8001" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_tokens?authSource=admin - JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production depends_on: - mongodb networks: - energy-network # Battery Management Service battery-service: build: context: ./battery-service dockerfile: Dockerfile container_name: energy-battery-service restart: unless-stopped ports: - "8002:8002" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_batteries?authSource=admin - REDIS_URL=redis://redis:6379 depends_on: - mongodb - redis networks: - energy-network # Demand Response Service demand-response-service: build: context: ./demand-response-service dockerfile: Dockerfile container_name: energy-demand-response-service restart: unless-stopped ports: - "8003:8003" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_demand_response?authSource=admin - REDIS_URL=redis://redis:6379 - IOT_CONTROL_SERVICE_URL=http://iot-control-service:8006 depends_on: - mongodb - redis networks: - energy-network # P2P Trading Service p2p-trading-service: build: context: ./p2p-trading-service dockerfile: Dockerfile container_name: energy-p2p-trading-service restart: unless-stopped ports: - "8004:8004" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_p2p?authSource=admin - REDIS_URL=redis://redis:6379 depends_on: - mongodb - redis networks: - energy-network # Forecasting Service forecasting-service: build: context: ./forecasting-service dockerfile: Dockerfile container_name: energy-forecasting-service restart: unless-stopped ports: - "8005:8005" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_forecasting?authSource=admin - REDIS_URL=redis://redis:6379 depends_on: - mongodb - redis networks: - energy-network # IoT Control Service iot-control-service: build: context: ./iot-control-service dockerfile: Dockerfile container_name: energy-iot-control-service restart: unless-stopped ports: - "8006:8006" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_iot?authSource=admin - REDIS_URL=redis://redis:6379 - BATTERY_SERVICE_URL=http://battery-service:8002 - DEMAND_RESPONSE_SERVICE_URL=http://demand-response-service:8003 depends_on: - mongodb - redis networks: - energy-network # Monitoring and Management nginx: image: nginx:alpine container_name: energy-nginx restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/ssl:/etc/nginx/ssl depends_on: - api-gateway networks: - energy-network networks: energy-network: driver: bridge name: energy-network volumes: mongodb_data: name: energy-mongodb-data redis_data: name: energy-redis-data