Node-RED. Sauvegarde automatique des flows par email, FTP, copie locale

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Node-RED ne dispose d’aucun outil de sauvegarde automatique par défaut. Même si NodeRED a atteint une certaine stabilité, il est important de sauvegarder régulièrement les flows en cas de problème avec un module ou en cas de panne par exemple. 

 

Localiser les fichiers NodeRED

Les flows sont stockés dans un fichier au format JSON par NodeRED dans le répertoire utilisateur. Par défaut, les fichiers sont enregistrés dans le répertoire /Users/<user>/.node-red sur Windows (c:\users\<utilisateur>.node-red  ), macOS ou Linux.

Mieux que naviguer dans les répertoires, sur Linux ou macOS, il suffit d’exécuter cette commande pour localiser le répertoire d’installation de Node-RED.

La commande sudo est optionnelle si vous êtes connecté avec un compte administrateur (root)

sudo find / -type d -name ".node-red" -ls

La commande retourne la liste des répertoires qui contient le dossier recherché avec les droits attribués

1450744 4 drwxr-xr-x 5 projetsdiy projetsdiy 4096 avril 2 22:58 /home/projetsdiy/.node-red

Déplacez vous dans le répertoire

cd /home/projetsdiy/.node-red

puis exécutez la commande ls pour lister les fichiers stockés dans le dossier

flows_projetsdiy_cred.json  
flows_projetsdiy.json  
lib  
node_modules  
package.json  
package-lock.json  
settings.js 
start  
start_cred

Vous devez y trouver les deux fichiers utilisateur nommés flows_<hostname>.json et flows_<hostname>_cred.json. Hostname est le nom attribué au système. Le fichier cred (pour credential, node-red-contrib-credential) est optionnel. Il permet de stocker de façon séparée les identifiants utilisateur.

Sauvegarde manuelle des flows Node-RED

La première solution consiste à exporter manuellement les flows NodeRed depuis la palette

nodered export flow backup

Dans la boite de dialogue qui s’ouvre, plusieurs options sont disponibles :

  1. Exporter uniquement le flow courant
  2. Exporter tous les flows (conseillé)
  3. L’option Download permet de télécharger les flows sous la forme d’un fichier JSON
  4. L’option Copy to Clipboard (déconseillé) permet de copier dans le presse papier du système le contenu du fichier JSON. Il faudra ensuite enregistrer le contenu du presse papier dans un fichier texte.

nodered manual backup export flow backup

Sauvegarde automatique locale

Valerio Vaccaro a proposé un flow qui permet faire une copie de sauvegarde locale. Chaque copie est horodatée à la date du backup. Je vous conseille de créer un sous-répertoire dans lequel les fichiers de sauvegarde seront enregistrés.

N’oubliez pas de modifier les chemins des fichiers avant de déployer le projet.

[{"id":"c9a474c5.cc2e98","type":"file in","z":"5519a8f3.84c4c8","name":"flows_vps.json","filename":"/root/.node-red/flows_vps.json","format":"utf8","x":360,"y":460,"wires":[["cd01d8fb.bcdf58"]]},{"id":"e6ef0ce1.d67b9","type":"file","z":"5519a8f3.84c4c8","name":"","filename":"Save file","appendNewline":false,"createDir":false,"overwriteFile":"true","x":720,"y":460,"wires":[[]]},{"id":"562a7cf3.6bfc14","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"Start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":130,"y":460,"wires":[["c9a474c5.cc2e98","d6075a9a.835f08"]]},{"id":"cd01d8fb.bcdf58","type":"function","z":"5519a8f3.84c4c8","name":"new filename","func":"msg.filename = \"/root/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":550,"y":460,"wires":[["e6ef0ce1.d67b9"]]},{"id":"d6075a9a.835f08","type":"file in","z":"5519a8f3.84c4c8","name":"flows_vps_cred.json","filename":"/root/.node-red/flows_vps_cred.json","format":"utf8","x":380,"y":520,"wires":[["2b057928.89d4c6"]]},{"id":"6ed812ec.4e625c","type":"file","z":"5519a8f3.84c4c8","name":"","filename":"Save file","appendNewline":false,"createDir":false,"overwriteFile":"true","x":720,"y":520,"wires":[[]]},{"id":"2b057928.89d4c6","type":"function","z":"5519a8f3.84c4c8","name":"new filename","func":"msg.filename = \"/root/.node-red/backup_\"+(new Date().toISOString().replace(':', '_').replace(':', '_').replace(/\\..+/, ''))+\"_flows_vps_cred.json\";\nreturn msg;\n","outputs":1,"noerr":0,"x":570,"y":520,"wires":[["6ed812ec.4e625c"]]}]

