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: POSTGRES_HOST: database POSTGRES_PORT: 5432 POSTGRES_DB: ${POSTGRES_DB:-plasttrack} POSTGRES_USER: ${POSTGRES_USER:-plasttrack} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-plasttrack} MQTT_HOST: mqtt MQTT_PORT: 1883 MQTT_TOPIC: plasttrack/machines/+/events FRONTEND_ORIGIN: ${FRONTEND_ORIGIN:-http://localhost:5173} FRONTEND_ORIGINS: ${FRONTEND_ORIGINS:-http://localhost:5173,http://127.0.0.1:5173,http://localhost:5174,http://127.0.0.1:5174} depends_on: database: condition: service_healthy mqtt: condition: service_healthy ports: - "${BACKEND_PORT:-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} VITE_ALLOWED_HOSTS: ${VITE_ALLOWED_HOSTS:-localhost,127.0.0.1,plasttrack.sable.ynsdev.site} depends_on: - backend ports: - "5173:5173" simulator-ui: build: context: ./simulator-ui environment: VITE_API_BASE_URL: ${SIMULATOR_API_BASE_URL:-http://localhost:8000} VITE_ALLOWED_HOSTS: ${SIMULATOR_ALLOWED_HOSTS:-localhost,127.0.0.1,simulator.plasttrack.sable.ynsdev.site} depends_on: - backend ports: - "${SIMULATOR_PORT:-5174}:5174" volumes: postgres_data: