物联网中的 Node-RED(8):部署与运维(项目模式 · 版本管理 · 多实例)

物联网中的 Node-RED(8):部署与运维(项目模式 · 版本管理 · 多实例)

前面 7 篇都在讲"怎么写流",这一篇讲"怎么让它稳定跑在生产上"——项目模式、版本管理、context 持久化、多实例拆分,正好对应你地灾 P03 转发和 AI 摄像头报警的实际部署。

一、是什么

  • 项目模式(Projects):把流、配置、依赖、README 组织成一个"项目",每个项目独立目录 + 独立 package.json,可走 git 版本管理。配 editorTheme.projects.enabled=true 开启。
  • 版本管理:项目模式下流即文件(flows.json 等),直接 git 提交/回滚;非项目模式也能靠 flows.json + flows_cred.json 备份。
  • context 持久化:默认 context 在内存,重启清零;可配 file / redis / 数据库 后端,让 flow.get/set 跨重启存活。
  • 多实例:一台机跑多个 Node-RED 进程(不同端口),或容器化部署,按业务拆分隔离。

一句话:项目模式管"结构"、版本管"可追溯"、context 管"断电不丢"、多实例管"隔离与扩展"。

二、怎么用

开项目模式

  1. settings.js 里 editorTheme.projects.enabled = true,重启。
  2. 新建项目 → 选 git 仓库(或本地)→ 流文件进项目目录。
  3. 每个项目独立 package.json,依赖(如 node-red-node-serialport)随项目走。

版本管理

  1. 项目模式里直接"提交"写 git,消息写清改了啥。
  2. 回滚就 git checkout 旧版本重新部署。
  3. 非项目模式:定期备份 flows.json + flows_cred.json(凭证在里面,别进公开仓库)。

context 持久化

  1. settings.js 的 contextStorage 配 file 后端:store: "localfilesystem"。
  2. function 里 context.set("lastTs", ts, "file") 显式存文件端。
  3. 重启后 context.get("lastTs", "file") 还在——断网补传的游标、设备状态就不丢。

多实例拆分(贴你实际)

  1. 地灾 P03 转发 → 一个 Node-RED 实例(端口 1880),专注 Modbus 读 + MQTT 转平台。
  2. AI 摄像头报警 → 另一个实例(端口 1881),专注 HTTP 接收 + 解析 + 推送。
  3. 两实例互不干扰:一个崩了不影响另一个,资源也分得开。

三、用在哪里

  • 地灾平台 P03 转发:独立实例常驻工业网关,Modbus 读华测 12 类设备 → 落 context 游标 → MQTT 推平台;断网靠 file context 记进度,恢复后补传。
  • AI 摄像头报警:独立实例接回调、解析、双服务端推送,和 P03 解耦。
  • 边缘网关统一上云:项目模式把"网关流"纳入 git,改一次提交一次,回滚有据。
  • 测试/生产隔离:测试实例折腾新流,生产实例稳跑,互不踩。

四、怎么能用好(避坑)

  • 凭证别进 git:flows_cred.json 含密码/token,加 .gitignore 或加密;公开仓库绝不放。
  • context 选对后端:内存态重启清零,要持久化一定配 file/redis,别默认内存。
  • 多实例端口别撞:每个实例 settings.js 改 uiPort 和 tcpPort(管理端口),否则起不来。
  • 投产关编辑器鉴权:adminAuth 配上,别让任何人都能改生产流;公网必须 TLS。
  • 备份先于折腾:改生产流前先备份 flows.json,项目模式先 commit。
  • 依赖锁版本:package.json 锁 node 节点版本,避免自动升级把流搞挂。
  • 日志要落盘:配 logging 输出到文件,出事能查,别只看侧栏。

五、原理

  • 项目模式:把"流"从单文件升级为"带元数据的目录",底层仍序列化成 flows.json,但多了 git 跟踪和依赖隔离。
  • context 存储:Node-RED 的 context 是一层抽象,背后可插内存/file/redis 等模块;context.set(k,v,store) 指定后端,运行时按后端读写。
  • 多实例:本质是多进程,每个进程独立加载自己的 settings.js 和流文件,靠端口区分;可进一步用 Docker 限制资源。
  • 部署流程:编辑器部署 → 序列化流 → 存盘 → 运行时加载执行,版本管理就是管理这份存盘 + 依赖。

六、背景:它从哪里来

Node-RED 出自 2013 年 IBM 的"布线式编程"实验(2016 年捐给 OpenJS 基金会成为开源项目)。早期是单机玩物,随着工业 IoT 落地,才补上项目模式、context 持久化、多实例等"生产级"能力——这也是它从原型工具走到你这种地灾监测现场的关键一步。

误区澄清

  • "Node-RED 只是原型玩具,不能上生产":错。项目模式 + context 持久化 + 多实例 + adminAuth,已是很多边缘网关的生产方案。
  • "context 默认断电不丢":错。默认内存态,重启清零,要持久化必须显式配 file/redis。
  • "一个实例啥都跑":错。P03 转发和摄像头报警放一起,一个崩全崩;按业务拆实例更稳。
  • "流文件随便传,凭证无所谓":错。flows_cred.json 含敏感信息,必须隔离保管、不进公开仓库。
posted @ 2026-09-29 08:40  星辰手  阅读(10)  评论(0)    收藏  举报