services: eduplus-web: build: . container_name: eduplus-web init: true ports: - "${PORT:-8000}:8000" environment: HOST: 0.0.0.0 PORT: 8000 EDUPLUS_ENABLE_LOCAL_OUTPUT: ${EDUPLUS_ENABLE_LOCAL_OUTPUT:-false} EDUPLUS_AUTO_DELETE_PUBLIC_DOWNLOADS: ${EDUPLUS_AUTO_DELETE_PUBLIC_DOWNLOADS:-true} EDUPLUS_PUBLIC_JOB_TTL_SECONDS: ${EDUPLUS_PUBLIC_JOB_TTL_SECONDS:-1800} EDUPLUS_CLEANUP_INTERVAL_SECONDS: ${EDUPLUS_CLEANUP_INTERVAL_SECONDS:-60} EDUPLUS_PUBLIC_OUTPUT_ROOT: ${EDUPLUS_PUBLIC_OUTPUT_ROOT:-downloads/web-jobs} EDUPLUS_BUNDLE_ROOT: ${EDUPLUS_BUNDLE_ROOT:-downloads/web-bundles} EDUPLUS_LOCAL_OUTPUT_ROOT: ${EDUPLUS_LOCAL_OUTPUT_ROOT:-downloads} EDUPLUS_STATUS_TOKEN: ${EDUPLUS_STATUS_TOKEN:-} EDUPLUS_STATUS_SCAN_INTERVAL_SECONDS: ${EDUPLUS_STATUS_SCAN_INTERVAL_SECONDS:-600} EDUPLUS_STATUS_DB: ${EDUPLUS_STATUS_DB:-downloads/status/status.sqlite3} EDUPLUS_SESSION: ${EDUPLUS_SESSION:-} volumes: - ./downloads:/app/downloads healthcheck: test: ["CMD", "python", "-c", "import os, sys, urllib.request; port=os.getenv('PORT', '8000'); urllib.request.urlopen(f'http://127.0.0.1:{port}/api/health', timeout=3); sys.exit(0)"] interval: 30s timeout: 5s retries: 3 start_period: 10s restart: unless-stopped eduplus-telegram: build: . container_name: eduplus-telegram init: true profiles: ["telegram"] command: ["python", "-m", "eduplus_tools.notify"] environment: EDUPLUS_STATUS_URL: http://eduplus-web:8000 EDUPLUS_STATUS_TOKEN: ${EDUPLUS_STATUS_TOKEN:-} TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-} TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-} TELEGRAM_REMINDER_HOURS: ${TELEGRAM_REMINDER_HOURS:-24,3} TELEGRAM_STATE_FILE: downloads/status/telegram-state.json volumes: - ./downloads:/app/downloads depends_on: - eduplus-web healthcheck: disable: true restart: unless-stopped