Node-Red的部署與啟動實現(xiàn)
一、Node-RED 運行機制
Node-RED 的架構(gòu)基于 Node.js 的事件驅(qū)動模型,核心由?運行時(Runtime)?、編輯器(Editor)和節(jié)點(Nodes)三部分組成,三者協(xié)同實現(xiàn)可視化流程編程與執(zhí)行。?
運行時(
Runtime):流程執(zhí)行的 “大腦”??核心功能?:負責加載節(jié)點、解析流程配置、管理節(jié)點間消息傳遞、處理事件觸發(fā),是流程運行的核心引擎。?
?技術(shù)細節(jié)?:?
- 基于 Node.js 的EventEmitter模塊實現(xiàn)事件監(jiān)聽與觸發(fā),確保消息處理的高效性與非阻塞性。?
- 采用 “流(
Flow)” 作為流程的基本單位,每個流由多個節(jié)點和連接構(gòu)成,運行時通過解析 JSON 格式的流配置文件,將節(jié)點實例化并建立消息路由。? - 支持多流并行運行,不同流之間可通過 “鏈接節(jié)點(
Link Node)” 或全局上下文(Context)實現(xiàn)數(shù)據(jù)交互。?
?消息模型?:?
- 節(jié)點間傳遞的消息為
msg對象,默認包含msg.payload(消息內(nèi)容)和msg.topic(消息主題),用戶可自定義添加其他屬性(如msg.timestamp、msg.source)。? - 消息傳遞支持 “一對一”“一對多”“多對一” 模式,例如一個 “注入節(jié)點” 可同時向多個 “函數(shù)節(jié)點” 發(fā)送消息。?
- 節(jié)點間傳遞的消息為
編輯器(
Editor):可視化開發(fā)的 “畫布”??核心功能?:提供基于瀏覽器的可視化界面,支持節(jié)點拖拽、連接配置、流程保存與部署,是用戶與 Node-RED 交互的主要入口。?
?技術(shù)細節(jié)?:?
- 編輯器與運行時通過
WebSocket協(xié)議實時通信,實現(xiàn) “部署即生效”:用戶點擊 “部署” 后,編輯器將流程配置 JSON 發(fā)送至運行時,運行時即時更新并執(zhí)行流程,無需重啟服務(wù)。? - 支持 “工作區(qū)(
Workspace)” 分區(qū),可通過標簽頁切換不同流程,方便大型項目的模塊化管理。?
- 編輯器與運行時通過
節(jié)點(
Nodes):流程功能的 “積木”??核心定位?:節(jié)點是封裝特定功能的代碼模塊,是流程的基本功能單元,用戶通過組合節(jié)點實現(xiàn)業(yè)務(wù)邏輯。?
?結(jié)構(gòu)組成?:每個節(jié)點包含
html(編輯器配置界面)、js(運行時邏輯)和package.json(元數(shù)據(jù))三部分:?html文件:定義節(jié)點在編輯器中的外觀(圖標、顏色)、配置項(如 API 密鑰、端口號),通過RED.nodes.registerType注冊節(jié)點類型。?js文件:實現(xiàn)節(jié)點的運行時邏輯,包括on("input")(接收輸入消息觸發(fā))、send()(發(fā)送輸出消息)等核心方法。?package.json:聲明節(jié)點名稱、版本、依賴(如mqtt庫)、兼容的 Node-RED 版本等信息。
二、安裝Node-Red
2.1 安裝NVM
這里以Linux系統(tǒng)為例,推薦使用NVM安裝NodeJS,方便后續(xù)管理
bash -c "$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)" source ~/.nvm/nvm.sh
2.2 安裝NodeJS
nvm install v22.16.0
2.3 安裝Node-Red
npm install -g --unsafe-perm node-red
2.4 Node-Red的自啟動
npm install -g pm2 pm2 start node-red --node-args="--max-old-space-size=1024" #根據(jù)實際內(nèi)存自行調(diào)整 pm2 save pm2 startup
三、Node-Red的啟動參數(shù)
3.1 啟動命令
node-red [-v] [-?] [--settings settings.js] [--userDir DIR]
[--port PORT] [--title TITLE] [--safe] [flows.json|projectName]
[-D X=Y|@file]
3.2 參數(shù)說明
-p, --port PORT:設(shè)置運行時監(jiān)聽的 TCP 端口。默認值:1880--safe:啟動 Node-RED 但不啟動流程。當部署更改時,流程才會啟動-s, --settings FILE:設(shè)置要使用的配置文件。默認:settings.js在userDir中--title TITLE:設(shè)置進程窗口標題-u, --userDir DIR:設(shè)置要使用的用戶目錄。默認:~/.node-red-v:啟用詳細輸出-D X=Y|@file:覆蓋單個設(shè)置flows.json|projectName:如果項目功能未啟用,這將設(shè)置您要與之工作的流程文件。如果項目功能已啟用,這將確定應(yīng)啟動哪個項目。-?, --help:顯示命令行使用幫助并退出
3.3 參數(shù)示例
3.3.1 啟用詳細輸出
?參數(shù)作用?:啟動 Node-RED 時輸出詳細日志(如模塊加載、配置讀取等過程),用于調(diào)試問題。
?命令示例?:
node-red -v
?場景說明?:當 Node-RED 啟動失?。ㄈ绮寮箦e、端口占用)時,通過
-v查看詳細日志,快速定位問題原因(例如 “某個節(jié)點模塊缺失”“配置文件語法錯誤”)。
3.3.2 顯示幫助信息
?參數(shù)作用?:輸出所有命令行參數(shù)的用法說明,無需啟動 Node-RED,僅用于查詢參數(shù)。
?命令示例?(兩種寫法均可):
# 寫法1:短參數(shù) -? node-red -? # 寫法2:長參數(shù) --help node-red --help
?場景說明?:忘記某個參數(shù)的作用時,直接執(zhí)行該命令快速查閱,例如 “想不起用戶目錄參數(shù)是
--userDir還是--user” 時,通過--help確認。
3.3 指定配置文件 {#boot-custom-settings}
?參數(shù)作用?:不使用默認的
settings.js(默認在用戶目錄下),而是指定自定義的配置文件(如自定義節(jié)點路徑、認證規(guī)則)。?命令示例?:
# 假設(shè)自定義配置文件存放在 /home/user/custom-node-red/settings-prod.js node-red --settings /home/user/custom-node-red/settings-prod.js
?場景說明?:多環(huán)境部署時使用(如開發(fā)環(huán)境、生產(chǎn)環(huán)境),生產(chǎn)環(huán)境的
settings-prod.js可能關(guān)閉調(diào)試日志、啟用 HTTPS,通過該參數(shù)快速切換配置。
3.4 指定用戶目錄
?參數(shù)作用?:自定義 Node-RED 的用戶目錄(默認是
~/.node-red,存放流程文件、插件、配置),實現(xiàn)多用戶 / 多實例隔離。?命令示例?:
# 為“設(shè)備監(jiān)控”場景創(chuàng)建獨立用戶目錄 /opt/node-red/device-monitor node-red --userDir /opt/node-red/device-monitor
?場景說明?:同一臺服務(wù)器需要運行多個 Node-RED 實例(如 “設(shè)備監(jiān)控” 和 “數(shù)據(jù)采集”),通過
--userDir隔離各自的流程和插件,避免沖突。
3.5 指定監(jiān)聽端口
?參數(shù)作用?:設(shè)置 Node-RED 后臺服務(wù)的 TCP 監(jiān)聽端口(默認是
1880),解決端口占用問題或?qū)崿F(xiàn)多實例端口區(qū)分。?命令示例?(兩種寫法均可):
# 寫法1:短參數(shù) -p,指定端口為 1881 node-red -p 1881 # 寫法2:長參數(shù) --port,指定端口為 1882(用于生產(chǎn)環(huán)境實例) node-red --port 1882
?場景說明?:默認端口 1880 已被其他服務(wù)占用,或需要運行兩個 Node-RED 實例(分別用 1881 和 1882 端口)時,用該參數(shù)指定端口。
3.6 設(shè)置進程窗口標題
?參數(shù)作用?:自定義 Node-RED 運行時的進程窗口標題(僅在終端 / 命令行窗口中顯示),便于識別多實例進程。
?命令示例?:
# 為“車間溫濕度監(jiān)控”實例設(shè)置窗口標題 node-red --title "Node-RED - 車間溫濕度監(jiān)控" --port 1883
?場景說明?:在終端中同時運行多個 Node-RED 實例時,默認窗口標題都是 “node-red”,通過
--title自定義標題(如 “車間溫濕度監(jiān)控”“設(shè)備故障報警”),可快速區(qū)分不同實例。
3.7 安全模式啟動
?參數(shù)作用?:啟動 Node-RED 但不自動運行已部署的流程,僅加載編輯器;需手動在編輯器中點擊 “部署”,流程才會啟動。
?命令示例?:
# 安全模式啟動,避免流程啟動時因錯誤導(dǎo)致崩潰 node-red --safe --port 1880
?場景說明?:流程中存在錯誤(如 “MQTT 服務(wù)器地址寫錯”“函數(shù)節(jié)點語法錯誤”),直接啟動可能導(dǎo)致 Node-RED 崩潰;用
--safe啟動后,先在編輯器中修復(fù)錯誤,再部署運行流程,避免啟動失敗。
3.8 指定流程文件或項目名
該參數(shù)分兩種場景(取決于是否啟用 “項目功能”),示例分別如下:
場景 1:未啟用項目功能(指定流程文件)
?參數(shù)作用?:不使用默認的 flows_<主機名>.json(用戶目錄下),而是指定自定義的流程文件(如備份的舊流程、特定場景的流程)。
?命令示例?:
# 加載備份的流程文件 /home/user/backups/node-red/flows-20240501.json node-red /home/user/backups/node-red/flows-20240501.json
?場景說明?:需要恢復(fù)歷史備份的流程,或切換到另一個場景的流程(如 “工作日流程” 和 “節(jié)假日流程”),直接指定流程文件路徑即可加載。
場景 2:已啟用項目功能(指定項目名)
?參數(shù)作用?:Node-RED 啟用 “項目功能” 后(需在編輯器中配置),通過項目名指定啟動哪個項目(每個項目包含獨立的流程、配置)。
?命令示例?:
# 啟動名為“智慧家居控制”的項目 node-red 智慧家居控制
?場景說明?:啟用項目功能后,多個項目的文件被統(tǒng)一管理(如
Git版本控制),通過項目名快速啟動目標項目,無需手動指定流程文件路徑。
3.9 覆蓋單個配置
?參數(shù)作用?:臨時覆蓋 settings.js中的某個配置(無需修改配置文件),支持 “單鍵值覆蓋” 或 “通過文件批量覆蓋”。
?命令示例?(兩種用法):
- ?單鍵值覆蓋?(如臨時關(guān)閉編輯器訪問限制):
# 覆蓋 "editorTheme.disableEdit" 配置,允許編輯(默認可能為 false) node-red -D editorTheme.disableEdit=true --port 1880
- ?文件批量覆蓋?(如通過 override.conf批量修改配置):
# 先創(chuàng)建 override.conf 文件,內(nèi)容為: # editorTheme.title=臨時測試環(huán)境 # httpNode.auth.user=test # 再通過 -D @file 加載該文件 node-red -D @/home/user/node-red-override.conf
?場景說明?:臨時測試配置(如 “臨時允許匿名訪問編輯器”“臨時修改 HTTP 節(jié)點的認證用戶”),無需修改
settings.js,測試完成后直接刪除參數(shù)即可恢復(fù)默認配置。
四、版本升級
sudo npm install -g --unsafe-perm node-red
到此這篇關(guān)于Node-Red的部署與啟動實現(xiàn)的文章就介紹到這了,更多相關(guān)Node-Red 部署與啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Node.JS循環(huán)刪除非空文件夾及子目錄下的所有文件
這篇文章主要介紹了Node.JS循環(huán)刪除非空文件夾及子目錄下的所有文件及node.js遞歸刪除非空文件夾的實例代碼,需要的朋友可以參考下2018-03-03
Node.js基礎(chǔ)入門之回調(diào)函數(shù)及異步與同步詳解
Node.js是一個基于Chrome?V8引擎的JavaScript運行時。類似于Java中的JRE,.Net中的CLR。本文將詳細為大家介紹Node.js中的回調(diào)函數(shù)及異步與同步,感興趣的可以了解一下2022-03-03
node schedule實現(xiàn)定時任務(wù)的示例代碼
實際工作中,可能會遇到定時清除某個文件夾內(nèi)容,本文主要介紹了node schedule實現(xiàn)定時任務(wù)的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-08-08
使用Node.js實現(xiàn)Clean?Architecture方法示例詳解
這篇文章主要為大家介紹了使用Node.js實現(xiàn)Clean?Architecture方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

