Node-Red的部署與啟動(dòng)實(shí)現(xiàn)
一、Node-RED 運(yùn)行機(jī)制
Node-RED 的架構(gòu)基于 Node.js 的事件驅(qū)動(dòng)模型,核心由?運(yùn)行時(shí)(Runtime)?、編輯器(Editor)和節(jié)點(diǎn)(Nodes)三部分組成,三者協(xié)同實(shí)現(xiàn)可視化流程編程與執(zhí)行。?
運(yùn)行時(shí)(
Runtime):流程執(zhí)行的 “大腦”??核心功能?:負(fù)責(zé)加載節(jié)點(diǎn)、解析流程配置、管理節(jié)點(diǎn)間消息傳遞、處理事件觸發(fā),是流程運(yùn)行的核心引擎。?
?技術(shù)細(xì)節(jié)?:?
- 基于 Node.js 的EventEmitter模塊實(shí)現(xiàn)事件監(jiān)聽與觸發(fā),確保消息處理的高效性與非阻塞性。?
- 采用 “流(
Flow)” 作為流程的基本單位,每個(gè)流由多個(gè)節(jié)點(diǎn)和連接構(gòu)成,運(yùn)行時(shí)通過解析 JSON 格式的流配置文件,將節(jié)點(diǎn)實(shí)例化并建立消息路由。? - 支持多流并行運(yùn)行,不同流之間可通過 “鏈接節(jié)點(diǎn)(
Link Node)” 或全局上下文(Context)實(shí)現(xiàn)數(shù)據(jù)交互。?
?消息模型?:?
- 節(jié)點(diǎn)間傳遞的消息為
msg對(duì)象,默認(rèn)包含msg.payload(消息內(nèi)容)和msg.topic(消息主題),用戶可自定義添加其他屬性(如msg.timestamp、msg.source)。? - 消息傳遞支持 “一對(duì)一”“一對(duì)多”“多對(duì)一” 模式,例如一個(gè) “注入節(jié)點(diǎn)” 可同時(shí)向多個(gè) “函數(shù)節(jié)點(diǎn)” 發(fā)送消息。?
- 節(jié)點(diǎn)間傳遞的消息為
編輯器(
Editor):可視化開發(fā)的 “畫布”??核心功能?:提供基于瀏覽器的可視化界面,支持節(jié)點(diǎn)拖拽、連接配置、流程保存與部署,是用戶與 Node-RED 交互的主要入口。?
?技術(shù)細(xì)節(jié)?:?
- 編輯器與運(yùn)行時(shí)通過
WebSocket協(xié)議實(shí)時(shí)通信,實(shí)現(xiàn) “部署即生效”:用戶點(diǎn)擊 “部署” 后,編輯器將流程配置 JSON 發(fā)送至運(yùn)行時(shí),運(yùn)行時(shí)即時(shí)更新并執(zhí)行流程,無需重啟服務(wù)。? - 支持 “工作區(qū)(
Workspace)” 分區(qū),可通過標(biāo)簽頁切換不同流程,方便大型項(xiàng)目的模塊化管理。?
- 編輯器與運(yùn)行時(shí)通過
節(jié)點(diǎn)(
Nodes):流程功能的 “積木”??核心定位?:節(jié)點(diǎn)是封裝特定功能的代碼模塊,是流程的基本功能單元,用戶通過組合節(jié)點(diǎn)實(shí)現(xiàn)業(yè)務(wù)邏輯。?
?結(jié)構(gòu)組成?:每個(gè)節(jié)點(diǎn)包含
html(編輯器配置界面)、js(運(yùn)行時(shí)邏輯)和package.json(元數(shù)據(jù))三部分:?html文件:定義節(jié)點(diǎn)在編輯器中的外觀(圖標(biāo)、顏色)、配置項(xiàng)(如 API 密鑰、端口號(hào)),通過RED.nodes.registerType注冊(cè)節(jié)點(diǎn)類型。?js文件:實(shí)現(xiàn)節(jié)點(diǎn)的運(yùn)行時(shí)邏輯,包括on("input")(接收輸入消息觸發(fā))、send()(發(fā)送輸出消息)等核心方法。?package.json:聲明節(jié)點(diǎn)名稱、版本、依賴(如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的自啟動(dòng)
npm install -g pm2 pm2 start node-red --node-args="--max-old-space-size=1024" #根據(jù)實(shí)際內(nèi)存自行調(diào)整 pm2 save pm2 startup
三、Node-Red的啟動(dòng)參數(shù)
3.1 啟動(dòng)命令
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è)置運(yùn)行時(shí)監(jiān)聽的 TCP 端口。默認(rèn)值:1880--safe:?jiǎn)?dòng) Node-RED 但不啟動(dòng)流程。當(dāng)部署更改時(shí),流程才會(huì)啟動(dòng)-s, --settings FILE:設(shè)置要使用的配置文件。默認(rèn):settings.js在userDir中--title TITLE:設(shè)置進(jìn)程窗口標(biāo)題-u, --userDir DIR:設(shè)置要使用的用戶目錄。默認(rèn):~/.node-red-v:?jiǎn)⒂迷敿?xì)輸出-D X=Y|@file:覆蓋單個(gè)設(shè)置flows.json|projectName:如果項(xiàng)目功能未啟用,這將設(shè)置您要與之工作的流程文件。如果項(xiàng)目功能已啟用,這將確定應(yīng)啟動(dòng)哪個(gè)項(xiàng)目。-?, --help:顯示命令行使用幫助并退出
3.3 參數(shù)示例
3.3.1 啟用詳細(xì)輸出
?參數(shù)作用?:?jiǎn)?dòng) Node-RED 時(shí)輸出詳細(xì)日志(如模塊加載、配置讀取等過程),用于調(diào)試問題。
?命令示例?:
node-red -v
?場(chǎng)景說明?:當(dāng) Node-RED 啟動(dòng)失?。ㄈ绮寮?bào)錯(cuò)、端口占用)時(shí),通過
-v查看詳細(xì)日志,快速定位問題原因(例如 “某個(gè)節(jié)點(diǎn)模塊缺失”“配置文件語法錯(cuò)誤”)。
3.3.2 顯示幫助信息
?參數(shù)作用?:輸出所有命令行參數(shù)的用法說明,無需啟動(dòng) Node-RED,僅用于查詢參數(shù)。
?命令示例?(兩種寫法均可):
# 寫法1:短參數(shù) -? node-red -? # 寫法2:長(zhǎng)參數(shù) --help node-red --help
?場(chǎng)景說明?:忘記某個(gè)參數(shù)的作用時(shí),直接執(zhí)行該命令快速查閱,例如 “想不起用戶目錄參數(shù)是
--userDir還是--user” 時(shí),通過--help確認(rèn)。
3.3 指定配置文件 {#boot-custom-settings}
?參數(shù)作用?:不使用默認(rèn)的
settings.js(默認(rèn)在用戶目錄下),而是指定自定義的配置文件(如自定義節(jié)點(diǎn)路徑、認(rèn)證規(guī)則)。?命令示例?:
# 假設(shè)自定義配置文件存放在 /home/user/custom-node-red/settings-prod.js node-red --settings /home/user/custom-node-red/settings-prod.js
?場(chǎng)景說明?:多環(huán)境部署時(shí)使用(如開發(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 的用戶目錄(默認(rèn)是
~/.node-red,存放流程文件、插件、配置),實(shí)現(xiàn)多用戶 / 多實(shí)例隔離。?命令示例?:
# 為“設(shè)備監(jiān)控”場(chǎng)景創(chuàng)建獨(dú)立用戶目錄 /opt/node-red/device-monitor node-red --userDir /opt/node-red/device-monitor
?場(chǎng)景說明?:同一臺(tái)服務(wù)器需要運(yùn)行多個(gè) Node-RED 實(shí)例(如 “設(shè)備監(jiān)控” 和 “數(shù)據(jù)采集”),通過
--userDir隔離各自的流程和插件,避免沖突。
3.5 指定監(jiān)聽端口
?參數(shù)作用?:設(shè)置 Node-RED 后臺(tái)服務(wù)的 TCP 監(jiān)聽端口(默認(rèn)是
1880),解決端口占用問題或?qū)崿F(xiàn)多實(shí)例端口區(qū)分。?命令示例?(兩種寫法均可):
# 寫法1:短參數(shù) -p,指定端口為 1881 node-red -p 1881 # 寫法2:長(zhǎng)參數(shù) --port,指定端口為 1882(用于生產(chǎn)環(huán)境實(shí)例) node-red --port 1882
?場(chǎng)景說明?:默認(rèn)端口 1880 已被其他服務(wù)占用,或需要運(yùn)行兩個(gè) Node-RED 實(shí)例(分別用 1881 和 1882 端口)時(shí),用該參數(shù)指定端口。
3.6 設(shè)置進(jìn)程窗口標(biāo)題
?參數(shù)作用?:自定義 Node-RED 運(yùn)行時(shí)的進(jìn)程窗口標(biāo)題(僅在終端 / 命令行窗口中顯示),便于識(shí)別多實(shí)例進(jìn)程。
?命令示例?:
# 為“車間溫濕度監(jiān)控”實(shí)例設(shè)置窗口標(biāo)題 node-red --title "Node-RED - 車間溫濕度監(jiān)控" --port 1883
?場(chǎng)景說明?:在終端中同時(shí)運(yùn)行多個(gè) Node-RED 實(shí)例時(shí),默認(rèn)窗口標(biāo)題都是 “node-red”,通過
--title自定義標(biāo)題(如 “車間溫濕度監(jiān)控”“設(shè)備故障報(bào)警”),可快速區(qū)分不同實(shí)例。
3.7 安全模式啟動(dòng)
?參數(shù)作用?:?jiǎn)?dòng) Node-RED 但不自動(dòng)運(yùn)行已部署的流程,僅加載編輯器;需手動(dòng)在編輯器中點(diǎn)擊 “部署”,流程才會(huì)啟動(dòng)。
?命令示例?:
# 安全模式啟動(dòng),避免流程啟動(dòng)時(shí)因錯(cuò)誤導(dǎo)致崩潰 node-red --safe --port 1880
?場(chǎng)景說明?:流程中存在錯(cuò)誤(如 “MQTT 服務(wù)器地址寫錯(cuò)”“函數(shù)節(jié)點(diǎn)語法錯(cuò)誤”),直接啟動(dòng)可能導(dǎo)致 Node-RED 崩潰;用
--safe啟動(dòng)后,先在編輯器中修復(fù)錯(cuò)誤,再部署運(yùn)行流程,避免啟動(dòng)失敗。
3.8 指定流程文件或項(xiàng)目名
該參數(shù)分兩種場(chǎng)景(取決于是否啟用 “項(xiàng)目功能”),示例分別如下:
場(chǎng)景 1:未啟用項(xiàng)目功能(指定流程文件)
?參數(shù)作用?:不使用默認(rèn)的 flows_<主機(jī)名>.json(用戶目錄下),而是指定自定義的流程文件(如備份的舊流程、特定場(chǎng)景的流程)。
?命令示例?:
# 加載備份的流程文件 /home/user/backups/node-red/flows-20240501.json node-red /home/user/backups/node-red/flows-20240501.json
?場(chǎng)景說明?:需要恢復(fù)歷史備份的流程,或切換到另一個(gè)場(chǎng)景的流程(如 “工作日流程” 和 “節(jié)假日流程”),直接指定流程文件路徑即可加載。
場(chǎng)景 2:已啟用項(xiàng)目功能(指定項(xiàng)目名)
?參數(shù)作用?:Node-RED 啟用 “項(xiàng)目功能” 后(需在編輯器中配置),通過項(xiàng)目名指定啟動(dòng)哪個(gè)項(xiàng)目(每個(gè)項(xiàng)目包含獨(dú)立的流程、配置)。
?命令示例?:
# 啟動(dòng)名為“智慧家居控制”的項(xiàng)目 node-red 智慧家居控制
?場(chǎng)景說明?:?jiǎn)⒂庙?xiàng)目功能后,多個(gè)項(xiàng)目的文件被統(tǒng)一管理(如
Git版本控制),通過項(xiàng)目名快速啟動(dòng)目標(biāo)項(xiàng)目,無需手動(dòng)指定流程文件路徑。
3.9 覆蓋單個(gè)配置
?參數(shù)作用?:臨時(shí)覆蓋 settings.js中的某個(gè)配置(無需修改配置文件),支持 “單鍵值覆蓋” 或 “通過文件批量覆蓋”。
?命令示例?(兩種用法):
- ?單鍵值覆蓋?(如臨時(shí)關(guān)閉編輯器訪問限制):
# 覆蓋 "editorTheme.disableEdit" 配置,允許編輯(默認(rèn)可能為 false) node-red -D editorTheme.disableEdit=true --port 1880
- ?文件批量覆蓋?(如通過 override.conf批量修改配置):
# 先創(chuàng)建 override.conf 文件,內(nèi)容為: # editorTheme.title=臨時(shí)測(cè)試環(huán)境 # httpNode.auth.user=test # 再通過 -D @file 加載該文件 node-red -D @/home/user/node-red-override.conf
?場(chǎng)景說明?:臨時(shí)測(cè)試配置(如 “臨時(shí)允許匿名訪問編輯器”“臨時(shí)修改 HTTP 節(jié)點(diǎn)的認(rèn)證用戶”),無需修改
settings.js,測(cè)試完成后直接刪除參數(shù)即可恢復(fù)默認(rèn)配置。
四、版本升級(jí)
sudo npm install -g --unsafe-perm node-red
到此這篇關(guān)于Node-Red的部署與啟動(dòng)實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Node-Red 部署與啟動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nodejs環(huán)境實(shí)現(xiàn)socket通信過程解析
這篇文章主要介紹了Nodejs環(huán)境實(shí)現(xiàn)socket通信過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
獨(dú)立部署小程序基于nodejs的服務(wù)器過程詳解
這篇文章主要介紹了獨(dú)立部署小程序基于nodejs的服務(wù)器過程詳解,完全自定義的部署小程序服務(wù)器, 不依托于騰訊云服務(wù)器體系. 以阿里云服務(wù)器為基礎(chǔ)建立.服務(wù)器語言選用nodejs.,需要的朋友可以參考下2019-06-06
Node.js完整實(shí)現(xiàn)博客系統(tǒng)詳解
這篇文章主要介紹了Node.js完整實(shí)現(xiàn)一個(gè)博客系統(tǒng)的流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳
這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下2015-02-02
sublime text配置node.js調(diào)試(圖文教程)
下面小編就為大家分享一篇sublime text配置node.js調(diào)試(圖文教程),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-11-11
Nodejs實(shí)現(xiàn)短信驗(yàn)證碼功能
使用Nodejs的開發(fā)者愈來越多,基于Nodejs的后臺(tái)開發(fā)也多了起來,像短信驗(yàn)證碼、短信群發(fā)、國(guó)際短信這些需求,完全可以采用第三方接口來實(shí)現(xiàn),云片就提供了這樣的接口2017-02-02
詳解如何在NodeJS應(yīng)用程序中處理多個(gè)API請(qǐng)求
NodeJS默認(rèn)是異步的,這意味著它已經(jīng)能夠同時(shí)處理多個(gè)請(qǐng)求,但它只適用于I/O操作,如HTTP請(qǐng)求、文件系統(tǒng)操作、數(shù)據(jù)庫查詢、實(shí)時(shí)聊天應(yīng)用等,在處理CPU密集型任務(wù)時(shí),可能需要很長(zhǎng)時(shí)間,這就是為什么NodeJS提供了一些我們將在下面介紹的特定包2023-12-12
node.js基于express使用websocket的方法
這篇文章主要介紹了node.js基于express使用websocket的方法,結(jié)合實(shí)例形式分析了node.js基于express調(diào)用websocket相關(guān)設(shè)置與使用操作技巧,需要的朋友可以參考下2017-11-11

