部署指南
裸机 / systemd(推荐)
# 推荐:单二进制全栈(前端已内嵌,直接访问 :8080/gflow/,无需 nginx)。
# 前置:gflow 同级摆放 gflow-ui(包管理器 pnpm)与 rulego-editor(编辑器源码,构建期引用),
# 首次构建自动安装依赖;拿到预编译交付包的可用其二进制跳过构建。
cd gflow && make release # 产出 dist/gflow-server
# 配置并启动(仓库只带样例文件,先复制再改数据库连接等必填项)
cp configs/config.yaml.example configs/config.yaml
./dist/gflow-server # 在 gflow 目录运行,自动读取 configs/config.yaml
# 备选:前后端分离(前端需独立发布/扩容时)——make build 为 API-only 版(不嵌入前端),
# 前端 make web 构建产物由 nginx 托管(/gflow/、/m/、/api/、/api/v1/ws/、/rulego/ 五个 location)
cd gflow && make build && make webdeploy/systemd/ 提供服务单元模板;deploy/nginx/ 提供前端反代配置(含 /rulego/——规则链/智能体编辑器接口)。服务端默认监听 :8080。
首次部署先执行 make db-init(scripts/init-db.sh)完成建库建表——程序启动不建核心表,两个脚本缺一不可,见下文数据库初始化。注意 init-db.sh 的连接信息取自 DB_* 环境变量(默认 localhost + postgres/postgres/gflow;MySQL 默认账号 root),不读 config.yaml。
Docker Compose 一键部署
cd gflow
# 1. 构建全栈单镜像(前端已嵌入二进制;构建机需 Node + Docker,无需 Go)
make docker-build
# 2. 配置环境变量(至少改 GFLOW_JWT_SECRET(≥32 字符随机串,release 模式弱密钥拒绝启动)/ POSTGRES_PASSWORD)
cp .env.example .env && vi .env
# 3. 启动全栈
docker compose up -dcompose 拉起三个容器:
| 服务 | 说明 |
|---|---|
postgres | 首次启动自动按序执行引擎建表脚本 00.init_bpm_pg.sql(7 张 wf_* 表)+ 00.init_pg.sql(宿主表 + 种子数据) |
redis | 缓存与(多实例时)分布式锁 |
gflow | gflow-server 全栈单镜像:桌面 /gflow/、移动 H5 /m/、REST API、WebSocket 同端口对外,无 nginx |
访问 http://localhost/gflow/,默认账号 admin / admin123(首次登录改密)。宿主机 80 被占时在 .env 改 APP_PORT;对外访问地址记得同步改 GFLOW_APP_BASE_URL(IM 免登链接、密码重置回跳都用它)。
双实例/多副本集群部署是商业版(GFlow Platform)能力,不使用此 compose,完整步骤见仓库
docs/deploy/deployment.md第七节。
集群部署(商业版)
GFlow Platform 支持多实例 active-active 集群部署:同一份代码同时支持单机与多副本,单机行为不变;任一副本崩溃,在途流程自动救援,服务不断。适用于滚动发布不中断、单进程故障自动恢复的场景(同机双进程形态;防的是进程级故障,不防整机故障)。
集群形态下平台自动处理跨副本一致性:
| 能力 | 说明 |
|---|---|
| 集群选主 | Redis 租约选主,恢复/巡检类后台任务只在 leader 执行 |
| 跨副本执行互斥 | 流程实例级分布式门闩(持锁续期),与 DB 行锁双层兜底 |
| 卡死实例自动救援 | 副本崩溃后在途实例与超期延迟任务由 leader 巡检自动重驱(≤7 分钟),连续失败转人工告警 |
| 定时任务恰好一次 | 定时规则链按「计划触发时刻」分布式去重,misfire 跳过不补跑 |
| 通知实时跨副本 | WebSocket 推送经 Redis 广播,负载均衡无须粘性会话 |
| 配置热生效 | 规则链 / LLM 供应商变更广播失效,各副本秒级重载,无须重启 |
| 雪花 ID 防撞 | machine_id 启动注册制,冲突拒绝启动并报出持有者 |
| 文件存储三选一 | local(同机共享路径 / NFS)、s3(MinIO 自建或云 S3)、oss(阿里云别名) |
依赖:共享 PostgreSQL/MySQL + Redis(建议开 AOF 持久化)+ 前置负载均衡(HTTP 健康检查)。部署清单(Redis 配置与降级语义、存储切换、存量库唯一约束、开机自启、验证项)见仓库 docs/deploy/deployment.md 第七节。引擎开源版内嵌分布式锁与救援原语,但集群编排(选主 / 巡检 / 广播 / 存储切换)需自行搭建。
生产清单
- [ ] 修改
GFLOW_JWT_SECRET(≥32 字符随机串)、数据库口令,勿用默认值 - [ ]
server.swagger_enabled: false(Swagger 含完整 API 面且无需认证,生产保持关闭)、captcha.enable_universal_code: false - [ ] 默认管理员
admin / admin123首次登录立即改密 - [ ] PostgreSQL 生产实例 + 定期备份(历史表只增不减)
- [ ] HTTPS:nginx 前置证书
- [ ] 多副本集群部署时
cache.global.type: redis+cluster.enabled: true(分布式门闩、选主、WS 广播、token 黑名单共用该 Redis;Redis 建议 AOF),详见仓库部署文档第七节 - [ ] 日志收集;
logs/目录磁盘水位告警 - [ ] 演示/生产账号分离,管理员开启操作审计
数据库初始化
- GFlow Platform:postgres 容器首启自动按序执行
scripts/engine/00.init_bpm_pg.sql(引擎 7 张表)与scripts/00.init_pg.sql(应用系统表 + 种子);裸机部署用make db-init(scripts/init-db.sh)完成同样动作——程序启动不建核心表,两个脚本缺一不可 - 仅引擎:执行 gflow-engine 的
scripts/00.init_bpm_pg.sql/00.init_bpm_mysql.sql - 非内置数据库(达梦、人大金仓等):经
DialectProvider扩展接入,见自定义数据库方言
环境要求
见环境要求。演示环境参考:1.9G 内存云主机运行 gflow 全栈稳定。