networks: infoscreen-net: driver: bridge services: proxy: image: nginx:1.25 container_name: infoscreen-proxy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./certs:/etc/nginx/certs:ro depends_on: - server - dashboard networks: - infoscreen-net db: image: mariadb:11.2 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 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.conf:/mosquitto/config/mosquitto.conf:ro ports: - "1883:1883" - "9001:9001" 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 # Verwende fertige Images statt Build server: image: ghcr.io/robbstarkaustria/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}" DB_USER: ${DB_USER} DB_PASSWORD: ${DB_PASSWORD} DB_NAME: ${DB_NAME} DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} DB_HOST: db FLASK_ENV: production MQTT_BROKER_URL: mqtt://mqtt:1883 MQTT_USER: ${MQTT_USER} MQTT_PASSWORD: ${MQTT_PASSWORD} networks: - infoscreen-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 5s retries: 3 start_period: 40s command: > bash -c "alembic -c /app/server/alembic.ini upgrade head && python /app/server/init_defaults.py && exec gunicorn server.wsgi:app --bind 0.0.0.0:8000" dashboard: image: ghcr.io/robbstarkaustria/infoscreen-dashboard:latest # Oder wo auch immer Ihre Images liegen container_name: infoscreen-dashboard restart: unless-stopped depends_on: server: condition: service_healthy environment: NODE_ENV: production VITE_API_URL: ${API_URL} networks: - infoscreen-net listener: image: ghcr.io/robbstarkaustria/infoscreen-listener:latest # Oder wo auch immer Ihre Images liegen container_name: infoscreen-listener 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}" DB_USER: ${DB_USER} DB_PASSWORD: ${DB_PASSWORD} DB_NAME: ${DB_NAME} DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} networks: - infoscreen-net scheduler: image: ghcr.io/robbstarkaustria/infoscreen-scheduler:latest container_name: infoscreen-scheduler restart: unless-stopped depends_on: # HINZUGEFÜGT: Stellt sicher, dass die DB vor dem Scheduler startet db: condition: service_healthy mqtt: condition: service_healthy environment: # HINZUGEFÜGT: Datenbank-Verbindungsstring DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}" MQTT_PORT: 1883 networks: - infoscreen-net volumes: db-data: