name: docker # 钉死 project 名:现有卷 docker_milvus_data/docker_milvus_etcd_data 以此为前缀,防目录改名孤儿化 services: milvus-etcd: image: quay.io/coreos/etcd:v3.5.5 container_name: deeprag-milvus-etcd restart: unless-stopped environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 command: etcd -advertise-client-urls http://milvus-etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd volumes: - milvus_etcd_data:/etcd healthcheck: test: ["CMD", "etcdctl", "endpoint", "health"] interval: 30s timeout: 20s retries: 3 milvus: image: milvusdb/milvus:v2.4.5 container_name: deeprag-milvus restart: unless-stopped command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: milvus-etcd:2379 COMMON_STORAGETYPE: local ports: - "19530:19530" # 保留宿主发布:原生 go run 调试与集成测试仍走 localhost:19530 - "9091:9091" volumes: - milvus_data:/var/lib/milvus depends_on: milvus-etcd: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] interval: 30s start_period: 90s timeout: 20s retries: 3 app: build: context: .. dockerfile: docker/Dockerfile # 构建信息由调用方注入,缺省退化为占位值(构建照常成功,healthz 显示 dev/unknown): # COMMIT=$(git rev-parse --short HEAD) BUILT_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ) docker compose build app # 与上方密钥的 :? 必填插值不同,此处用 :- 缺省——构建信息缺失不该阻断构建。 args: COMMIT: ${COMMIT:-dev} BUILT_AT: ${BUILT_AT:-unknown} container_name: pythia-server restart: unless-stopped environment: TZ: Asia/Shanghai # README §部署 强制:按日期的 QAOps 计算(review/归档/保留期)依赖进程本地时区 MILVUS_HOST: milvus ADMIN_ADDR: 0.0.0.0:8081 # 密钥一律 :? 必填插值:.env 缺键/留空时 up 直接报名字快败,而非空串起容器进重启循环 ADMIN_TOKEN: ${ADMIN_TOKEN:?缺 docker/.env,见 docs/deploy.md 前置} EMBEDDING_API_KEY: ${SILICONFLOW_API_KEY:?缺 docker/.env,见 docs/deploy.md 前置} RERANKER_API_KEY: ${SILICONFLOW_API_KEY:?缺 docker/.env,见 docs/deploy.md 前置} LLM_API_KEY: ${IKUNCODE_API_KEY:?缺 docker/.env,见 docs/deploy.md 前置} VISION_API_KEY: ${IKUNCODE_API_KEY:?缺 docker/.env,见 docs/deploy.md 前置} FEISHU_APP_ID: ${FEISHU_APP_ID:?缺 docker/.env,见 docs/deploy.md 前置} FEISHU_APP_SECRET: ${FEISHU_APP_SECRET:?缺 docker/.env,见 docs/deploy.md 前置} # 代码检索凭证(任务 07-31-gitlab-code-rag R5.1)。用 :- 缺省而非 :? 必填: # codeSearch.enabled 缺省 false,没配它的部署照常起;缺失时 buildCodeSearcher 退回 NoOp 并 warn。 # 不透传这一条的后果是 enabled=true 也永远读不到 token —— 容器里 os.Getenv 返回空。 GITLAB_TOKEN: ${GITLAB_TOKEN:-} ports: - "127.0.0.1:8081:8081" # 仅宿主回环,暴露面与原生形态一致;容器侧端口须与上方 ADMIN_ADDR 的端口一致 volumes: # 长语法 + create_host_path:false:宿主缺 server.yml 时快败报错, # 而非被短语法自动建成【目录】导致容器 EISDIR 重启循环 + 宿主留垃圾目录 - type: bind source: ../config/server.yml target: /app/config/server.yml read_only: true bind: create_host_path: false - ../data:/app/data depends_on: milvus: condition: service_healthy volumes: milvus_etcd_data: name: docker_milvus_etcd_data # 显式钉死卷身份:数据不再依赖顶层 project 名,改名不再有丢卷陷阱 milvus_data: name: docker_milvus_data