name: gig-poc services: postgres: image: docker.m.daocloud.io/library/postgres:16-alpine environment: POSTGRES_DB: gig_poc POSTGRES_USER: gig POSTGRES_PASSWORD: gig TZ: Asia/Shanghai volumes: - postgres_data:/var/lib/postgresql/data - ./sql:/docker-entrypoint-initdb.d healthcheck: test: ["CMD-SHELL", "pg_isready -U gig -d gig_poc"] interval: 10s timeout: 5s retries: 10 ports: - "5432:5432" qdrant: image: docker.m.daocloud.io/qdrant/qdrant:v1.14.1 volumes: - qdrant_data:/qdrant/storage ports: - "6333:6333" redis: image: docker.m.daocloud.io/library/redis:7-alpine command: ["redis-server", "--appendonly", "yes"] volumes: - redis_data:/data ports: - "6379:6379" api: build: context: .. dockerfile: apps/api/Dockerfile environment: APP_ENV: docker DATABASE_URL: postgresql+psycopg://gig:gig@postgres:5432/gig_poc QDRANT_URL: http://qdrant:6333 LOG_LEVEL: INFO LLM_ENABLED: "false" CACHE_BACKEND: "redis" REDIS_URL: redis://redis:6379/0 INGEST_ASYNC_ENABLED: "true" MATCH_ASYNC_ENABLED: "true" MATCH_CACHE_ENABLED: "true" MATCH_CACHE_TTL_SECONDS: "30" QUERY_CACHE_ENABLED: "true" QUERY_CACHE_TTL_SECONDS: "20" APP_RATE_LIMIT_PER_MINUTE: "1200" APP_CIRCUIT_BREAKER_ERROR_RATE: "0.5" APP_CIRCUIT_BREAKER_MIN_REQUESTS: "50" APP_CIRCUIT_BREAKER_WINDOW_SECONDS: "60" APP_CIRCUIT_BREAKER_COOLDOWN_SECONDS: "30" DATABASE_POOL_SIZE: "20" DATABASE_MAX_OVERFLOW: "30" DATABASE_POOL_TIMEOUT: "30" depends_on: postgres: condition: service_healthy qdrant: condition: service_started redis: condition: service_started ports: - "8000:8000" web: build: context: .. dockerfile: apps/web/Dockerfile depends_on: api: condition: service_started ports: - "5173:80" volumes: postgres_data: qdrant_data: redis_data: