应用服务部署说明
本文基于当前知识库的实际代码结构编写,适用于将项目部署到腾讯云 Linux 服务器。
- 当前业务主链路默认使用的是外部 API,而不是本机加载大模型
- 导入链路依赖:
MinerU API、DashScope/OpenAI 兼容 LLM、DashScope Embedding、Milvus、Neo4j、MinIO - 查询链路依赖:
DashScope/OpenAI 兼容 LLM、DashScope Embedding、DashScope Rerank、Milvus、Neo4j、MongoDB
这意味着:
- 当前业务机不强依赖 GPU
- 只要服务器能够访问
DashScope、MinerU等外部服务,就可以先把导入服务和查询服务部署起来 - 向量库、图数据库、对象存储、会话库建议通过
Docker Compose统一编排
1. 整体部署流程
建议按照下面的顺序部署:
- 在本地整理代码,确保仓库已经推送到
Gitee - 购买腾讯云服务器,推荐
Ubuntu 22.04 - 在服务器上安装
git、docker、docker compose - 从
Gitee拉取项目代码到服务器 - 编写生产环境配置文件,例如
.env.prod - 基于当前项目编写导入服务和查询服务的镜像构建文件
- 编写
docker-compose.yml,统一编排:kb-importkb-querymilvusmongodbneo4jminio
- 先启动基础中间件,再启动业务服务
- 通过接口和容器日志做健康检查
- 后续通过
docker compose up/down/restart/logs维护服务
推荐的部署目录:
推荐的目录结构:
版本与安装方式建议如下。
1.1 中间件安装方式和版本
结合你提供的参考文档,建议如下:
Milvus:使用Docker Compose安装Milvus版本:milvusdb/milvus:v2.4.0etcd版本:quay.io/coreos/etcd:v3.5.0MinIO版本:minio/minio:RELEASE.2023-03-20T20-16-18ZMongoDB:使用Docker安装MongoDB参考版本:参考文档是mongo:latest,生产环境更建议固定到mongo:7.0Neo4j:使用Docker安装Neo4j版本:neo4j:5.15.0-community
1.2 端口建议
建议区分“公网开放端口”和“仅内网使用端口”。
公网建议只开放:
22:SSH8000:导入服务8001:查询服务
按需开放或仅限白名单开放:
7474:Neo4j Browser7687:Neo4j Bolt9001:MinIO Console
尽量不要直接暴露到公网:
27017:MongoDB19530:Milvus2379:etcd9000:MinIO API
2. 代码上传到 Gitee 上
如果本地代码还没有上传到 Gitee,可以按下面操作。
2.1 新建 Gitee 仓库
在 Gitee 上新建一个空仓库,例如:
2.2 将本地项目提交到远端
提交到本地仓库

push到远端
3. 购买腾讯云服务器并安装 Git、Docker
以下步骤以 Ubuntu 22.04 为例。
3.1 购买服务器建议
如果你保持当前代码方案不变,也就是继续调用外部 API,那么业务机可以先按下面规格选择:
2核4G或4核8G- 系统盘至少
50GB - 系统选
Ubuntu 22.04












注意要用公网地址远程登录到服务器其上用命令行操作

3.2 安装 Git
3.3 安装 Docker 和 Docker Compose
3.4 配置当前用户使用 Docker
3.5 镜像加速配置
进行镜像源的配置
添加下面的配置
保存,然后在终端重新启动一下docker
重新执行
3.6 从 Gitee 拉代码
4. 编写导入和查询服务的 Dockerfile
4.1 先说明当前项目最适合的做法
从当前工程结构来看:
- 导入服务和查询服务都属于 Python FastAPI 服务
- 二者的依赖几乎完全一致
- 主要区别只是启动入口不同
因此不建议维护两份完全重复的 Dockerfile,推荐保留一份公共 Dockerfile,然后在 docker compose 里通过不同的 command 区分导入服务和查询服务。
当前仓库已经有 deploy/Dockerfile,生产环境建议直接基于项目根目录的 requirements.txt 安装依赖,不再在 Dockerfile 里手写一长串 pip install 包列表。
4.2 推荐的公共 Dockerfile
可在项目中使用下面的内容作为 deploy/Dockerfile:
把这段代码上传到git 并执行更新

5. 编写 Docker Compose 脚本
5.1 生产环境组件
推荐把下面几个组件统一放进 docker-compose.yml:
kb-importkb-queryetcdminioMilvus(standalone)mongodbneo4j
5.2 docker-compose.yml
在deploy目录下增加docker-compose.yml
5.3 .env.prod
在deploy/下创建.env.prod 然后把 .env.prod 改成生产地址。
5.4 requirement依赖减少
6. 启停服务
6.1 首次启动
在项目根目录执行:
先确认基础中间件都正常:
确认无误后再启动业务服务:
6.2 为什么建议分两步启动
这是因为当前代码里 kb/utils/minio_utils.py 会在模块加载时初始化 MinIO 客户端。
如果 kb-import 启动时 MinIO 还没准备好,导入服务里的 minio_client 可能会一直是 None。因此生产上建议:
- 先启动
MinIO - 再启动
kb-import
如果你是一次性全部拉起后发现导入服务无法上传文件,可以直接重启导入服务:
6.3 查看运行状态
6.4 健康检查
查询服务提供了明确的健康检查接口:
导入服务当前没有单独的 /health 接口,可以先访问页面:
中间件可按下面检查:
Milvus 重点看容器状态和日志:
6.5 停止服务
仅停止容器,不删除:
停止并删除容器,但保留数据卷目录:
6.6 重启服务
全部重启:
只重启查询服务:
只重启导入服务:
6.7 重新构建并发布
代码更新后,在服务器执行:
如果你的分支是 main,则改成:
7 测试访问
7.1 开通安全组端口
用百度查询一下当前IP

在腾讯云的控制台中的【安全组】中添加规则

