Node-RED Flow-Backups via Git

Node-RED erfreut sich insbesondere in der Heimautomatisierung großer Beliebtheit. So lassen sich mit dem kostenlosen Framework spielerisch Abläufe erstellen ("schalte Licht ein"), die dynamisch auf Ereignisse reagieren ("falls es Abend ist") - und das mit Low-Code. Die per Drag & Drop zusammengeklickte Logik kann anschließend beispielsweise via JSON exportiert und als Backup gesichert werden - falls man daran denkt.

Note

Neuere Node-RED-Versionen bringen mit Projects bereits eine Git-Integration mit, sodass die folgenden Schritte nicht mehr benötigt werden!

Die Sicherung der Logik ist mit wenigen Mausklicks erledigt - so können einzelne oder alle Flows exportiert und auch wieder importiert werden. Allerdings ist es ein manueller Prozess, der gerne vergessen wird. Wenn ein Export durchgeführt wurde, müssen die Dateien anschließend noch sinnhaftig abgelegt und versioniert werden.

Sofern möglich, setze ich immer auf Git, wenn es darum geht Dateien zu versionieren und Änderungen zu dokumentieren. Bedauerlicherweise scheint es nicht viel brauchbare Git-Erweiterungen für Node-RED zu geben - ein halbwegs brauchbares ist node-red-contrib-git-ui. Diese wird wie folgt installiert:

1$ npm i -S node-red-contrib-git-ui

Nach einem Neustart der Anwendung bzw. des Containers ist die Erweiterung aktiv.

Für den Container-/Anwendungsbenutzer sollte nun einen SSH-Schlüssel generiert werden, damit Inhalte ohne Eingabe eines Passworts gepflegt werden können:

1$ ssh-keygen

Im Applikationsordner (/data beim Einsatz des Docker-Containers) wird nun ein Git-Repository erstellt sowie eine staging-Branch erstellt. Diese ist notwendig, da die Erweiterung vorgenommene Flow-Änderungen leider ausschließlich in dieser einpflegt.

1$ cd /data
2$ git init .
3$ git checkout -b staging

Anschließend wird die URL eines leeren Remote-Repositorys konfiguriert:

1$ git remote add ssh://...

Da die Erweiterung leider alle geänderten Dateien automatisch in Git hinterlegt, leidet die Übersicht. Abhilfe schafft es, eine .gitignore-Allowlist zu erstellen, die lediglich Flow-relevante Dateien zulässt:

1*
2!flows.json
3!package.json
4!settings.js
5!staging/*
6!.gitignore

Anschließend findet sich im Dropdown-Menü rechts ein git-ui-Eintrag - hier kann einfach ein Commit ausgelöst werden. Im Log-Untermenü können auch vergangene Commits eingesehen, verglichen und wiederhergestellt werden:

Wer eine einfache Möglichkeit sucht, Flows regelmäßig mit Git zu sichern, sollte sich die Erweiterung mal ansehen. Schön wäre es jedoch, wenn die Dokumentation besser wäre und es mehr Einstellungsmöglichkeiten gäbe.

Übersetzungen: