deerflow-code/offline-backend-20260512/backend/离线镜像部署简明指南.md
2026-09-07 18:24:55 +08:00

4.2 KiB
Raw Blame History

DeerFlow 后台离线镜像部署简明指南

本文档只部署后台 Docker 镜像,不包含前端。

1. 部署前准备

目标服务器需要已安装并启动 Docker:

docker --version
docker info

将交付目录 deerflow-backend 放到服务器任意位置。以下统一以 /data/deerflow-backend 为例:

DEPLOY_DIR=/data/deerflow-backend
cd "$DEPLOY_DIR"
chmod +x start-backend-docker.sh

如果交付的是压缩包,解压后确保目录中能看到以下文件:

dist/deerflow-backend-offline.tar
start-backend-docker.sh
config.yaml

2. 导入镜像并启动

首次部署执行一次镜像导入:

cd "$DEPLOY_DIR"
docker load -i dist/deerflow-backend-offline.tar

启动后台,默认端口为 8001:

./start-backend-docker.sh 8001

例如使用 9001 端口:

./start-backend-docker.sh 9001

以后重启只需要再次执行同一条启动命令。脚本会自动删除旧容器并创建新容器:

./start-backend-docker.sh 8001

查看运行状态和日志:

docker ps --filter name=deerflow-backend
docker logs -f deerflow-backend

健康检查:

curl http://127.0.0.1:8001/health

3. 必须知道的文件位置

首次启动后,实际生效的配置和数据均在 docker-data 中。不要只修改部署根目录的模板文件。

$DEPLOY_DIR/docker-data/config/config.yaml              # 主配置
$DEPLOY_DIR/docker-data/config/.env                      # 密码、地址等环境变量
$DEPLOY_DIR/docker-data/config/extensions_config.json    # MCP/扩展配置
$DEPLOY_DIR/docker-data/.deer-flow/agents                # 智能体及每个 SOUL.md
$DEPLOY_DIR/docker-data/skills                            # 技能目录
$DEPLOY_DIR/docker-data/.deer-flow/data                  # SQLite 数据

修改 config.yaml、.env、智能体或技能后,重新执行启动命令即可生效:

cd "$DEPLOY_DIR"
./start-backend-docker.sh 8001

4. 配置 MySQL

本部署支持 MySQL 保存业务数据,同时 SQLite 保留聊天/checkpointer 数据,不使用 PostgreSQL。

先在 MySQL 中创建数据库:

CREATE DATABASE deerflow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

编辑 $DEPLOY_DIR/docker-data/config/config.yaml,将数据库部分改为:

database:
  backend: mysql
  mysql_url: $MYSQL_DATABASE_URL
  pool_size: 20
  max_overflow: 20
  pool_timeout: 30
  echo_sql: false

checkpointer:
  type: sqlite
  connection_string: .deer-flow/data/deerflow.db

再编辑 $DEPLOY_DIR/docker-data/config/.env,填写 MySQL 地址:

MYSQL_DATABASE_URL=mysql+asyncmy://deerflow:数据库密码@192.168.1.10:3306/deerflow?charset=utf8mb4

字段说明:

deerflow            MySQL 用户名
数据库密码           MySQL 密码
192.168.1.10         MySQL 服务器地址
3306                MySQL 端口
deerflow            MySQL 数据库名

若 MySQL 安装在 Docker 宿主机上,可把地址写为 host.docker.internal:

MYSQL_DATABASE_URL=mysql+asyncmy://deerflow:数据库密码@host.docker.internal:3306/deerflow?charset=utf8mb4

密码中有特殊字符时必须进行 URL 编码,例如:@ 写为 %40,# 写为 %23,% 写为 %25。

配置完成后启动:

cd "$DEPLOY_DIR"
./start-backend-docker.sh 8001

5. 导入智能体和技能

停止服务后复制文件,复制完成再启动。智能体目录中每个智能体必须同时保留 config.yaml 和 SOUL.md。

docker rm -f deerflow-backend

cp -a /path/to/agents/. "$DEPLOY_DIR/docker-data/.deer-flow/agents/"
cp -a /path/to/skills/. "$DEPLOY_DIR/docker-data/skills/"

cd "$DEPLOY_DIR"
./start-backend-docker.sh 8001

复制时使用 源目录/. 的形式,避免产生 agents/智能体ID/智能体ID/SOUL.md 的多一层目录问题。

6. SQLite 聊天数据

聊天和 checkpointer 的 SQLite 文件位于:

$DEPLOY_DIR/docker-data/.deer-flow/data/deerflow.db

替换 SQLite 数据库前必须先停止容器,并同时复制 deerflow.db、deerflow.db-wal、deerflow.db-shm(存在时)。替换后再执行启动命令。