networks: infoscreen-net: driver: bridge services: listener: build: context: ./listener dockerfile: Dockerfile image: infoscreen-listener:latest container_name: infoscreen-listener restart: unless-stopped depends_on: db: condition: service_healthy mqtt: condition: service_healthy environment: - DB_URL=mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME} volumes: - ./listener:/app:rw networks: - infoscreen-net proxy: image: nginx:1.27 container_name: infoscreen-proxy ports: - "80:80" - "443:443" volumes: - ${PWD}/nginx.conf:/etc/nginx/nginx.conf:ro - ${PWD}/certs:/etc/nginx/certs:ro depends_on: - server - dashboard networks: - infoscreen-net db: image: mariadb:11.4.7 container_name: infoscreen-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db-data:/var/lib/mysql ports: - "3306:3306" networks: - infoscreen-net healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 30s timeout: 5s retries: 3 start_period: 30s mqtt: image: eclipse-mosquitto:2.0.21 container_name: infoscreen-mqtt restart: unless-stopped volumes: - ./mosquitto/config:/mosquitto/config - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log ports: - "1883:1883" # Standard MQTT - "9001:9001" # WebSocket (falls benötigt) networks: - infoscreen-net healthcheck: test: ["CMD-SHELL", "mosquitto_pub -h localhost -t test -m 'health' || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 10s server: build: context: ./server dockerfile: Dockerfile image: infoscreen-api:latest container_name: infoscreen-api restart: unless-stopped depends_on: db: condition: service_healthy mqtt: condition: service_healthy environment: DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}" FLASK_ENV: ${FLASK_ENV} ENV_FILE: ${ENV_FILE} MQTT_BROKER_URL: ${MQTT_BROKER_URL} MQTT_USER: ${MQTT_USER} MQTT_PASSWORD: ${MQTT_PASSWORD} ports: - "8000:8000" networks: - infoscreen-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 5s retries: 3 start_period: 40s # ✅ GEÄNDERT: Dashboard jetzt mit Node.js/React statt Python/Dash dashboard: build: context: ./dashboard dockerfile: Dockerfile # ✅ HINZUGEFÜGT: Build-Args für React Production Build args: - NODE_ENV=production - VITE_API_URL=${API_URL} image: infoscreen-dashboard:latest container_name: infoscreen-dashboard restart: unless-stopped depends_on: server: condition: service_healthy environment: # ✅ GEÄNDERT: React-spezifische Umgebungsvariablen - VITE_API_URL=${API_URL} - NODE_ENV=production ports: - "3000:3000" # ✅ GEÄNDERT: Standard React/Vite Port networks: - infoscreen-net # ✅ GEÄNDERT: Healthcheck für React App healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/"] interval: 30s timeout: 5s retries: 3 start_period: 30s scheduler: build: context: ./scheduler dockerfile: Dockerfile image: infoscreen-scheduler:latest container_name: infoscreen-scheduler restart: unless-stopped depends_on: db: condition: service_healthy mqtt: condition: service_healthy environment: DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}" MQTT_BROKER_URL: mqtt MQTT_PORT: 1883 networks: - infoscreen-net simclient: build: context: ./simclient dockerfile: Dockerfile image: infoscreen-simclient:latest container_name: infoscreen-simclient restart: unless-stopped depends_on: mqtt: condition: service_healthy environment: MQTT_BROKER_URL: mqtt MQTT_PORT: 1883 networks: - infoscreen-net volumes: db-data: