Node-red dans le LAN
On se propose ici de créer un serveur node-red dans notre infrastructure d'autohébergèrent basée sur des Raspberry PI
Cette page est basée sur une page plus complète qui décrit l'installation d'un serveur node red sur raspberry pi de façon autonome (nodered + apache avec module RP + let's encrypt).
Installation
Sur une toute nouvelle installation ou sur un Raspberry PI qui sert déjà a autre chose (même si ce n'est pas le concept ici de faire faire trop de choses à un nœud).
On commence par un simple:
sudo apt update
sudo apt install nodejs
Tout se passe bien. Mais ensuite on installe le gestionnaire de packages npm. Ca semple une formalité mais....
sudo apt install npm
à chez moi pris une éternité et installé une centaine de dépendances. Mais ça a terminé et j'ai pu terminé par :
sudo npm install -g --unsafe-perm node-red
added 312 packages in 47s
63 packages are looking for funding
run `npm fund` for details
Bon, il suffit alors de lancer nodered.
node-red
11 Feb 22:38:13 - [info]
Welcome to Node-RED
===================
11 Feb 22:38:13 - [info] Node-RED version: v4.0.8
11 Feb 22:38:13 - [info] Node.js version: v18.19.0
11 Feb 22:38:13 - [info] Linux 6.6.51+rpt-rpi-v8 arm64 LE
On peut ouvrir avec un navigateur:
http://XX.YY.ZZ.TT:1880
Si l'adresse IP du serveur est XX.YY.ZZ.PP (1880 est le port par défaut de NodeRed)
Bon il y a quelques "popups" de présentation. On peut les lires la première fois!
Premier test
On va créer un petit "Hello world" avec nodered!
On "drague & droppe" trois éléments :
On les relie entre eux:
On édite l'élément "function 1".
msg.payload+=" Hello World!"
return msg;
Et on clique sur "Déployer" (le bouton rouge en haut à droite)
On obtiens la confirmation.
On sélectionne, a droite, la fenêtre debug (la petite coccinelle).
Et on clique sur le carré bleu de l'élément "horodatage".
A chaque clic on a une ligne dans les logs de debug... On a vu que dans "function 1" on ajoute "Hello World" au "timestamp" .
Sécurisation
Ajout d'un contrôle d'accès
Il serait tout de même préférable d'ajouter un "login password" non?
Pour cela, on va tout d'abord encoder un mot de passe. Il y a pour cela une commande : node-red admin hash-pw
node-red admin hash-pw
Password: <ici on tape le mot de passe sans echo>
$2y$08$AK6/jMQoUMpbnSxS3TTv3eIxiQfILfTjulpMvYxzomFi.ZZaz1IFu
On arrête le serveur nodered (ctrl + C)
Et on édite le fichier : /home/admin/.node-red/settings.js si admin est l'utilisateur que fait tourner le serveur.
Dans la section "security" on décommente la partie
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2y$08$AK6/jMQoUMpbnSxS3TTv3eIxiQfILfTjulpMvYxzomFi.ZZaz1IFu",
permissions: "*"
}]
},
On crée un utilisateur nommé "admin" et dont le mot de passe est celui donné à node-red admin hash-pw.
Et on relance le serveur (cette fois ci en "détaché")
nohup node-red &
Et on relance la connexion avec le navigateur:
On rentre Admin + mot de passe et on se retrouve connecté.
Sécuriser en https
Ici on ne sécurise pas la connexion sur le nœud local. C'est le frontal-routeur qui fera le travail de reverse proxy.
Ajouter un module
Sur raspberry pi il existe un module qui permet d'utiliser le GPIO (principalement) et accessoirement le clavier et la souris branché sur ses ports USB.
On se déplace dans le repertoire node-red de l'utilisateur qui lance nodered et on installe le module
/home/nodered/.node-red
npm i node-red-node-pi-gpio
SI on relance nodered et qu'on se connecte on voit apparaitre :
Démarrage automatique de Node-RED via systemd
C'est bien beau tout ça mais si on lance nodered en ligne de commande on a bien les logs sur la console, c'est tres pratique pour comprendre ce qu'il se passe en cas de problème mais si on sort du terminal... ca coupe. On peut lancer ça dans un "screen" mais c'est pas tres propre. D'autant plus que si ca crashe... on a les trace du crash dans le screen mais ca reste planté.
On va créer un service (un demon).
Configuration
On crée le fichier de conf du démon:
sudo vi /etc/systemd/system/nodered.service
On le remplis avec :
[Unit]
Description=Node-RED service
After=network.target
[Service]
User=nodered
Group=nodered
ExecStart=/usr/bin/env node-red
WorkingDirectory=/home/nodered
Restart=always
RestartSec=10
Environment="NODE_OPTIONS=--max_old_space_size=256"
[Install]
WantedBy=multi-user.target
Activation
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable nodered
Arrêt / relance
sudo systemctl start nodered
sudo systemctl stop nodered
Status / logs
sudo systemctl start nodered
Nous donne l'état et les logs.
● nodered.service - Node-RED service
Loaded: loaded (/etc/systemd/system/nodered.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-10-19 15:02:50 CEST; 1min 22s ago
Main PID: 359456 (node-red)
Tasks: 11 (limit: 3922)
CPU: 15.621s
CGroup: /system.slice/nodered.service
└─359456 node-red
Oct 19 15:03:00 main-host env[359456]: 19 Oct 15:03:00 - [info] [mqtt-broker:local MQTT] Connected to broker: mqtt://127.0.0.1:1883
Oct 19 15:03:00 main-host env[359456]: 19 Oct 15:03:00 - [info] [udp out:broadcast] udp re-use socket: -> 255.255.255.255:38899
Oct 19 15:03:00 main-host env[359456]: 19 Oct 15:03:00 - [info] [udp out:sdb-g wiz_37a556] udp re-use socket: -> 192.168.0.xxx:38899
Oct 19 15:03:00 main-host env[359456]: 19 Oct 15:03:00 - [info] [udp out:bureau wiz_388140] udp re-use socket: -> 192.168.0.xxx:38899
Oct 19 15:03:01 main-host env[359456]: 19 Oct 15:03:01 - [info] [hue-bridge:Hue Bridge] Connected to bridge
Oct 19 15:03:01 main-host env[359456]: 19 Oct 15:03:01 - [info] [mqtt-broker:HiveMQ] Connected to broker: mqtts:/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.s1.eu.hivemq.cloud:8883
Oct 19 15:03:01 main-host env[359456]: 19 Oct 15:03:01 - [info] [hue-bridge:Hue Bridge] Processing bridge resources…
Oct 19 15:03:01 main-host env[359456]: 19 Oct 15:03:01 - [info] [hue-bridge:Hue Bridge] Initial emit of resource states…
Oct 19 15:03:02 main-host env[359456]: 19 Oct 15:03:02 - [info] [hue-bridge:Hue Bridge] Keeping nodes up-to-date…
Oct 19 15:03:02 main-host env[359456]: 19 Oct 15:03:02 - [info] [hue-bridge:Hue Bridge] Subscribing to bridge events…
On peut même buter node-red en plein vol:
sudo killall node-red # A la brutal
On attends 10 à 15 sec et on regarde les logs
● nodered.service - Node-RED service
Loaded: loaded (/etc/systemd/system/nodered.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-10-19 15:16:05 CEST; 1min 9s ago
Main PID: 359745 (node-red)
Tasks: 11 (limit: 3922)
CPU: 15.317s
CGroup: /system.slice/nodered.service
└─359745 node-red
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [udp out:broadcast] udp re-use socket: -> 255.255.255.255:38899
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [udp out:sdb-g wiz_37a556] udp re-use socket: -> 192.168.0.xxx:38899
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [udp out:bureau wiz_388140] udp re-use socket: -> 192.168.0.xxx:38899
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [mqtt-broker:local MQTT] Connected to broker: mqtt://127.0.0.1:1883
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [hue-bridge:Hue Bridge] Connected to bridge
Oct 19 15:16:15 main-host env[359745]: 19 Oct 15:16:15 - [info] [mqtt-broker:HiveMQ] Connected to broker: mqtts://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.s1.eu.hivemq.cloud:8883
Oct 19 15:16:16 main-host env[359745]: 19 Oct 15:16:16 - [info] [hue-bridge:Hue Bridge] Processing bridge resources…
Oct 19 15:16:16 main-host env[359745]: 19 Oct 15:16:16 - [info] [hue-bridge:Hue Bridge] Initial emit of resource states…
Oct 19 15:16:16 main-host env[359745]: 19 Oct 15:16:16 - [info] [hue-bridge:Hue Bridge] Keeping nodes up-to-date…
Oct 19 15:16:16 main-host env[359745]: 19 Oct 15:16:16 - [info] [hue-bridge:Hue Bridge] Subscribing to bridge events…
Résultat: Node-RED démarre au boot, redémarre en cas de crash