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} REPORT_OUTPUT_DIR: ${REPORT_OUTPUT_DIR:-/tmp/switchbot-reports} REPORT_SENDER_EMAIL: ${REPORT_SENDER_EMAIL:-} REPORT_SENDER_NAME: ${REPORT_SENDER_NAME:-SwitchBot Temps} SMTP2GO_API_KEY: ${SMTP2GO_API_KEY:-} SMTP2GO_API_URL: ${SMTP2GO_API_URL:-https://api.smtp2go.com/v3/email/send} SMTP2GO_TIMEOUT_SECONDS: ${SMTP2GO_TIMEOUT_SECONDS:-20} REPORT_SCHEDULER_POLL_SECONDS: ${REPORT_SCHEDULER_POLL_SECONDS:-300} depends_on: db: condition: service_healthy networks: - default - webapps report-scheduler: build: . command: ["python", "-m", "app.report_scheduler"] environment: DATABASE_URL: ${DATABASE_URL:-mysql+pymysql://${MYSQL_USER:-switchbot}:${MYSQL_PASSWORD:-switchbot_password}@db:3306/${MYSQL_DATABASE:-switchbot}} APP_TIMEZONE: ${APP_TIMEZONE:-Europe/London} REPORT_OUTPUT_DIR: ${REPORT_OUTPUT_DIR:-/tmp/switchbot-reports} REPORT_SENDER_EMAIL: ${REPORT_SENDER_EMAIL:-} REPORT_SENDER_NAME: ${REPORT_SENDER_NAME:-SwitchBot Temps} SMTP2GO_API_KEY: ${SMTP2GO_API_KEY:-} SMTP2GO_API_URL: ${SMTP2GO_API_URL:-https://api.smtp2go.com/v3/email/send} SMTP2GO_TIMEOUT_SECONDS: ${SMTP2GO_TIMEOUT_SECONDS:-20} REPORT_SCHEDULER_POLL_SECONDS: ${REPORT_SCHEDULER_POLL_SECONDS:-300} depends_on: db: condition: service_healthy restart: unless-stopped 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