services: database: build: context: ./database environment: POSTGRES_DB: ${POSTGRES_DB:-plasttrack} POSTGRES_USER: ${POSTGRES_USER:-plasttrack} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-plasttrack} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 3s retries: 20 mqtt: build: context: ./mqtt ports: - "1883:1883" - "9001:9001" healthcheck: test: ["CMD-SHELL", "mosquitto_sub -h localhost -p 1883 -t '$$SYS/broker/version' -C 1 -W 3 >/dev/null 2>&1"] interval: 10s timeout: 5s retries: 10 backend: build: context: ./backend environment: DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-plasttrack}:${POSTGRES_PASSWORD:-plasttrack}@database:5432/${POSTGRES_DB:-plasttrack} MQTT_HOST: mqtt MQTT_PORT: 1883 MQTT_TOPIC: plasttrack/machines/+/events FRONTEND_ORIGIN: ${FRONTEND_ORIGIN:-http://localhost:5173} depends_on: database: condition: service_healthy mqtt: condition: service_healthy ports: - "8000:8000" edge-simulator: build: context: ./edge-simulator environment: MQTT_HOST: mqtt MQTT_PORT: 1883 MQTT_TOPIC_PREFIX: plasttrack/machines SIM_MACHINE_CODES: INJ-01,INJ-02,INJ-03 depends_on: mqtt: condition: service_healthy frontend: build: context: ./frontend environment: VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:8000} VITE_WS_URL: ${VITE_WS_URL:-ws://localhost:8000/ws/dashboard} depends_on: - backend ports: - "5173:5173" volumes: postgres_data: