
在 Node-RED 之上做平台:插件化与工程化
系列:《矿山边缘计算网关技术实践》第 2 篇
上一篇:为什么矿山边缘网关需要一个"流编排"运行时
选择了 Node-RED 做运行时,只是拿到了"流编排"这层地基。一个可交付的工业网关还需要:插件怎么装、配置怎么管、界面怎么做、变更怎么热生效。这一篇讲我们在 Node-RED 之上补的四件事。
1. 插件化:一个驱动/插件 = 一个 npm 包
Node-RED 原生支持"节点包"(palette),但我们还引入了第二类扩展——插件(plugin),用于 Editor 侧边栏、运行时生命周期这类非节点能力。
关键机制是 plugins-links/目录:每个插件是独立的 npm 包,通过 package.json声明自己,被 Node-RED 识别加载。看一个真实例子(plugins-links/status-panel/package.json):
{ "name": "@mine-edge/node-red-contrib-status-panel", "version": "0.1.0", "description": "设备状态监控面板 — Node-RED Editor 侧边栏扩展,实时显示设备连接状态和采集统计", "main": "mine-status.js", "node-red": { "plugins": { "mine-status": "mine-status.js" } }, "dependencies": { "@mine-edge/driver-framework": "^0.1.0" }, "keywords": ["node-red", "monitoring", "status", "edge-gateway"], "license": "Apache-2.0" }这套机制带来的工程收益:
- 协议驱动 = 节点包
,16 种协议驱动各自独立演进,互不干扰 - 平台扩展 = 插件包
,状态面板、管理控制台、主备冗余都是插件,随包分发 - 统一依赖驱动框架
( @mine-edge/driver-framework),所有驱动共享同一套设备抽象与数据管道
2. 配置工程化:flows.json 是唯一权威源
工业网关的配置是一棵"工程树":工程 → 驱动 → 设备 → 源点/标签。这些配置最终都要变成 Node-RED 的 flows。我们定了一条硬规则(ADR-07):
flows.json 是配置的唯一权威源, gateway.db中的 drivers / devices / tags 三表只是只读投影(read model),单向同步,禁止反向写入。
实现这个规则的模块叫 ConfigProjector(nodes/common/config-projector.js):
// 同步触发:流部署完成后全量重建三表(事务) RED.events.on('flows:started', () => { projector.rebuild(); }); // 同步方向:单向 flows.json → gateway.db,不反向 // 写入方:仅本模块,其他任何节点/UI 不得直写 // UI 增删改必须走 Node-RED Admin API这个设计解决了工业项目里最头疼的"配置漂移"问题:界面改配置、手工改 flows、数据库直改,三处不一致。现在只有一条单向管道,投影失败不阻断主流程(gateway.db 只是派生视图),每表带 synced_at字段方便诊断滞后。
3. 控制台:与运行时低耦合的 Vue 3 SPA
Node-RED 自带的编辑器是给"技术人员"用的,但矿山的日常使用者需要业务化的管理界面。我们交付了一个 Vue 3 SPA 管理控制台(web/→ /console),覆盖时序数据采集(工程/驱动/源点/标签/流程编辑)、视频 AI 分析中心、边缘数据分析中心(含告警中心)、系统配置。
集成方式是"低耦合"的:
会话体系独立实现( console-auth:scrypt 口令哈希 + JWT 12 小时有效期),不依赖 Node-RED 默认账号体系插件只做"反向代理 + 会话校验",业务数据全部来自 Node-RED Admin API 与自定义 REST 端点 前端产物与运行时解耦,升级控制台不用动运行时
4. 热生效:配置变更不重启
矿场作业中"重启网关"代价很高(采集链路中断、报警窗口空窗),所以配置变更必须热生效。我们做了两层:
flows 热部署。Node-RED 天生支持流热部署(deploy 不重启进程),控制台的流程编辑直接走 Admin API 触发。所有自定义节点在 on('close')/ 重部署时优雅释放连接,轮询类节点支持动态增删设备。
运行时配置热加载。节点公共配置(config-hot-reload.js)监听配置文件变更并增量应用;远程配置模块(remote-config.js)更进一步:HMAC-SHA256 签名 + 防重放 + 原子写盘 + 校验失败自动回滚,让平台侧下发的配置也能安全地热生效。
5. 小结
这一层"平台化"把 Node-RED 从"一个流编辑器"变成了"可交付的工业产品":
plugins-links/ | ||
nodes/common/config-projector.js | ||
web/nodes/plugins/mine-console/ | ||
config-hot-reload.jsremote-config.js |
下一篇进入驱动框架:16 种工业协议如何共享一个驱动框架——device/driver/pipeline/registry 四件套设计。
夜雨聆风