Node-Red的部署与启动

一、Node-RED 运行机制

Node-RED 的架构基于 Node.js 的事件驱动模型,核心由​运行时(Runtime)​、编辑器(Editor)和节点(Nodes)三部分组成,三者协同实现可视化流程编程与执行。​

  1. 运行时( Runtime ):流程执行的 "大脑"​

    • ​核心功能​:负责加载节点、解析流程配置、管理节点间消息传递、处理事件触发,是流程运行的核心引擎。​

    • ​技术细节​:​

      • 基于 Node.js 的EventEmitter模块实现事件监听与触发,确保消息处理的高效性与非阻塞性。
      • 采用 "流(Flow)" 作为流程的基本单位,每个流由多个节点和连接构成,运行时通过解析 JSON 格式的流配置文件,将节点实例化并建立消息路由。
      • 支持多流并行运行,不同流之间可通过 "链接节点(Link Node)" 或全局上下文(Context)实现数据交互。
    • ​消息模型​:​

      • 节点间传递的消息为 msg 对象,默认包含 msg.payload(消息内容)和 msg.topic(消息主题),用户可自定义添加其他属性(如 msg.timestampmsg.source)。
      • 消息传递支持 "一对一""一对多""多对一" 模式,例如一个 "注入节点" 可同时向多个 "函数节点" 发送消息。
  2. 编辑器( Editor ):可视化开发的 "画布"​

    • ​核心功能​:提供基于浏览器的可视化界面,支持节点拖拽、连接配置、流程保存与部署,是用户与 Node-RED 交互的主要入口。​

    • ​技术细节​:​

      • 编辑器与运行时通过 WebSocket 协议实时通信,实现 "部署即生效":用户点击 "部署" 后,编辑器将流程配置 JSON 发送至运行时,运行时即时更新并执行流程,无需重启服务。
      • 支持 "工作区( Workspace )" 分区,可通过标签页切换不同流程,方便大型项目的模块化管理。
  3. 节点( Nodes ):流程功能的 "积木"​

    • ​核心定位​:节点是封装特定功能的代码模块,是流程的基本功能单元,用户通过组合节点实现业务逻辑。​

    • ​结构组成​:每个节点包含html(编辑器配置界面)、js(运行时逻辑)和package.json(元数据)三部分:​

      • html文件:定义节点在编辑器中的外观(图标、颜色)、配置项(如 API 密钥、端口号),通过RED.nodes.registerType注册节点类型。
      • js文件:实现节点的运行时逻辑,包括on("input")(接收输入消息触发)、send()(发送输出消息)等核心方法。
      • package.json:声明节点名称、版本、依赖(如mqtt库)、兼容的 Node-RED 版本等信息。

二、安装Node-Red

2.1 安装NVM

这里以Linux系统为例,推荐使用NVM安装NodeJS,方便后续管理

bash 复制代码
bash -c "$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)"
source ~/.nvm/nvm.sh

2.2 安装NodeJS

bash 复制代码
nvm install v22.16.0

2.3 安装Node-Red

bash 复制代码
npm install -g --unsafe-perm node-red

2.4 Node-Red的自启动

bash 复制代码
npm install -g pm2
pm2 start node-red --node-args="--max-old-space-size=1024"  #根据实际内存自行调整
pm2 save
pm2 startup

三、Node-Red的启动参数

3.1 启动命令

bash 复制代码
node-red [-v] [-?] [--settings settings.js] [--userDir DIR]
         [--port PORT] [--title TITLE] [--safe] [flows.json|projectName]
         [-D X=Y|@file]

