x-app-environment: &app-environment BOT_TOKEN: ${BOT_TOKEN:-replace-me} ADMIN_TELEGRAM_ID: ${ADMIN_TELEGRAM_ID:-0} DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://tca:tca_secret@postgres:5432/telegram_cursor_agent} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} CURSOR_CLI_PATH: ${CURSOR_CLI_PATH:-cursor-agent} TASK_TIMEOUT: ${TASK_TIMEOUT:-3600} PROJECTS_ROOT: ${PROJECTS_ROOT:-/workspace} PROJECT_SEARCH_ROOTS: ${PROJECT_SEARCH_ROOTS:-/workspace} ALLOWED_PROJECT_ROOTS: ${ALLOWED_PROJECT_ROOTS:-/workspace} UPLOAD_STORAGE_PATH: /data/uploads UPLOAD_HOST_PATH: /root/telegram-cursor-agent/data/uploads LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_JSON: ${LOG_JSON:-false} APP_ENV: ${APP_ENV:-production} CURSOR_AUTH_FILE: ${CURSOR_AUTH_FILE:-/root/.config/cursor/auth.json} CURSOR_MCP_CONFIG_PATH: ${CURSOR_MCP_CONFIG_PATH:-/root/.cursor/mcp.json} CURSOR_APPROVE_MCPS: ${CURSOR_APPROVE_MCPS:-true} MCP_SETUP_TTL_SECONDS: ${MCP_SETUP_TTL_SECONDS:-3600} SANDBOX_OPEN: ${SANDBOX_OPEN:-false} SELF_DEPLOY_ENABLED: ${SELF_DEPLOY_ENABLED:-false} SELF_REPO_ROOT: ${SELF_REPO_ROOT:-/root/telegram-cursor-agent} AGENT_WORKSPACE: ${AGENT_WORKSPACE:-} DEPLOY_SCRIPT: ${DEPLOY_SCRIPT:-/root/telegram-cursor-agent/scripts/deploy-self.sh} WORKER_SERVICE_NAME: ${WORKER_SERVICE_NAME:-telegram-cursor-agent-worker} BOT_COMPOSE_SERVICE: ${BOT_COMPOSE_SERVICE:-bot} services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: tca POSTGRES_PASSWORD: tca_secret POSTGRES_DB: telegram_cursor_agent volumes: - postgres_data:/var/lib/postgresql/data ports: - "127.0.0.1:5433:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U tca -d telegram_cursor_agent"] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine ports: - "127.0.0.1:6380:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 migrate: build: . command: alembic upgrade head environment: <<: *app-environment DATABASE_URL: postgresql+asyncpg://tca:tca_secret@postgres:5432/telegram_cursor_agent REDIS_URL: redis://redis:6379/0 depends_on: postgres: condition: service_healthy restart: "no" bot: build: . command: telegram-cursor-agent environment: <<: *app-environment PROJECTS_ROOT: /workspace PROJECT_SEARCH_ROOTS: /workspace ALLOWED_PROJECT_ROOTS: /workspace SELF_REPO_ROOT: /host-self-repo DATABASE_URL: postgresql+asyncpg://tca:tca_secret@postgres:5432/telegram_cursor_agent REDIS_URL: redis://redis:6379/0 depends_on: postgres: condition: service_healthy redis: condition: service_healthy migrate: condition: service_completed_successfully volumes: - ./workspace:/workspace - ./src:/app/src - ${SELF_REPO_ROOT:-/root/telegram-cursor-agent}:/host-self-repo - ./data/uploads:/data/uploads - ${CURSOR_AUTH_FILE:-/root/.config/cursor/auth.json}:/root/.config/cursor/auth.json:ro - /root/.cursor:/root/.cursor - /root/.local:/root/.local:ro - /root/.cursor-accounts:/root/.cursor-accounts restart: unless-stopped worker: profiles: ["container-worker"] build: . command: telegram-cursor-worker environment: <<: *app-environment DATABASE_URL: postgresql+asyncpg://tca:tca_secret@postgres:5432/telegram_cursor_agent REDIS_URL: redis://redis:6379/0 depends_on: postgres: condition: service_healthy redis: condition: service_healthy migrate: condition: service_completed_successfully volumes: - ./workspace:/workspace - ./data/uploads:/data/uploads restart: unless-stopped volumes: postgres_data: