2026/9/13 6:23:05

DB-GPT Docker Compose 部署实战:基于 MySQL 的持久化生产环境搭建与集群编排

DB-GPT Docker Compose 部署实战:基于 MySQL 的持久化生产环境搭建与集群编排 DB-GPT Docker Compose 部署实战基于 MySQL 的持久化生产环境搭建与集群编排【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT本篇指南基于 DB-GPT 仓库中的官方文档与配套编排文件系统讲解如何使用 Docker Compose 一键部署DB-GPT 应用服务 MySQL 元数据库的生产就绪环境。读完本文你将掌握完整的三步部署流程、各服务与数据卷的职责划分、API Key 与 TOML 配置的注入机制、常用运维操作日志/重启/重置以及如何切换到自定义配置、挂载本地模型与 GPU 预留并可进一步扩展到多 Worker 集群、高可用集群与 OceanBase 后端等场景。一、前置条件部署前请确认环境中已具备已安装 Docker 与 Docker Compose一个受支持 LLM 服务商的 API Key根目录默认编排文件以 SiliconFlow 为默认 LLM 提供方仓库同时提供 AI/ML API 的备选配置入口。二、三步快速开始仓库根目录的 docker-compose.yml 定义了默认部署形态DB-GPT 应用服务WebServer MySQL 数据库默认使用 SiliconFlow 作为 LLM 提供方。Step 1 — 设置 API KeySiliconFlow默认export SILICONFLOW_API_KEYyour-siliconflow-api-keyAI/ML APIexport AIMLAPI_API_KEYyour-aiml-api-keyStep 2 — 启动服务# SiliconFlow SILICONFLOW_API_KEY${SILICONFLOW_API_KEY} docker compose up -d # 或使用 AI/ML API AIMLAPI_API_KEY${AIMLAPI_API_KEY} docker compose up -d启动成功的终端输出大致如下[] Running 3/3 ✔ Network dbgptnet Created 0.0s ✔ Container db-gpt-db-1 Started 0.2s ✔ Container db-gpt-webserver-1 Started 0.2sStep 3 — 打开 Web UI浏览器访问http://localhost:5670。首次启动注意事项WebServer 会等待 MySQL 完成初始化执行全部初始化 SQL后才真正就绪。若首次启动时 WebServer 因数据库尚未就绪而退出restart: unless-stopped策略会自动拉起通常重试后即可正常。可用docker logs db-gpt-webserver-1 -f跟踪日志确认状态。三、部署了哪些东西编排文件的源码级解读默认docker-compose.yml创建两个核心服务Service镜像端口用途dbmysql/mysql-server3306存放元数据的 MySQL 数据库webservereosphorosai/dbgpt-openai:latest5670DB-GPT 应用服务器结合 docker-compose.yml 的实际内容可以进一步拆解这套编排的关键设计3.1 MySQL 服务的数据初始化链路db服务挂载了四组关键内容dbgpt-myql-db:/var/lib/mysql—— 命名卷保证数据库文件在容器重建后仍然持久化./docker/examples/my.cnf:/etc/my.cnf—— MySQL 配置文件./docker/examples/sqls:/docker-entrypoint-initdb.d—— 官方示例数据集的建表/灌数脚本目录./assets/schema/dbgpt.sql:/docker-entrypoint-initdb.d/dbgpt.sql—— DB-GPT 自身的表结构定义。利用 MySQL 镜像的/docker-entrypoint-initdb.d初始化机制首次启动数据库时会自动建库建表并导入示例数据这也是文档中WebServer 需等待 MySQL 初始化完成这一提示的根源。配套的 my.cnf 中有几处对应用兼容性很关键的设置default-authentication-pluginmysql_native_password character_set_serverutf8mb4 collation-serverutf8mb4_unicode_ci init_connectSET NAMES utf8mb4mysql_native_password认证插件是为了兼容较老的 MySQL 客户端驱动utf8mb4全套字符集配置则保证中文等 Unicode 数据在元数据库中正确存储。3.2 WebServer 服务配置注入与数据持久化webserver服务的核心配置为webserver: image: eosphorosai/dbgpt-openai:latest command: dbgpt start webserver --config /app/configs/dbgpt-proxy-siliconflow-mysql.toml environment: - SILICONFLOW_API_KEY${SILICONFLOW_API_KEY} - MYSQL_PASSWORDaa123456 - MYSQL_HOSTdb - MYSQL_PORT3306 - MYSQL_DATABASEdbgpt - MYSQL_USERroot volumes: - ./configs:/app/configs - /data:/data - /data/models:/app/models - dbgpt-data:/app/pilot/data - dbgpt-message:/app/pilot/message depends_on: - db ports: - 5670:5670/tcp restart: unless-stopped ipc: host几个值得关注的点dbgpt start webserver --config这是 DB-GPT 的官方 CLI 启动入口。从源码 packages/dbgpt-app/src/dbgpt_app/_cli.py#L99-L169 可以看到webserver命令接受可选的--configTOML 配置文件路径、--profileprovider 配置档、--yes跳过交互式向导、--api-key、--daemon等参数未提供--config时会走~/.dbgpt/下的 profile 或首次配置向导流程。Compose 文件显式传入了--config /app/configs/dbgpt-proxy-siliconflow-mysql.toml从而绕开交互式向导适合容器场景。环境变量占位符机制默认配置 configs/dbgpt-proxy-siliconflow-mysql.toml 大量使用${env:VAR:-default}语法从环境变量取值例如数据库连接段[service.web.database] type mysql host ${env:MYSQL_HOST:-127.0.0.1} port ${env:MYSQL_PORT:-3306} database ${env:MYSQL_DATABASE:-dbgpt} user ${env:MYSQL_USER:-root} password ${env:MYSQL_PASSWORD:-aa123456}这解释了为什么 Compose 里只需注入MYSQL_*环境变量与SILICONFLOW_API_KEY而不需要改配置文件——TOML 中未设置的项都会落到默认值如MYSQL_HOST默认127.0.0.1而在 Compose 网络中被显式覆盖为服务名db。默认模型配置同一 TOML 中通过proxy/siliconflowprovider 声明了三类远端模型[[models.llms]] name Qwen/Qwen2.5-Coder-32B-Instruct provider proxy/siliconflow api_key ${env:SILICONFLOW_API_KEY} [[models.embeddings]] name BAAI/bge-m3 provider proxy/siliconflow [[models.rerankers]] name BAAI/bge-reranker-v2-m3 provider proxy/siliconflow即 LLM、Embedding、Rerank 全部走 API 代理容器内不需要 GPU 也能跑通完整问答与 RAG 流程。此外[rag.storage.vector]使用chroma并持久化到pilot/data对应dbgpt-data卷。数据卷持久化dbgpt-data:/app/pilot/data与dbgpt-message:/app/pilot/message分别持久化知识库数据与会话消息保证docker compose down后数据不丢./configs:/app/configs则把宿主机configs/目录整体映射进容器方便直接替换配置文件见下文定制章节。restart: unless-stopped与depends_ondepends_on只保证启动顺序不保证就绪因此配合自动重启策略来兜底MySQL 初始化慢于 WebServer 启动这一常见时序问题。ipc: host共享宿主机 IPC 命名空间为容器内模型加载/共享内存留出余量对远端 API 场景影响不大对本地模型场景有意义。另外可以注意到官方基础镜像 docker/base/Dockerfile#L126 的默认CMD是dbgpt start webserver --config configs/dbgpt-proxy-siliconflow.tomlSQLite 元数据库版本而根目录 Compose 文件通过显式command将其切换为 MySQL 版本——这也是理解镜像默认行为与Compose 实际行为差异的关键。四、常用运维操作# 查看 WebServer 日志 docker logs db-gpt-webserver-1 -f # 查看数据库日志 docker logs db-gpt-db-1 -f # 停止服务保留数据卷 docker compose down # 重启服务 docker compose restart # 彻底重置连同数据一起删除 docker compose down -v警告-v参数会删除所有命名卷包括dbgpt-myql-dbMySQL 数据库、dbgpt-data、dbgpt-message所有元数据、知识库与会话记录都会丢失。执行前请确认无需保留数据。五、定制部署5.1 使用自定义配置文件由于 Compose 已将./configs:/app/configs挂载进容器替换/新增一个 TOML 并覆盖启动命令即可webserver: image: eosphorosai/dbgpt-openai:latest command: dbgpt start webserver --config /app/configs/your-config.toml volumes: - ./your-config.toml:/app/configs/your-config.toml配置模板可以参考仓库 configs/ 目录下的全套示例如 dbgpt-proxy-siliconflow.toml、dbgpt-proxy-aimlapi.toml、dbgpt-local-qwen.toml 等按需修改[service.web.database]、[[models.llms]]、[[models.embeddings]]等段落。5.2 挂载本地模型GPU 部署如果需要容器内加载本地模型可挂载模型目录并申请 NVIDIA GPUwebserver: volumes: - /data/models:/app/models deploy: resources: reservations: devices: - driver: nvidia capabilities: [gpu]默认的根 Compose 文件其实已经包含/data/models:/app/models挂载宿主机不存在该目录时 Docker 会自动创建空目录使用本地模型时把模型放到宿主机/data/models下即可GPU 预留段则需按上述方式自行添加前提是宿主机已安装 NVIDIA Container Toolkit。六、其他 Compose 编排示例仓库docker/compose_examples/目录下随附了面向特定场景的编排文件文件使用场景docker-compose.yml默认代理模式部署 MySQLSiliconFlow 远端模型docker/compose_examples/cluster-docker-compose.yml多 Worker 集群 GPU本地模型docker/compose_examples/ha-cluster-docker-compose.yml双 Controller 高可用模型集群docker/compose_examples/dbgpt-oceanbase-docker-compose.ymlOceanBase 数据库 向量存储后端使用示例以多 Worker 集群为例docker compose -f docker/compose_examples/cluster-docker-compose.yml up -d6.1 多 Worker 集群的架构cluster-docker-compose.yml 使用eosphorosai/dbgpt:latest镜像编排了五个角色controller集群控制器dbgpt start controller负责 Worker 注册与模型路由api-server对外 OpenAI 兼容 API 入口dbgpt start apiserver端口 8100通过--controller_addr http://controller:8000连接控制器llm-workerLLM 推理 Worker示例使用本地模型glm-4-9b-chat模型路径/app/models/glm-4-9b-chat端口 8001带 GPU 预留embedding-workerEmbedding Workertext2vec类型加载text2vec-large-chinese端口 8002带 GPU 预留webserver以--light --remote_embedding轻量模式启动通过MODEL_SERVERhttp://controller:8000把模型请求全部转发给集群自身端口 5000。注意该文件要求先把本地模型放到宿主机/data/models各服务通过- /data/models:/app/models挂载并按需修改--model_path指向实际模型目录。6.2 高可用集群ha-cluster-docker-compose.yml 演示了双 Controller 双 Worker WebServer API Server的部署形态全部使用eosphorosai/dbgpt-openai:latest镜像由 docker/base/build_proxy_image.sh 构建脚本头部注释中说明了构建方式与可选的--pip-index-url参数。文件头部注释给出了标准启动命令OPENAI_API_KEY{your api key} OPENAI_API_BASEhttps://api.openai.com/v1 \ docker compose -f ha-cluster-docker-compose.yml up -d该文件通过环境变量实现 provider 可切换例如改用 SiliconFlowLLM_MODEL_PROVIDERproxy/siliconflow \ LLM_MODEL_NAMEQwen/Qwen2.5-Coder-32B-Instruct \ OPENAI_API_BASEhttps://api.siliconflow.cn/v1 \ OPENAI_API_KEY${SILICONFLOW_API_KEY} \ EMBEDDING_MODEL_PROVIDERproxy/openai \ EMBEDDING_MODEL_NAMEBAAI/bge-large-zh-v1.5 \ EMBEDDING_MODEL_API_URLhttps://api.siliconflow.cn/v1/embeddings \ docker compose -f ha-cluster-docker-compose.yml up -d架构上有两处值得注意的细节llm-worker、embedding-worker、webserver、apiserver的CONTROLLER_ADDR均配置为http://controller-1:8000,http://controller-2:8000双地址实现控制器故障时的冗余接入单独用一个busybox的init服务把assets/schema/dbgpt.sql与docker/examples/sqls拷贝到共享卷dbgpt-init-scripts再由db服务在初始化时消费解决了 MySQL 初始化脚本来源分散的问题。Controller 与 WebServer 各自挂载 ha-model-cluster.toml 与 ha-webserver.toml 两份专用配置。6.3 OceanBase 后端dbgpt-oceanbase-docker-compose.yml 演示了以 OceanBaseoceanbase/oceanbase-ce:vector镜像同时承担业务库与向量存储的形态dbgpt服务使用eosphorosai/dbgpt-allinone镜像通过VECTOR_STORE_TYPEOceanBase、OB_HOST/OB_PORT/OB_USER/OB_DATABASE等环境变量接入文件内还保留了一处OB_HOST127.0.0.1的重复项实际以容器内网络解析的oceanbase服务名为准来理解连接目标并默认以tongyi_proxyllmPROXYLLM_BACKENDqwen-plus作为 LLM需通过TONGYI_PROXY_API_KEY注入 API Key。七、排障建议WebServer 反复重启大概率是 MySQL 初始化 SQL 尚未执行完。观察docker logs db-gpt-webserver-1 -f与docker logs db-gpt-db-1 -f等待数据库日志出现初始化完成标志后restart: unless-stopped会自动让服务进入就绪状态。模型调用报错/无响应确认启动时SILICONFLOW_API_KEY已正确注入docker exec进容器或docker inspect查看环境变量并检查 TOML 中api_key ${env:SILICONFLOW_API_KEY}是否能取到值。数据丢失疑虑日常停止请只用docker compose down只有执行down -v才会删除dbgpt-myql-db、dbgpt-data、dbgpt-message等卷。八、小结DB-GPT 的 Compose 部署方案以镜像内预置 CLI TOML 环境变量占位符 Compose 注入为核心设计根目录 docker-compose.yml 覆盖最通用的远端 LLM 代理 MySQL 元数据场景三步即可在 http://localhost:5670 得到完整可访问的 Web 应用而 docker/compose_examples/ 下的集群、高可用与 OceanBase 编排则提供了向生产规模演进的路径。部署后如需深入调整优先查看 configs/ 目录中的 TOML 配置与 docker/base/Dockerfile 的镜像构建逻辑即可覆盖绝大多数自定义需求。【免费下载链接】DB-GPTopen-source agentic AI data assistant for the next generation of AI Data products.项目地址: https://gitcode.com/GitHub_Trending/db/DB-GPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考