3.2 参数说明

  • -p, --port PORT:设置运行时监听的 TCP 端口。默认值: 1880
  • --safe:启动 Node-RED 但不启动流程。当部署更改时,流程才会启动
  • -s, --settings FILE:设置要使用的配置文件。默认: settings.jsuserDir
  • --title TITLE:设置进程窗口标题
  • -u, --userDir DIR:设置要使用的用户目录。默认: ~/.node-red
  • -v:启用详细输出
  • -D X=Y|@file:覆盖单个设置
  • flows.json|projectName:如果项目功能未启用,这将设置您要与之工作的流程文件。如果项目功能已启用,这将确定应启动哪个项目。
  • -?, --help:显示命令行使用帮助并退出

3.3 参数示例

3.1 启用详细输出

  • ​参数作用​:启动 Node-RED 时输出详细日志(如模块加载、配置读取等过程),用于调试问题。

  • ​命令示例​:

    bash 复制代码
    node-red -v
  • ​场景说明​:当 Node-RED 启动失败(如插件报错、端口占用)时,通过 -v查看详细日志,快速定位问题原因(例如 "某个节点模块缺失""配置文件语法错误")。

3.2 显示帮助信息

  • ​参数作用​:输出所有命令行参数的用法说明,无需启动 Node-RED,仅用于查询参数。

  • ​命令示例​(两种写法均可):

    bash 复制代码
    # 写法1:短参数 -?
    node-red -?
    # 写法2:长参数 --help
    node-red --help
  • ​场景说明​:忘记某个参数的作用时,直接执行该命令快速查阅,例如 "想不起用户目录参数是 --userDir还是 --user" 时,通过 --help确认。

