services: app: build: . command: uvicorn app.main:app --host 0.0.0.0 --port 8000 ports: - "8000:8000" volumes: - data:/data env_file: .env environment: - DATA_DIR=/data healthcheck: test: ["CMD", "python", "-c", "import httpx; r=httpx.get('http://localhost:8000/api/health'); exit(0 if r.status_code==200 else 1)"] interval: 30s timeout: 5s retries: 3 # 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 env_file: .env environment: - DATA_DIR=/data profiles: - extract scheduler: build: . command: python -m services.scheduler volumes: - data:/data 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 volumes: data: