services: app: build: context: . dockerfile: Dockerfile restart: unless-stopped ports: - "${APP_PORT:-3000}:3000" environment: DASHBOARD_HOST: 0.0.0.0 DASHBOARD_PORT: 3000 DASHBOARD_DB: ${DASHBOARD_DB:-mysql} DASHBOARD_POLL_INTERVAL_SEC: ${DASHBOARD_POLL_INTERVAL_SEC:-3600} DASHBOARD_REQUIRE_AUTH: ${DASHBOARD_REQUIRE_AUTH:-true} DASHBOARD_API_TOKEN: ${DASHBOARD_API_TOKEN:-} DASHBOARD_USERS: ${DASHBOARD_USERS:-} DASHBOARD_ADMIN_USERS: ${DASHBOARD_ADMIN_USERS:-} DASHBOARD_SESSION_TTL_SEC: ${DASHBOARD_SESSION_TTL_SEC:-604800} DASHBOARD_ALLOW_MEMORY_FALLBACK: ${DASHBOARD_ALLOW_MEMORY_FALLBACK:-false} DASHBOARD_DB_SCHEMA: ${DASHBOARD_DB_SCHEMA:-playground} DASHBOARD_PROJECT_KEY: ${DASHBOARD_PROJECT_KEY:-air-watcher} MYSQL_URL: ${MYSQL_URL:-} MYSQL_HOST: ${MYSQL_HOST:-} MYSQL_PORT: ${MYSQL_PORT:-3306} MYSQL_USER: ${MYSQL_USER:-} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-} MYSQL_DATABASE: ${MYSQL_DATABASE:-} OPENAI_API_KEY: ${OPENAI_API_KEY:-} OPENAI_MODEL: ${OPENAI_MODEL:-gpt-4.1-mini} LLM_REQUEST_TIMEOUT_MS: ${LLM_REQUEST_TIMEOUT_MS:-20000} CRAWLER_ENDPOINT: ${CRAWLER_ENDPOINT:-} CRAWLER_PROVIDERS: ${CRAWLER_PROVIDERS:-} CRAWLER_ENDPOINT_SKYSCANNER: ${CRAWLER_ENDPOINT_SKYSCANNER:-} CRAWLER_ENDPOINT_NAVER: ${CRAWLER_ENDPOINT_NAVER:-} CRAWLER_ENDPOINT_GOOGLE: ${CRAWLER_ENDPOINT_GOOGLE:-} CRAWLER_ROUTING_STRATEGY: ${CRAWLER_ROUTING_STRATEGY:-priorityFallback} CRAWLER_REQUEST_TIMEOUT_MS: ${CRAWLER_REQUEST_TIMEOUT_MS:-15000} CRAWLER_MAX_ATTEMPTS: ${CRAWLER_MAX_ATTEMPTS:-2} CRAWLER_RETRY_BASE_DELAY_MS: ${CRAWLER_RETRY_BASE_DELAY_MS:-300} CRAWLER_RETRY_MAX_DELAY_MS: ${CRAWLER_RETRY_MAX_DELAY_MS:-3000} NOTIFY_CHANNEL: ${NOTIFY_CHANNEL:-console} TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-} TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-} TELEGRAM_API_BASE: ${TELEGRAM_API_BASE:-https://api.telegram.org} NOTIFY_WEBHOOK_URL: ${NOTIFY_WEBHOOK_URL:-}