version: '3.8' networks: rag_net: name: rag_net driver: bridge services: # 业务MySQL 存储文档元数据、问答日志 mysql: image: mysql:8.4 container_name: rag-mysql environment: - MYSQL_ROOT_PASSWORD=root1234 - TZ=Asia/Shanghai - MYSQL_ROOT_HOST=% - MYSQL_DATABASE=rag_kb ports: - "3306:3306" privileged: true volumes: - /opt/rag/mysql/conf:/etc/mysql/conf.d - /opt/rag/mysql/data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot1234"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: - rag_net restart: always deploy: resources: limits: cpus: "0.8" memory: 768M reservations: cpus: "0.4" memory: 384M # Redis 缓存问答上下文、文件临时数据 redis: image: redis:latest container_name: rag-redis ports: - "6379:6379" privileged: true volumes: - /opt/rag/redis/conf/redis.conf:/usr/local/etc/redis.conf:ro - /opt/rag/redis/data:/data command: redis-server /usr/local/etc/redis.conf healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 start_period: 10s networks: - rag_net restart: always deploy: resources: limits: cpus: "0.3" memory: 256M reservations: cpus: "0.1" memory: 128M # MinIO 对象存储(Milvus 依赖) minio: image: minio/minio:latest container_name: rag-minio ports: - "9000:9000" # S3 API 端口 - "9001:9001" # Web 控制台端口 environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - /opt/rag/minio/data:/data command: server /data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 10s retries: 3 networks: - rag_net restart: always deploy: resources: limits: cpus: "0.5" memory: 512M reservations: cpus: "0.2" memory: 256M # Milvus 向量库(现在连接 MinIO) milvus-standalone: image: milvusdb/milvus:v2.4.6 container_name: rag-milvus command: ["milvus", "run", "standalone"] ports: - "19530:19530" - "9091:9091" volumes: - /opt/rag/milvus/data:/var/lib/milvus environment: TZ: Asia/Shanghai ETCD_USE_EMBED: "true" # 使用 MinIO 作为对象存储(不再使用 local) MINIO_ADDRESS: minio:9000 MINIO_ACCESS_KEY_ID: minioadmin MINIO_SECRET_ACCESS_KEY: minioadmin MINIO_USE_SSL: "false" MINIO_BUCKET_NAME: "a-bucket" # 与日志中一致,也可自定义 # 可选:如果希望 Milvus 自动创建 bucket,可以添加 # MINIO_CREATE_BUCKET: "true" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 20s timeout: 10s retries: 3 start_period: 90s networks: - rag_net restart: always deploy: resources: limits: cpus: "1.2" memory: 2G reservations: cpus: "0.6" memory: 1G # Gogs 本地代码仓库,存放填空脚手架 gogs: image: gogs/gogs:latest container_name: rag-gogs ports: - "3000:3000" - "2222:22" volumes: - /opt/rag/gogs:/data command: sh -c "apk add --no-cache curl && /app/gogs/docker/start.sh" privileged: true healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/"] interval: 10s timeout: 5s retries: 3 networks: - rag_net restart: always deploy: resources: limits: cpus: "0.4" memory: 512M reservations: cpus: "0.2" memory: 256M # 自定义Jenkins镜像 my-jenkins:with-plugins jenkins: image: my-jenkins:with-plugins container_name: rag-jenkins ports: - "8899:8080" - "50000:50000" environment: - JAVA_OPTS=-Xms512m -Xmx1024m volumes: - /opt/rag/jenkins/home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /opt/docker-compose:/usr/bin/docker-compose - /opt/docker-compose.yaml:/opt/docker-compose.yaml privileged: true group_add: - "983" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/login"] interval: 10s timeout: 10s retries: 3 networks: - rag_net restart: always deploy: resources: limits: cpus: "1.0" memory: 2G reservations: cpus: "0.5" memory: 1G # Nginx 前端/接口转发 nginx: image: nginx container_name: rag-nginx ports: - "80:80" volumes: - /opt/rag/nginx/conf.d:/etc/nginx/conf.d:ro - /opt/rag/nginx/html:/usr/share/nginx/html - /opt/rag/nginx/logs:/var/log/nginx healthcheck: test: ["CMD", "nginx", "-t"] interval: 10s timeout: 5s retries: 3 networks: - rag_net restart: always deploy: resources: limits: cpus: "0.3" memory: 128M reservations: cpus: "0.1" memory: 64M # rag-kb-backend 服务 rag-kb-backend: image: rag-kb-backend:latest container_name: rag-kb-backend ports: - "8080:8080" networks: - rag_net restart: always