services: db: image: mysql:8.4 environment: MYSQL_DATABASE: ${MYSQL_DATABASE:-switchbot} MYSQL_USER: ${MYSQL_USER:-switchbot} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-switchbot_password} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_password} volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 10 web: build: . command: ["gunicorn", "--bind", "0.0.0.0:80", "app.web:app"] environment: DATABASE_URL: ${DATABASE_URL:-mysql+pymysql://${MYSQL_USER:-switchbot}:${MYSQL_PASSWORD:-switchbot_password}@db:3306/${MYSQL_DATABASE:-switchbot}} SWITCHBOT_TOKEN: ${SWITCHBOT_TOKEN:-} SWITCHBOT_SECRET: ${SWITCHBOT_SECRET:-} COLLECT_INTERVAL_SECONDS: ${COLLECT_INTERVAL_SECONDS:-900} APP_TIMEZONE: ${APP_TIMEZONE:-Europe/London} FLASK_SECRET_KEY: ${FLASK_SECRET_KEY:-dev-only-secret} depends_on: db: condition: service_healthy networks: - default - webapps collector: build: . command: ["python", "-m", "app.collector"] environment: DATABASE_URL: ${DATABASE_URL:-mysql+pymysql://${MYSQL_USER:-switchbot}:${MYSQL_PASSWORD:-switchbot_password}@db:3306/${MYSQL_DATABASE:-switchbot}} SWITCHBOT_TOKEN: ${SWITCHBOT_TOKEN:-} SWITCHBOT_SECRET: ${SWITCHBOT_SECRET:-} COLLECT_INTERVAL_SECONDS: ${COLLECT_INTERVAL_SECONDS:-900} APP_TIMEZONE: ${APP_TIMEZONE:-Europe/London} HEALTHCHECK_URL: ${HEALTHCHECK_URL:-} depends_on: db: condition: service_healthy restart: unless-stopped volumes: mysql_data: networks: default: webapps: external: true