Intégration Node-RED pour lancer un container en un clic

Ce qu’on fait côté Zigbee2mqtt, c’est que Zigbee2mqtt propose une API qui exporte au format JSON tous les paramètres qui permettent de restaurer une instance de zéro, et on stocke ce JSON dans une « variable » en DB :slight_smile:

Ainsi, la sauvegarde est incluse dans Gladys Plus, et l’intégration Zigbee2mqtt teste la présence de la variable lors d’un démarrage de Gladys, et restaure Zigbee2mqtt.

Si Node-RED propose une API, pourquoi pas. Après, il ne faut pas sauvegarder naïvement le filesystem, c’est la meilleure façon d’avoir une sauvegarde corrompue (et surtout, on va pas s’amuser à sauvegarder des node_modules dans Gladys Plus), si Node-RED ne propose pas d’API, alors ce n’est pas possible…

1 « J'aime »

Apparemment il faut juste ajouter une variable qui définit le path externe vers lequel sera enregistré les flows

-v /var/lib/gladysassistant_test_nodered/node-red/data:/data

https://nodered.org/docs/getting-started/docker

Managing User Data

Once you have Node-RED running with Docker, we need to ensure any added nodes or flows are not lost if the container is destroyed. This user data can be persisted by mounting a data directory to a volume outside the container. This can either be done using a bind mount or a named data volume.

Node-RED uses the /data directory inside the container to store user configuration data.

Using a Host Directory for Persistence (Bind Mount)

To save your Node-RED user directory inside the container to a host directory outside the container, you can use the command below. To allow access to this host directory, the node-red user (default uid=1000) inside the container must have the same uid as the owner of the host directory.

docker run -it -p 1880:1880 -v /home/pi/.node-red:/data --name mynodered nodered/node-red

In this example the host /home/pi/.node-red directory is bound to the container /data directory.

Note: Users migrating from version 0.20 to 1.0 will need to ensure that any existing /data directory has the correct ownership. As of 1.0 this needs to be 1000:1000. This can be forced by the command sudo chown -R 1000:1000 path/to/your/node-red/data

See the wiki for detailed information on permissions.

Je fais des tests cet pm pour cela comme cela si c’est juste une ligne à rajouter… :wink:

Ah bah non je peux pas c’est une ligne à modifier dans la commande que lance @lokkie dans son intégration snif :sleepy: :smiling_face_with_tear: c’est @lokkie le maitre des clès :sob: :rofl:

@pierre-gilles

Non il y a pas besoin le fichier /var/lib/gladysassistant_test_nodered/node-red/packages.json intègre la liste des modules nécessaires aux flows et si ils sont absents alors ils sont rechargés

oui il y a des API mais après je sais pas comment cela peut être mis en oeuvre par @lokkie
https://nodered.org/docs/api/storage/

Storage API

The Storage API provides a pluggable way to configure where the Node-RED runtime stores data.

The information stored by the API includes:

flow configuration
flow credentials
user settings
user sessions
node library content

et les méthodes pour cette api ici
https://nodered.org/docs/api/storage/methods/

Il y a là un passage intéressant

Lors de l’installation de Node-Red sur Docker, votre volume pour le répertoire de données a été créé par et appartient à notre utilisateur « root », dont l’identifiant est « uid=0 gid=0 ». L’utilisateur Node-Red à l’intérieur du conteneur, qui possède le répertoire /data, a cependant des identifiants différents : « uid=1000 gid=1000 ». Vous pouvez résoudre ce problème en vous connectant en SSH sur votre serveur et changer la propriété du volume Docker à l’utilisateur avec l’ID 1000:1000 en exécutant la commande suivante :

Je suis connecté en « root », la commande « sudo » n’est pas utile, mais je vous la met au cas ou.

sudo chown -R 1000:1000 /mnt/node-red/data

Il faudra donc mettre les mêmes droits je pense à

var/lib/gladysassistant_test_nodered/node-red/data

Après c’est vrai que c’est pour le cas d’une utilisation sous linux, sous windows (je pense pas qu’il y ait de problèmes) et sous synology je sais pas (quoique syno c’est du linux à la base mais peut-être que dans le syno il y a une option de sauvegarde intégrée si des utilisateurs de syno peuvent apporter la réponse)

Bonjour @Lokkye
c’est tout bon pour moi, le changement de repertoire (fonctionnait precedement) et les identifiants qui passent du premier coup. Super boulot merci à toi :clap:

1 « J'aime »

@lokkie

Pareil que @psoy tout ok sur cette image :+1: :clap:

pour la sauvegarde il faudrait sauvegarder les fichiers
/var/lib/gladysassistant_test_nodered/node-red
excepté le repertoire contenant les modules (qui sont rechargés en cas d’absence de toute façon)
/var/lib/gladysassistant_test_nodered/node-red/node_modules/
pour infos @pierre-gilles mon répertoire node_modules contient 591 dossiers pour 127 Mo

Non.

Comme dit précédemment, je suis contre une approche fichier, on ne sait pas ce que fait Node-RED au moment où on lit ses fichiers. Si on sauvegarde un fichier A, pendant que Node-RED met à jour un fichier B, puis qu’on prend le fichier B, on obtient un combo A+B qui n’est pas cohérent. Et c’est sans parler de tous les problèmes de compatibilités entre les différentes versions de Node-RED.

C’est juste le meilleur moyen d’avoir des sauvegardes corrompues.

Je suis pour une approche API comme on le fait avec Zigbee2mqtt.

Si c’est beaucoup de travail, je suis pour une première release de l’intégration Node-RED sans nécessairement une sauvegarde dans Gladys, ça peut venir ensuite

1 « J'aime »

