services: mysql: image: mysql:8.0 container_name: energy_mysql environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: energy_saas MYSQL_USER: energy MYSQL_PASSWORD: energypass ports: - "3306:3306" command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 10 redis: image: redis:7-alpine container_name: energy_redis volumes: - redis_data:/data tdengine: image: tdengine/tdengine:3.0.2.0 container_name: energy_tdengine ports: - "6030:6030" - "6041:6041" environment: TAOS_FQDN: tdengine volumes: - tdengine_data:/var/lib/taos backend: build: context: ./backend dockerfile: Dockerfile container_name: energy_backend environment: DB_HOST: mysql DB_PORT: 3306 DB_USER: energy DB_PASS: energypass DB_NAME: energy_saas REDIS_HOST: redis REDIS_PORT: 6379 JWT_SECRET: energysmartsecret PORT: 3000 MQTT_URL: wss://mqtt.yourcompany.com:8083/mqtt depends_on: mysql: condition: service_healthy redis: condition: service_started ports: - "3001:3000" frontend: build: context: ./frontend dockerfile: Dockerfile container_name: energy_frontend environment: VITE_BACKEND_URL: http://backend:3000 VITE_MQTT_URL: wss://mqtt.yourcompany.com:8083/mqtt depends_on: - backend ports: - "8080:80" volumes: mysql_data: redis_data: tdengine_data: