Files
Airtep/gig-poc/infrastructure/docker-compose.prod.yml
2026-04-01 14:19:25 +08:00

80 lines
2.5 KiB
YAML

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: