x-polyweather-base: &polyweather-base build: . image: polyweather-app:latest env_file: - .env services: polyweather: <<: *polyweather-base container_name: polyweather_bot restart: unless-stopped cpus: "${POLYWEATHER_BOT_CPUS:-0.75}" mem_limit: "${POLYWEATHER_BOT_MEM_LIMIT:-768m}" memswap_limit: "${POLYWEATHER_BOT_MEMSWAP_LIMIT:-1g}" pids_limit: 256 environment: TELEGRAM_AIRPORT_PUSH_INTERVAL_SEC: "${POLYWEATHER_BOT_AIRPORT_PUSH_INTERVAL_SEC:-180}" TELEGRAM_AIRPORT_PUSH_MAX_WORKERS: "${POLYWEATHER_BOT_AIRPORT_PUSH_MAX_WORKERS:-1}" volumes: - ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/var/lib/polyweather - ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/app/data - ./bot.log:/app/bot.log user: "${UID:-1000}:${GID:-1000}" healthcheck: test: ["CMD", "python", "-c", "import sqlite3; c=sqlite3.connect('/var/lib/polyweather/polyweather.db'); c.execute('SELECT 1'); c.close()"] interval: 60s timeout: 10s retries: 3 polyweather_web: <<: *polyweather-base container_name: polyweather_web restart: unless-stopped command: python web/app.py volumes: - ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/var/lib/polyweather - ${POLYWEATHER_RUNTIME_DATA_DIR:-/var/lib/polyweather}:/app/data ports: - "8000:8000" user: "${UID:-1000}:${GID:-1000}" healthcheck: test: ["CMD", "python", "-c", "from urllib.request import urlopen; urlopen('http://localhost:8000/healthz')"] interval: 30s timeout: 5s retries: 3 polyweather_frontend: build: context: ./frontend dockerfile: Dockerfile container_name: polyweather_frontend restart: unless-stopped ports: - "3001:3000" environment: POLYWEATHER_API_BASE_URL: "${POLYWEATHER_API_BASE_URL:-http://polyweather_web:8000}" NEXT_PUBLIC_POLYWEATHER_API_BASE_URL: "${NEXT_PUBLIC_POLYWEATHER_API_BASE_URL:-}" NEXT_PUBLIC_SUPABASE_URL: "${NEXT_PUBLIC_SUPABASE_URL}" NEXT_PUBLIC_SUPABASE_ANON_KEY: "${NEXT_PUBLIC_SUPABASE_ANON_KEY}" NEXT_PUBLIC_SITE_URL: "${NEXT_PUBLIC_SITE_URL:-https://polyweather.top}" POLYWEATHER_AUTH_ENABLED: "${POLYWEATHER_AUTH_ENABLED:-true}" POLYWEATHER_AUTH_REQUIRED: "${POLYWEATHER_AUTH_REQUIRED:-true}" NEXT_PUBLIC_POLYWEATHER_LOCAL_FULL_ACCESS: "false" healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3000"] interval: 30s timeout: 5s retries: 3