3.3 指定配置文件 {#boot-custom-settings}

  • ​参数作用​:不使用默认的 settings.js(默认在用户目录下),而是指定自定义的配置文件(如自定义节点路径、认证规则)。

  • ​命令示例​:

    bash 复制代码
    # 假设自定义配置文件存放在 /home/user/custom-node-red/settings-prod.js
    node-red --settings /home/user/custom-node-red/settings-prod.js
  • ​场景说明​:多环境部署时使用(如开发环境、生产环境),生产环境的 settings-prod.js可能关闭调试日志、启用 HTTPS,通过该参数快速切换配置。

3.4 指定用户目录

  • ​参数作用​:自定义 Node-RED 的用户目录(默认是 ~/.node-red,存放流程文件、插件、配置),实现多用户 / 多实例隔离。

  • ​命令示例​:

    bash 复制代码
    # 为"设备监控"场景创建独立用户目录 /opt/node-red/device-monitor
    node-red --userDir /opt/node-red/device-monitor
  • ​场景说明​:同一台服务器需要运行多个 Node-RED 实例(如 "设备监控" 和 "数据采集"),通过 --userDir隔离各自的流程和插件,避免冲突。

3.5 指定监听端口

  • ​参数作用​:设置 Node-RED 后台服务的 TCP 监听端口(默认是 1880),解决端口占用问题或实现多实例端口区分。

  • ​命令示例​(两种写法均可):

    bash 复制代码
    # 写法1:短参数 -p,指定端口为 1881
    node-red -p 1881
    # 写法2:长参数 --port,指定端口为 1882(用于生产环境实例)
    node-red --port 1882
  • ​场景说明​:默认端口 1880 已被其他服务占用,或需要运行两个 Node-RED 实例(分别用 1881 和 1882 端口)时,用该参数指定端口。

3.6 设置进程窗口标题

  • ​参数作用​:自定义 Node-RED 运行时的进程窗口标题(仅在终端 / 命令行窗口中显示),便于识别多实例进程。

  • ​命令示例​:

    bash 复制代码
    # 为"车间温湿度监控"实例设置窗口标题
    node-red --title "Node-RED - 车间温湿度监控" --port 1883
  • ​场景说明​:在终端中同时运行多个 Node-RED 实例时,默认窗口标题都是 "node-red",通过 --title自定义标题(如 "车间温湿度监控""设备故障报警"),可快速区分不同实例。

3.7 安全模式启动

  • ​参数作用​:启动 Node-RED 但不自动运行已部署的流程,仅加载编辑器;需手动在编辑器中点击 "部署",流程才会启动。

  • ​命令示例​:

    bash 复制代码
    # 安全模式启动,避免流程启动时因错误导致崩溃
    node-red --safe --port 1880
  • ​场景说明​:流程中存在错误(如 "MQTT 服务器地址写错""函数节点语法错误"),直接启动可能导致 Node-RED 崩溃;用 --safe启动后,先在编辑器中修复错误,再部署运行流程,避免启动失败。

3.8 指定流程文件或项目名

该参数分两种场景(取决于是否启用 "项目功能"),示例分别如下:

场景 1:未启用项目功能(指定流程文件)
  • ​参数作用​:不使用默认的 flows_<主机名>.json(用户目录下),而是指定自定义的流程文件(如备份的旧流程、特定场景的流程)。

  • ​命令示例​:

    bash 复制代码
    # 加载备份的流程文件 /home/user/backups/node-red/flows-20240501.json
    node-red /home/user/backups/node-red/flows-20240501.json
  • ​场景说明​:需要恢复历史备份的流程,或切换到另一个场景的流程(如 "工作日流程" 和 "节假日流程"),直接指定流程文件路径即可加载。

场景 2:已启用项目功能(指定项目名)
  • ​参数作用​:Node-RED 启用 "项目功能" 后(需在编辑器中配置),通过项目名指定启动哪个项目(每个项目包含独立的流程、配置)。

  • ​命令示例​:

    bash 复制代码
    # 启动名为"智慧家居控制"的项目
    node-red 智慧家居控制
  • ​场景说明​:启用项目功能后,多个项目的文件被统一管理(如 Git 版本控制),通过项目名快速启动目标项目,无需手动指定流程文件路径。

3.9 覆盖单个配置

  • ​参数作用​:临时覆盖 settings.js中的某个配置(无需修改配置文件),支持 "单键值覆盖" 或 "通过文件批量覆盖"。

  • ​命令示例​(两种用法):

    1. 单键值覆盖(如临时关闭编辑器访问限制):
    bash 复制代码
    # 覆盖 "editorTheme.disableEdit" 配置,允许编辑(默认可能为 false)
    node-red -D editorTheme.disableEdit=true --port 1880
    1. 文件批量覆盖(如通过 override.conf批量修改配置):
    bash 复制代码
    # 先创建 override.conf 文件,内容为:
    # editorTheme.title=临时测试环境
    # httpNode.auth.user=test
    # 再通过 -D @file 加载该文件
    node-red -D @/home/user/node-red-override.conf
  • ​场景说明​:临时测试配置(如 "临时允许匿名访问编辑器""临时修改 HTTP 节点的认证用户"),无需修改 settings.js,测试完成后直接删除参数即可恢复默认配置。

四、版本升级

bash 复制代码
sudo npm install -g --unsafe-perm node-red
相关推荐
半夏微凉半夏殇11 小时前
除了arm 还有那些开源的芯片架构
arm开发·架构·开源
ajassi200013 小时前
开源 C++ QT QML 开发(二十二)多媒体--ffmpeg编码和录像
c++·qt·开源
言之。1 天前
介绍近期github上有名的开源项目
开源·github
惘嘫、冋渞1 天前
CentOS 7上Python3.10报错 No module named ‘_ssl‘
开源
ajassi20001 天前
开源 C++ QT QML 开发(二十一)多媒体--视频播放
c++·qt·开源
算家计算1 天前
阿里最新开源!轻量级视觉模型Qwen3-VL-4B&8B-Instruct本地部署教程:小参数媲美顶尖模型
人工智能·开源
CoderJia程序员甲1 天前
GitHub 热榜项目 - 日榜(2025-10-16)
ai·开源·github·ai编程·github热榜
努力犯错1 天前
AI视频修复技术入门:从Sora水印谈起,我们如何“抹去”未来影像的瑕疵?
大数据·人工智能·语言模型·开源·音视频