nodered local backup

Backup par email

La copie manuelle peut convenir lorsqu’on “bricole” avec Node-RED. Pour un projet en production, c’est rapidement contraignant et très risqué. Voyons comment on peut automatiser la sauvegarde très facilement avec un petit script qui envoi régulièrement une sauvegarde par email.

Commencez par ajouter le Node email depuis le gestionnaire de palette

nodered install email module

Ajoutez ensuite un Node inject

nodered inject node

Editez le Node (double-clic) :

  • Donnez un libellé dans le champ Payload.
  • Cocher Inject Once after 0.1 seconds qui permet d’exécuter le Node une fois 0.1 seconde après à chaque fois que le projet est déployé (ou à chaque fois que l’on clique sur le déclencheur manuel situé à gauche de Node).
  • Terminer en cliquant sur Done.

nodered inject configuration

Placez une fonction (function) sur le flow et reliez le au node inject. La fonction permet de préparer le contenu de l’email. Collez le code ci-dessous dans la fonction et modifier :

  • Le Payload sera le corps de l’email
  • Le Topic sera le sujet de l’email
  • attachments contient le fichiers à joindre à l’email. Pour en savoir plus sur l’option attachments ici
    • Modifier le chemin vers les fichiers (<user> et <hostname>)
    • Le fichier cred est optionnel
msg = {
    payload: "Node-RED files \n\n",
    topic: "Node-RED Backup",
    attachments: [
        {   
            path: '/home/<user>/.node-red/flows_<hostname>.json'
        },{ // optional - optionnel
            path: '/home/<user>/.node-red/flows_<hostname>_cred.json'
        },
    ]
}
return msg;

Ajouter maintenant un Node email et configurer les options :

  • To destinataire de l’email
  • Server serveur d’envoi d’email (serveur SMTP)
  • Port du serveur SMTP (465 pour Gmail par défaut)
  • Userid identifiant de votre compte mail
  • Password mot de passe de votre compte mail
  • Cocher Use TLS pour Gmail et probablement pour les autres également
  • Done pour enregistrer la configuration

nodered email flow backup

Relier les Nodes et ajouter un Debug pour vérifier et localiser une éventuelle erreur de configuration.

nodered flow backup sauvegarde email mail

Déployer le flow de backup

Cliquer sur Deploy pour déployer le projet. Si tout est correctement configuré, vous recevrez quelques instants plus tard un email contenant la sauvegarde des fichiers de votre projet en pièce jointe.

nodered email flows backup

Code complet de script de sauvegarde

Copiez puis importez le script de sauvegarde dans votre projet Node-RED.

