services: db: image: pgvector/pgvector:pg17 environment: POSTGRES_USER: persona POSTGRES_PASSWORD: persona POSTGRES_DB: persona ports: ["55433:5432"] volumes: ["pgdata:/var/lib/postgresql/data"] healthcheck: test: ["CMD-SHELL", "pg_isready -U persona"] interval: 3s retries: 20 redis: image: redis:7-alpine ports: ["56379:6379"] healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 3s retries: 20 # 本地开发默认不起 app,用 make run 跑带 reload 的。 # 要整套起来:docker compose --profile full up -d app: profiles: ["full"] build: . ports: ["8000:8000"] environment: # key 只从宿主环境透传,不写进文件也不进镜像 LLM_API_KEY: ${LLM_API_KEY:-} LLM_BASE_URL: ${LLM_BASE_URL:-https://api.openai.com/v1} LOCAL_BASE_URL: ${LOCAL_BASE_URL:-} # 容器里走 service name,不是 localhost DB_URL: postgresql+psycopg://persona:persona@db:5432/persona REDIS_URL: redis://redis:6379/0 volumes: # MiniLM 和 cross-encoder 的权重。不挂的话每次重建都重新下 - models:/models depends_on: db: {condition: service_healthy} redis: {condition: service_healthy} worker: profiles: ["full"] build: . command: ["arq", "app.worker.WorkerSettings"] environment: LLM_API_KEY: ${LLM_API_KEY:-} LLM_BASE_URL: ${LLM_BASE_URL:-https://api.openai.com/v1} LOCAL_BASE_URL: ${LOCAL_BASE_URL:-} DB_URL: postgresql+psycopg://persona:persona@db:5432/persona REDIS_URL: redis://redis:6379/0 volumes: - models:/models depends_on: db: {condition: service_healthy} redis: {condition: service_healthy} volumes: pgdata: models: