services: app: build: . command: uvicorn app.main:app --host 0.0.0.0 --port 8000 ports: - "8000:8000" volumes: - data:/data - ./config:/app/config:ro env_file: .env environment: - DATA_DIR=/data healthcheck: test: ["CMD", "curl", "-sf", "http://localhost:8000/api/health"] interval: 30s timeout: 5s retries: 3 restart: unless-stopped # One-shot: run extractor then rebuild orchestrator views extract: build: . command: > sh -c "python -m connectors.keboola.extractor && python -c 'from src.orchestrator import SyncOrchestrator; print(SyncOrchestrator().rebuild())'" volumes: - data:/data - ./config:/app/config:ro env_file: .env environment: - DATA_DIR=/data profiles: - extract scheduler: build: . command: python -m services.scheduler volumes: - data:/data - ./config:/app/config:ro env_file: .env environment: - DATA_DIR=/data - API_URL=http://app:8000 - SEED_ADMIN_EMAIL=${SEED_ADMIN_EMAIL:-} depends_on: app: condition: service_healthy restart: unless-stopped telegram-bot: build: . command: python -m services.telegram_bot volumes: - data:/data env_file: .env environment: - DATA_DIR=/data depends_on: - app profiles: - full restart: unless-stopped ws-gateway: build: . command: python -m services.ws_gateway volumes: - data:/data env_file: .env environment: - DATA_DIR=/data depends_on: - app profiles: - full restart: unless-stopped corporate-memory: build: . command: python -m services.corporate_memory volumes: - data:/data env_file: .env environment: - DATA_DIR=/data depends_on: - app profiles: - full restart: unless-stopped session-collector: build: . command: python -m services.session_collector volumes: - data:/data env_file: .env environment: - DATA_DIR=/data depends_on: - app profiles: - full restart: unless-stopped caddy: image: caddy:2-alpine ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config environment: - DOMAIN=${DOMAIN:-localhost} depends_on: app: condition: service_healthy restart: unless-stopped profiles: - production volumes: data: caddy_data: caddy_config: