version: '3.8' services: # RAG 应用服务(开发模式) app: container_name: rag-system-app-dev build: context: .. dockerfile: docker/Dockerfile target: development # 使用开发环境镜像 restart: unless-stopped ports: - "8000:8000" volumes: - ../.env:/app/.env:ro # 只读挂载环境变量 - ../src:/app/src # 挂载源码以支持热重载 - ../tests:/app/tests # 挂载测试代码 - ../logs:/app/logs # 日志目录 environment: - TZ=Asia/Shanghai - DEBUG=true - LOG_LEVEL=DEBUG - 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 command: uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload # PostgreSQL 数据库 postgres: image: postgres:15-alpine container_name: rag-system-postgres-dev restart: unless-stopped ports: - "5432:5432" environment: - POSTGRES_DB=rag_system_dev - POSTGRES_USER=rag_user - POSTGRES_PASSWORD=rag_password - TZ=Asia/Shanghai volumes: - postgres-dev-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_dev"] interval: 10s timeout: 5s retries: 5 # Infinity 向量数据库 infinity: image: infiniflow/infinity:latest container_name: rag-system-infinity-dev restart: unless-stopped ports: - "23817:23817" volumes: - infinity-dev-data:/var/infinity/data environment: - TZ=Asia/Shanghai networks: - rag-network # Redis 缓存 redis: image: redis:7-alpine container_name: rag-system-redis-dev restart: unless-stopped ports: - "6379:6379" volumes: - redis-dev-data:/data command: redis-server --appendonly yes networks: - rag-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # pgAdmin(数据库管理工具) pgadmin: image: dpage/pgadmin4:latest container_name: rag-system-pgadmin restart: unless-stopped ports: - "5050:80" environment: - PGADMIN_DEFAULT_EMAIL=admin@example.com - PGADMIN_DEFAULT_PASSWORD=admin - TZ=Asia/Shanghai volumes: - pgadmin-data:/var/lib/pgadmin networks: - rag-network depends_on: - postgres volumes: postgres-dev-data: driver: local infinity-dev-data: driver: local redis-dev-data: driver: local pgadmin-data: driver: local networks: rag-network: driver: bridge