Effectivement tu n’as pas tort sur ce point là, je n’y avais pas pensé ! Bien vu :+1:!

Tout à fait je te rejoins là-dessus, l’essentiel est de savoir que l’on peut le faire à la mano et comment le faire pour le moment !

Pour la mise en prod pour paraphraser Murielle Robin « Alors c’est quand est-ce prévu pour ? » :wink:

1 « J'aime »

@lokkie
Juste pour signaler cela :
Après avoir installé l’image de test nodered, cela a changé ces répertoires dans les containers zigbee2mqtt, mqtt, et eclipse-mosquitto donc ces services fonctionne quand on est dans l’instance gladys-test-nodered mais plus dans l’instance gladys, je suppose que l’instance gladyst-test-nodered a un chemin propre qui force ces paramètres pas gênant quand on le sait, il suffit de remover les 3 containers et leurs volumes puis réactiver dans gladys pour que les paramètres reviennent à la normale

image

image

Je suppose qu’une fois l’intégration effective dans gladys cela posera plus de problème.

@cce66 : Ce n’est pas l’image qui change les répertoires de zigbee2mqtt, mqtt et eclipse-mosquitto, c’est la command que tu utilises pour lancer le container gladys.

docker run -d --log-opt max-size=10m --restart=always --privileged --network=host --name gladys-test-nodered -e NODE_ENV=production -e SERVER_PORT=8010 -e TZ=Europe/Paris -e SQLITE_FILE_PATH=/var/lib/gladysassistant/gladys-production.db -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/gladysassistant_test_nodered:/var/lib/gladysassistant -v /dev:/dev -v /run/udev:/run/udev:ro delogzway/gladys:nodered

Dans cette commande le « -v /var/lib/gladysassistant_test_nodered:/var/lib/gladysassistant » defini le dossier qui sera utilisé par gladys. J’utilise cela de mon coté pour eviter de faire planter mon installation qui est utilisé par toute la famille.

@pierre-gilles : je pense qu’il serait preferable de parler de la sauvegarde/restoration dans un autre sujet car il y a deja pas mal de modification sur cette PR

@All : Est ce que l’on est ready pour la merge en prod ?

1 « J'aime »

@Lokkye merci en fait je comprend avec tes explications qu’il faut pas laisser tourner les 2 instances en même temps mais juste le temps du test (il y a des fois je suis en mode quiche :rofl: !)
Par contre, dans la précipitation j’ai refais mon Nuc ce WE et…j’ai oublié de sauvegarder mes flows :tired_face:…heureusement je les avais en double sur un autre Nuc sous HomeAassistant ! :blush:
C’est vrai que cela sera un plus la sauvegarde mais dans un autre sujet effectivement ! :wink:
En tout cas vivement la mise en prod ! :+1:

1 « J'aime »

Oui 100% d’accord, on reste sur les fonctionnalités actuellement développée c’est déjà super :slight_smile:

@Lokkye est-ce que tu as rajouté ça dans la PR ?

1 « J'aime »

Bonjour @Lokkye @pierre-gilles ,

Pour le backup j’ai fait un mini-tuto pour backuper les flows necessaires de node-red et faire un envoi par email…en attendant le dev de @lokkie !!! :wink:

Comme quoi ma boulette de ce WE m’a inspiré :rofl:

4 « J'aime »

@pierre-gilles : Je viens de faire la modification pour rajouter le message


Le lien pointe vers la page de @cce66 :slight_smile:

1 « J'aime »

@Lokkye Du coup je viens de tester l’image en réel sur un Raspberry Pi 3B+ :slight_smile:

Tout fonctionne nickel ! Beau boulot :clap: :clap:

Le seul truc c’est que je n’ai pas vu le message de warning pour les sauvegardes Gladys Plus, mais j’imagine que tu n’avais pas re-lancé de build Docker après avoir ajouté ça (tkt pas, pas besoin de le faire pour juste un bandeau)

Edit: PR mergé, ça partira dans la prochaine version de Gladys :rocket:

7 « J'aime »

Salut @Lokkye, il me manque la documentation Node-RED :smiley:

Je suis pas chez moi pour le moment. Je fais cela quand je rentre

1 « J'aime »

@Lokkye

Cela marches nickel ! :+1: :clap:

Par contre il faudrait ajouter un message warning comme quoi le fait de désactiver Node-RED désinstalle le container et supprime les flux actuels !!! :cold_face:
(en attendant la version qui permettra de conserver les datas comme pour les containers zigbee2mqtt et mqtt :blush:)

Un bouton « Redémarrer » pour restart le container node-red (parfois nécessaire quand il plante) est possible ?

Par contre quand dans la page système, on arrête le service (j’ai pensé que cela était pareil que restart le service, oops :jack_o_lantern: ) bah cela a le même effet que « Désactiver » dans la page Node-Red donc cela désinstalle le container et supprime les flux (je venais de recharger tous les node_modules :sob:)

et ensuite on a cela dans la page Node-Red donc la page est pas à jour

En cliquant sur « Désactiver » on revient à la situation normale et on peut réactiver sans problème !

D’autre part, je note que si on arrête extérieurement à gladys ou si le container s’est arreté suite à un bug puis qu’on le restart à la mano, on se retrouve avec le même état que si on le désactive dans les services, je sais pas si il y a un refresh de la page quand on viens dessus http://IP/dashboard/integration/device/node-red mais ca correspond pas à l’état réel du container…voila voila quelques remontées ! :jack_o_lantern:

Cette intégration est disponible dans Gladys Assistant 4.30, je ferme ce sujet pour libérer les votes !

Pour tout retour sur ce développement, n’hésitez pas à créer un nouveau sujet sur le forum :slight_smile: