services: db: image: pgvector/pgvector:0.8.6-pg16 environment: POSTGRES_USER: clouddesk POSTGRES_PASSWORD: local-development POSTGRES_DB: clouddesk volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U clouddesk -d clouddesk"] interval: 5s timeout: 3s retries: 10 api: build: . environment: &backend_environment DATABASE_URL: postgresql://clouddesk:local-development@db:5432/clouddesk APP_NAME: ${APP_NAME:-SupportFlow} APP_TAGLINE: ${APP_TAGLINE:-Customer support} SUPPORT_TEAM_NAME: ${SUPPORT_TEAM_NAME:-Support team} PRODUCT_NAME: ${PRODUCT_NAME:-Example Workspace} TICKET_PREFIX: ${TICKET_PREFIX:-TKT} BRAND_COLOR: ${BRAND_COLOR:-#265bb4} LOGO_URL: ${LOGO_URL:-} FAVICON_URL: ${FAVICON_URL:-/favicon.svg} LLM_API_KEY: ${LLM_API_KEY:-${OPENROUTER_API_KEY:-}} LLM_MODEL: ${LLM_MODEL:-${OPENROUTER_MODEL:-}} LLM_BASE_URL: ${LLM_BASE_URL:-https://openrouter.ai/api/v1} LLM_MAX_TOKENS: ${LLM_MAX_TOKENS:-2048} CLASSIFY_MIN: ${CLASSIFY_MIN:-0.70} AGENT_MIN: ${AGENT_MIN:-0.60} RETRIEVAL_MIN: ${RETRIEVAL_MIN:-0.45} AMOUNT_LIMIT_INR: ${AMOUNT_LIMIT_INR:-5000} DATA_DIR: /app/backend/data EMBEDDING_CACHE_DIR: /models volumes: - embedding_models:/models - ${DATA_DIR:-./backend/data}:/app/backend/data:ro depends_on: db: condition: service_healthy ports: - "127.0.0.1:${API_PORT:-5001}:5001" healthcheck: test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:5001/api/health')", ] interval: 10s timeout: 3s retries: 5 start_period: 120s worker: build: . command: ["python", "-m", "backend.worker"] environment: *backend_environment volumes: - embedding_models:/models - ${DATA_DIR:-./backend/data}:/app/backend/data:ro depends_on: api: condition: service_healthy frontend: build: context: . dockerfile: frontend/Dockerfile ports: - "127.0.0.1:${FRONTEND_PORT:-5173}:80" depends_on: api: condition: service_healthy volumes: postgres_data: embedding_models: