name: gig-poc-prod services: postgres: image: docker.m.daocloud.io/library/postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-gig_poc} POSTGRES_USER: ${POSTGRES_USER:-gig} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-gig} TZ: Asia/Shanghai volumes: - postgres_prod_data:/var/lib/postgresql/data - ./sql:/docker-entrypoint-initdb.d qdrant: image: docker.m.daocloud.io/qdrant/qdrant:v1.14.1 restart: unless-stopped volumes: - qdrant_prod_data:/qdrant/storage redis: image: docker.m.daocloud.io/library/redis:7-alpine restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redis_prod_data:/data api: build: context: .. dockerfile: apps/api/Dockerfile restart: unless-stopped environment: APP_ENV: production DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-gig}:${POSTGRES_PASSWORD:-gig}@postgres:5432/${POSTGRES_DB:-gig_poc} QDRANT_URL: http://qdrant:6333 LOG_LEVEL: INFO LLM_ENABLED: ${LLM_ENABLED:-false} LLM_BASE_URL: ${LLM_BASE_URL:-} LLM_API_KEY: ${LLM_API_KEY:-} LLM_MODEL: ${LLM_MODEL:-gpt-5.4} CACHE_BACKEND: ${CACHE_BACKEND:-redis} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} INGEST_ASYNC_ENABLED: ${INGEST_ASYNC_ENABLED:-true} MATCH_ASYNC_ENABLED: ${MATCH_ASYNC_ENABLED:-true} MATCH_CACHE_ENABLED: ${MATCH_CACHE_ENABLED:-true} MATCH_CACHE_TTL_SECONDS: ${MATCH_CACHE_TTL_SECONDS:-30} QUERY_CACHE_ENABLED: ${QUERY_CACHE_ENABLED:-true} QUERY_CACHE_TTL_SECONDS: ${QUERY_CACHE_TTL_SECONDS:-20} APP_RATE_LIMIT_PER_MINUTE: ${APP_RATE_LIMIT_PER_MINUTE:-1200} APP_CIRCUIT_BREAKER_ERROR_RATE: ${APP_CIRCUIT_BREAKER_ERROR_RATE:-0.5} APP_CIRCUIT_BREAKER_MIN_REQUESTS: ${APP_CIRCUIT_BREAKER_MIN_REQUESTS:-50} APP_CIRCUIT_BREAKER_WINDOW_SECONDS: ${APP_CIRCUIT_BREAKER_WINDOW_SECONDS:-60} APP_CIRCUIT_BREAKER_COOLDOWN_SECONDS: ${APP_CIRCUIT_BREAKER_COOLDOWN_SECONDS:-30} DATABASE_POOL_SIZE: ${DATABASE_POOL_SIZE:-20} DATABASE_MAX_OVERFLOW: ${DATABASE_MAX_OVERFLOW:-30} DATABASE_POOL_TIMEOUT: ${DATABASE_POOL_TIMEOUT:-30} depends_on: - postgres - qdrant - redis ports: - "${API_PORT:-8000}:8000" web: build: context: .. dockerfile: apps/web/Dockerfile restart: unless-stopped depends_on: - api ports: - "${WEB_PORT:-80}:80" volumes: postgres_prod_data: qdrant_prod_data: redis_prod_data: