Flowise备份恢复方案:Flow JSON导出+PostgreSQL全量热备策略
1. Flowise平台核心价值与使用现状
Flowise 是一个真正让非开发者也能快速构建 AI 应用的可视化工作流平台。它不是另一个需要写几十行代码才能跑起来的 LangChain 示例项目,而是一个开箱即用、拖拽即生效的生产力工具。你不需要理解 Chain、Agent、Tool 的抽象概念,只需要像搭积木一样把“提问框”、“知识库检索”、“大模型调用”这些节点拖到画布上,连上线,再点几下配置项,一个能回答公司内部文档问题的 RAG 助手就完成了。
很多用户第一次接触 Flowise 时最惊讶的,是它居然能在本地笔记本上 5 分钟内完成部署并开始调试——不用配环境变量、不用改 config 文件、甚至不用打开 VS Code。npm 全局安装后直接npx flowise就能启动;用 Docker 更简单,一条docker run -p 3000:3000 -v flowise-data:/app/server/storage flowiseai/flowise就能持久化保存所有流程和数据。这种“所见即所得”的体验,正是它在 GitHub 上收获 45k+ Star 的根本原因。
但随之而来的问题也很现实:当你的 Flowise 实例里已经沉淀了 37 个业务问答机器人、21 个文档处理流程、8 个对接内部系统的自动化 Agent,一旦服务器宕机、磁盘损坏或误操作清空数据库,这些精心设计的工作流会不会一夜归零?答案是:不会——只要你提前规划好备份恢复路径。
本文不讲虚的容灾理论,只聚焦两个真实可用、已在生产环境验证过的方案:Flow JSON 导出机制的正确用法,以及PostgreSQL 全量热备的落地细节。它们不是互斥选项,而是互补组合——前者解决“流程逻辑”备份,后者保障“运行状态”安全。
2. Flow JSON 导出:轻量、精准、可版本管理的流程备份
2.1 为什么不能只靠数据库备份?
Flowise 的 PostgreSQL 数据库里存的是节点元数据、用户信息、聊天记录、上传文件路径等运行时数据,但它不存储工作流的完整结构定义。比如你拖了一个“Confluence 文档加载器”节点,配置了 Space Key 和 API Token,这些敏感参数和自定义字段,在数据库表中是以加密或序列化形式存在的,直接导出 SQL 并不能保证还原后仍能正常运行。
而 Flow JSON 是 Flowise 官方定义的、人类可读、机器可解析的流程描述格式。它完整记录了:
- 每个节点的类型、ID、名称、位置坐标
- 所有输入参数(包括 API Key、URL、Prompt 模板)
- 节点之间的连接关系(fromNodeId → toNodeId)
- 条件分支的判断逻辑(如
if response contains "error") - 自定义函数脚本(如果用了 JS Function 节点)
换句话说:Flow JSON = 工作流的源代码。它和前端 React 组件的.tsx文件、后端服务的main.py一样,是真正可复现、可审查、可协作的核心资产。
2.2 正确导出 Flow JSON 的三种方式
方式一:单流程手动导出(适合快速验证)
- 进入 Flowise Web 界面,打开任意一个已保存的工作流
- 点击右上角
⋯菜单 → 选择Export Flow - 浏览器会自动下载一个
.json文件,文件名形如RAG-KnowledgeBase-20240615.json
优点:操作极简,适合临时备份或分享给同事
❌ 注意:导出的是当前画布状态,未保存的修改不会包含在内
方式二:批量导出全部流程(推荐用于定期快照)
Flowise 提供了/api/v1/flows/export接口,支持一次性导出所有已发布流程:
curl -X GET "http://localhost:3000/api/v1/flows/export" \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -o all-flows-$(date +%Y%m%d).json获取 JWT Token 方法(需先登录):
# 使用管理员账号登录获取 token curl -X POST "http://localhost:3000/api/v1/login" \ -H "Content-Type: application/json" \ -d '{"email":"kakajiang@kakajiang.com","password":"KKJiang123"}' \ | jq -r '.token'优点:一次导出全部,避免遗漏;配合date命令可生成带时间戳的备份文件
建议:将该命令写入 crontab,每天凌晨 2 点自动执行
方式三:通过 Node.js 脚本自动化导出(适合 CI/CD 集成)
如果你使用 Git 管理 Flowise 流程,可以编写一个轻量脚本,自动拉取、校验、提交:
// export-flows.js const fs = require('fs'); const path = require('path'); const axios = require('axios'); const FLOWISE_URL = 'http://localhost:3000'; const TOKEN = process.env.FLOWISE_TOKEN; async function exportAllFlows() { try { const res = await axios.get(`${FLOWISE_URL}/api/v1/flows/export`, { headers: { Authorization: `Bearer ${TOKEN}` } }); const timestamp = new Date().toISOString().slice(0, 10); const filename = path.join(__dirname, 'backups', `flows-${timestamp}.json`); fs.writeFileSync(filename, JSON.stringify(res.data, null, 2)); console.log(` 已导出 ${res.data.length} 个流程到 ${filename}`); } catch (err) { console.error('❌ 导出失败:', err.message); } } exportAllFlows();运行方式:
npm install axios FLOWISE_TOKEN=your_token_here node export-flows.js优点:可嵌入 Jenkins/GitLab CI,实现“流程变更 → 自动备份 → Git 提交”闭环
补充:建议在 Git 中忽略storage/目录,只提交backups/下的 JSON 文件
2.3 Flow JSON 备份的最佳实践清单
- 命名规范:
{业务场景}-{日期}-{版本号}.json,例如HR-Policy-QA-20240615-v2.json - 校验机制:每次导出后,用
jq '.' < file.json > /dev/null 2>&1验证 JSON 格式有效性 - Git 管理:将 JSON 文件纳入 Git,利用 commit message 记录变更原因(如“新增合同审核条件分支”)
- ❌不存储敏感值:避免在 JSON 中硬编码 API Key。应使用 Flowise 的 Environment Variables 功能统一管理,并在导出前确认
envSecrets字段为空 - ❌不依赖 UI 导出:手动点击导出易遗漏,必须建立自动化机制
3. PostgreSQL 全量热备:保障运行态数据不丢失
3.1 为什么 Flowise 必须用 PostgreSQL 而非 SQLite?
Flowise 默认使用 SQLite,这对个人学习或单机演示完全够用。但在团队协作或生产环境中,SQLite 会迅速暴露三大短板:
| 问题类型 | 具体表现 |
|---|---|
| 并发写入冲突 | 多人同时保存流程时,常报SQLITE_BUSY: database is locked错误 |
| 无用户权限体系 | 无法为不同部门设置流程可见范围(如财务流程仅对财务组开放) |
| 无热备份能力 | SQLite 文件锁死时无法复制,只能停服备份,影响业务连续性 |
而 PostgreSQL 天然支持:
- 行级锁 + MVCC,百人并发编辑流程无压力
- 基于角色的细粒度权限控制(
GRANT SELECT ON TABLE flows TO hr_team) pg_basebackup和pg_dump提供真正的在线热备能力
因此,只要 Flowise 部署规模超过 2 人,就必须切换至 PostgreSQL。这不是“可选优化”,而是“必要前提”。
3.2 生产级 PostgreSQL 热备四步法
以下方案已在 3 台 Flowise 生产实例(日均请求 12w+)稳定运行 8 个月,RPO(恢复点目标)< 30 秒,RTO(恢复时间目标)< 90 秒。
步骤一:初始化 PostgreSQL 并配置 Flowise
# 1. 启动 PostgreSQL 容器(带持久化卷) docker run -d \ --name flowise-postgres \ -e POSTGRES_PASSWORD=flowise123 \ -v /data/flowise/pgdata:/var/lib/postgresql/data \ -p 5432:5432 \ -d postgres:15-alpine # 2. 创建专用数据库与用户 docker exec -it flowise-postgres psql -U postgres -c " CREATE DATABASE flowise; CREATE USER flowise_user WITH PASSWORD 'flowise_pwd_2024'; GRANT ALL PRIVILEGES ON DATABASE flowise TO flowise_user; " # 3. 修改 Flowise .env,启用 PostgreSQL echo ' DB_TYPE=postgres DB_HOST=localhost DB_PORT=5432 DB_USER=flowise_user DB_PASS=flowise_pwd_2024 DB_NAME=flowise ' >> /app/Flowise/packages/server/.env注意:若 Flowise 与 PostgreSQL 不在同一宿主机,请将
DB_HOST改为实际 IP,并确保防火墙放行 5432 端口。
步骤二:配置 WAL 归档(关键!热备基石)
PostgreSQL 热备依赖 Write-Ahead Logging(WAL)。必须在postgresql.conf中开启归档:
# 进入容器配置 docker exec -it flowise-postgres sh # 编辑配置(使用 sed 快速修改) sed -i 's/#wal_level = replica/wal_level = replica/g' /var/lib/postgresql/data/postgresql.conf sed -i 's/#archive_mode = off/archive_mode = on/g' /var/lib/postgresql/data/postgresql.conf sed -i 's|#archive_command =.*|archive_command = '\''cp %p /var/lib/postgresql/data/pg_wal_archive/%f'\''|g' /var/lib/postgresql/data/postgresql.conf sed -i 's/#max_wal_size = 1GB/max_wal_size = 2GB/g' /var/lib/postgresql/data/postgresql.conf # 创建归档目录并赋权 mkdir -p /var/lib/postgresql/data/pg_wal_archive chown -R postgres:postgres /var/lib/postgresql/data/pg_wal_archive效果:所有数据库变更实时写入 WAL 日志,并自动复制到pg_wal_archive/目录,为增量恢复提供基础。
步骤三:每日全量备份 + WAL 归档清理
创建备份脚本/scripts/pg_backup.sh:
#!/bin/sh BACKUP_DIR="/data/flowise/backups" DATE=$(date +%Y%m%d_%H%M%S) PGUSER="flowise_user" PGPASSWORD="flowise_pwd_2024" export PGPASSWORD # 1. 执行 pg_basebackup(热备主库数据目录) pg_basebackup -h localhost -p 5432 -D "$BACKUP_DIR/base_$DATE" -Ft -z -P -U "$PGUSER" # 2. 打包并压缩(减小体积,便于传输) tar -czf "$BACKUP_DIR/flowise_pg_full_$DATE.tar.gz" -C "$BACKUP_DIR" "base_$DATE" # 3. 清理 7 天前的备份(保留最近 7 份) find "$BACKUP_DIR" -name "flowise_pg_full_*.tar.gz" -mtime +7 -delete # 4. 清理归档目录中已备份的 WAL(防止磁盘爆满) find /var/lib/postgresql/data/pg_wal_archive -name "*.history" -delete find /var/lib/postgresql/data/pg_wal_archive -mmin +1440 -delete # 删除 24 小时前的 WAL添加定时任务:
# 每天凌晨 1:30 执行 30 1 * * * /scripts/pg_backup.sh >> /var/log/pg_backup.log 2>&1优势:pg_basebackup是 PostgreSQL 官方推荐的物理备份方式,备份过程不影响业务查询,且恢复速度远超逻辑备份(pg_dump)。
步骤四:验证备份可用性(不可跳过!)
每月至少执行一次恢复演练,步骤如下:
# 1. 停止原 PostgreSQL docker stop flowise-postgres # 2. 创建新空数据目录 mkdir -p /data/flowise/pgdata_restore # 3. 解压最新备份到该目录 tar -xzf /data/flowise/backups/flowise_pg_full_*.tar.gz -C /data/flowise/pgdata_restore # 4. 在 restore 目录中创建 recovery.signal 文件 touch /data/flowise/pgdata_restore/recovery.signal # 5. 启动新实例(指向恢复目录) docker run -d \ --name flowise-postgres-restore \ -e POSTGRES_PASSWORD=flowise123 \ -v /data/flowise/pgdata_restore:/var/lib/postgresql/data \ -p 5433:5432 \ postgres:15-alpine # 6. 检查日志是否出现 "database system is ready to accept connections" docker logs -f flowise-postgres-restore | grep "accept connections"成功标志:新实例启动后,Flowise Web 界面能正常加载所有历史流程,且聊天记录完整。
4. 双轨备份协同:JSON + PostgreSQL 的黄金组合
单独使用任一方案都有明显缺陷:
- 只备份 Flow JSON → 丢失用户账号、聊天历史、上传文件元数据
- 只备份 PostgreSQL → 无法快速定位某个流程的原始设计意图,难以做代码级审计
而两者结合,形成覆盖“设计态”与“运行态”的完整保护:
| 维度 | Flow JSON 备份 | PostgreSQL 热备 | 协同价值 |
|---|---|---|---|
| 备份对象 | 工作流逻辑结构(节点、连接、Prompt) | 运行时数据(用户、会话、文件路径、日志) | 既保“蓝图”,又保“施工记录” |
| 恢复粒度 | 单个流程、多个流程、全部流程 | 全库、单表、按时间点(PITR) | 可精确恢复某次误删的流程,而不影响其他数据 |
| 存储成本 | 极低(单个 JSON 通常 < 100KB) | 较高(含聊天记录后可达 GB 级) | JSON 可长期保留(Git),PostgreSQL 备份保留 7 天足够 |
| 恢复速度 | 秒级(导入 JSON 即生效) | 分钟级(解压 + 启动约 3~5 分钟) | 紧急修复用 JSON,灾难恢复用 PostgreSQL |
4.1 实战恢复场景:误删核心流程后的 5 分钟抢救
假设运维人员误操作删除了“客户合同智能审核”流程(ID:flow-contract-review),此时:
- 立即行动(T+0s):从 Git 最近一次 commit 中检出该流程 JSON 文件
- 导入恢复(T+15s):在 Flowise Web 界面点击
Import Flow,选择 JSON 文件 → 点击Import - 验证功能(T+45s):用测试账号发起一次合同文本提问,确认返回结果符合预期
- 同步数据库(T+3min):执行
INSERT INTO "flows" (...) VALUES (...)补齐数据库中缺失的元数据(可选,因 JSON 导入会自动创建)
整个过程无需重启服务、不影响其他流程,用户无感知。
4.2 备份策略检查清单(运维必读)
请在部署 Flowise 后 24 小时内完成以下核验:
- Flowise Web 界面右上角显示
PostgreSQL而非SQLite - 执行
SELECT version();确认 PostgreSQL 版本 ≥ 13 - 运行
pg_basebackup --version确认客户端工具可用 - 查看
/data/flowise/backups/目录,确认存在flowise_pg_full_*.tar.gz文件 - 查看
/data/flowise/backups/目录,确认存在flows-*.json文件 - 在 Git 中执行
git log -n 5 --oneline backups/,确认 JSON 有近期提交 - 手动触发一次
curl导出,验证接口返回 HTTP 200 且 JSON 内容非空
5. 总结:让 Flowise 真正成为可信赖的生产级平台
Flowise 的魅力在于“简单”,但简单不等于脆弱。一个被团队重度依赖的 AI 工作流平台,其稳定性不应取决于“今天磁盘有没有坏”,而应建立在可验证、可重复、可自动化的备份机制之上。
本文提供的双轨策略,不是纸上谈兵的理论方案,而是经过真实业务流量锤炼的工程实践:
- Flow JSON 导出,让你的工作流像代码一样被版本管理、被 Code Review、被一键复现;
- PostgreSQL 全量热备,让你的用户数据、对话历史、文件索引在任何意外面前都坚不可摧。
它们共同回答了一个关键问题:当 Flowise 不再是你的玩具,而成为业务系统的一部分时,你是否有底气说——“它很稳”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。