version: "3.8" services: # Database Services mongodb: image: mongo:5.0 container_name: 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: 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: 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 - SENSOR_SERVICE_URL=http://sensor-service:8007 - 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 - DATA_INGESTION_SERVICE_URL=http://data-ingestion-service:8008 depends_on: - mongodb - redis - token-service - sensor-service - data-ingestion-service # - battery-service # - demand-response-service networks: - energy-network # Token Management Service token-service: build: context: ./token-service dockerfile: Dockerfile container_name: 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: 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: 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: 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: 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: 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 # Data Ingestion Service (FTP Monitoring & SA4CPS Integration) data-ingestion-service: build: context: ./data-ingestion-service dockerfile: Dockerfile container_name: data-ingestion-service restart: unless-stopped ports: - "8008:8008" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/ - FTP_SA4CPS_HOST=ftp.sa4cps.pt - FTP_SA4CPS_PORT=21 - FTP_SA4CPS_USERNAME=curvascarga@sa4cps.pt - FTP_SA4CPS_REMOTE_PATH=/SLGs/ - FTP_CHECK_INTERVAL=21600 - FTP_SKIP_INITIAL_SCAN=true depends_on: - mongodb networks: - energy-network # Sensor Management Service (Original Dashboard Functionality) sensor-service: build: context: ./sensor-service dockerfile: Dockerfile container_name: sensor-service restart: unless-stopped ports: - "8007:8007" environment: - MONGO_URL=mongodb://admin:password123@mongodb:27017/energy_dashboard_sensors?authSource=admin - REDIS_URL=redis://redis:6379 # - TOKEN_SERVICE_URL=http://token-service:8001 depends_on: - mongodb - redis networks: - energy-network # Monitoring and Management nginx: image: nginx:alpine container_name: 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