version: '3.8' services: # RAG 应用服务 app: container_name: rag-system-app build: context: .. dockerfile: docker/Dockerfile target: production # 使用生产环境镜像 restart: unless-stopped ports: - "8000:8000" volumes: - ../.env:/app/.env:ro # 只读挂载环境变量 - ../logs:/app/logs # 日志目录 environment: - TZ=Asia/Shanghai - DB_HOST=postgres - INFINITY_HOST=infinity - REDIS_HOST=redis depends_on: postgres: condition: service_healthy infinity: condition: service_started redis: condition: service_healthy networks: - rag-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # PostgreSQL 数据库 postgres: image: postgres:15-alpine container_name: rag-system-postgres restart: unless-stopped ports: - "5432:5432" environment: - POSTGRES_DB=rag_system - POSTGRES_USER=rag_user - POSTGRES_PASSWORD=rag_password - TZ=Asia/Shanghai volumes: - postgres-data:/var/lib/postgresql/data - ../doc/sql:/docker-entrypoint-initdb.d:ro # 初始化脚本 networks: - rag-network healthcheck: test: ["CMD-SHELL", "pg_isready -U rag_user -d rag_system"] interval: 10s timeout: 5s retries: 5 # Infinity 向量数据库 infinity: image: infiniflow/infinity:latest container_name: rag-system-infinity restart: unless-stopped ports: - "23817:23817" volumes: - infinity-data:/var/infinity/data environment: - TZ=Asia/Shanghai networks: - rag-network # Redis 缓存(可选) redis: image: redis:7-alpine container_name: rag-system-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis-data:/data command: redis-server --appendonly yes networks: - rag-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 volumes: postgres-data: driver: local infinity-data: driver: local redis-data: driver: local networks: rag-network: driver: bridge