[{"id":"5519a8f3.84c4c8","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"2f982ae7.a78d56","type":"e-mail","z":"5519a8f3.84c4c8","server":"smtp.gmail.com","port":"465","secure":true,"tls":true,"name":"","dname":"Send email","x":490,"y":80,"wires":[]},{"id":"62d29031.438c4","type":"function","z":"5519a8f3.84c4c8","name":"Prepare email","func":"msg = {\n payload: \"Node-RED files \\n\\n\",\n topic: \"Node-RED Backup\",\n attachments: [\n { \n path: '/home/projetsdiy/.node-red/flows_projetsdiy.json'\n },{ // optional - optionnel\n path: '/home/projetsdiy/.node-red/flows_projetsdiy_cred.json'\n },\n ]\n}\nreturn msg;","outputs":1,"noerr":0,"x":300,"y":100,"wires":[["2f982ae7.a78d56","dd452920.422568"]]},{"id":"dd452920.422568","type":"debug","z":"5519a8f3.84c4c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":490,"y":120,"wires":[]},{"id":"2ac13700.a040ba","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":100,"wires":[["62d29031.438c4"]]}]

Configurer votre compte gmail

Pour les utilisateurs de gmail, il est nécessaire de configurer votre compte afin de pouvoir expédier des emails depuis Node-RED. En effet, Gmail interdit par défaut les applications non sécurisées à expédier des emails. Si vous déployez le flow, vous allez automatiquement recevoir cet email d’alerte de Gmail.

node-red gmail tentative connexion bloquee

Ouvrez un navigateur et allez sur la page https://myaccount.google.com. Aller sur l’onglet Sécurité puis descendre jusqu’au bloc Accès moins sécurisé des applications et suivre le lien vers Activer l’accès (déconseillé).

 node-red gmail acces moins securise applications

Cocher ensuite l’option Autoriser les applications moins sécurisées.

node-red gmail acces moins securise applications

Maintenant vous ne recevrez plus d’email d’avertissement de la part de Gmail.

node-red gmai application non securisee autorisee

Sauvegarder sur un serveur FTP

Troisième solution, envoyer régulièrement le flow sur un serveur FTP distant. C’est probablement la meilleure solution pour sécuriser votre travail.

Installer le module node-red-contrib-ftp depuis le gestionnaire de palette.

node-red-contrib-ftp

Placer une fonction et coller le code en l’adaptant à votre configuration :

  • filename répertoire de destination / nom du fichier. Ici le fichier sera horodaté à la date du jour
  • localFilename chemin vers le fichier à sauvegarder
msg.filename = '<destination_folder>/flow_'+new Date().toISOString()+'.json';
msg.localFilename = '/home/projetsdiy/.node-red/flows_jeedom.json';
return msg;

Coller un Node FTP. Ajouter un nouveau serveur en cliquant sur le crayon :

  • Host adresse IP du serveur FTP (ici un serveur FTP sur le réseau local fonctionnant sur un NAS Synology)
  • Port par défaut 21 (déconseillé)
  • User identifiant de connexion
  • Password mot de passe

nodered ftp configuration

Choisir dans la liste le serveur FTP que l’on vient de créer. Dans Operation, choisir put.

nodered ftp backup put flow

Enfin relier les Nodes et déployer.

nodered backup ftp flowLe code du flow FTP

[{"id":"2ac13700.a040ba","type":"inject","z":"5519a8f3.84c4c8","name":"","topic":"","payload":"Start backup","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":300,"wires":[["c23fb1fb.da69e"]]},{"id":"45b0fedd.f6bbc","type":"debug","z":"5519a8f3.84c4c8","name":"","active":false,"console":"false","complete":"payload","x":710,"y":420,"wires":[]},{"id":"c23fb1fb.da69e","type":"function","z":"5519a8f3.84c4c8","name":"Configuration","func":"// filename : chemin et nom de fichier sur la destination - destination path and file name\n// localFilename : chemin du fichier local - local file path\nmsg.filename = '<folder>/flow_'+new Date().toISOString()+'.json';\nmsg.localFilename = '/home/projetsdiy/.node-red/flows_<hostname>.json';\nreturn msg;","outputs":1,"noerr":0,"x":320,"y":340,"wires":[["3be2ee22.016552"]]},{"id":"3be2ee22.016552","type":"ftp in","z":"5519a8f3.84c4c8","ftp":"439530c1.0f6ba","operation":"put","filename":"","localFilename":"","name":"Put to FTP","x":510,"y":380,"wires":[["45b0fedd.f6bbc"]]},{"id":"439530c1.0f6ba","type":"ftp","z":"","host":"xxx.xxx.xxx.xxx","port":"21","secureOptions":"","user":"","connTimeout":"","pasvTimeout":"","keepalive":""}]

Programmer une sauvegarde automatique régulière

Au début du tutoriel, nous avons configuré le Node inject pour qu’il soit exécuté une seule fois au déploiement du projet (ou manuellement en cliquant sur le déclencheur, mais il est tout à fait possible de le programmer pour qu’il soit exécuté régulièrement. Editer le Node. On peut programmer le mode de répétition (repeat) :

  • Par intervalle (interval). Par exemple toutes les 72 heures
  • Par intervalle périodiquement (interval between times) : inadapté dans le cas d’une sauvegarde
  • Périodiquement (at a specific time), c’est le mode le mieux adapté. On pourra par exemple faire une sauvegarder tous les jours à 12h00

nodered schedule backup sauvegarde

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

Nous serions ravis de connaître votre avis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.