Node-RED auf dem Raspberry Pi installieren (Docker)

Wir wollen dir in diesem Beitrag zeigen, wie du Node-RED auf einem Raspberry Pi mit installiertem Docker ausführst. Falls du auf deinem Raspberry Pi noch kein Docker installiert hast, zeigen wir dir dies in unserem Beitrag Docker auf dem Raspberry Pi installieren.

Einfacher Start von Node-RED

Am einfachsten startest du Node-RED über das folgende Kommando:

docker run -it -p 8080:1880 --name mynodered nodered/node-redCode-Sprache: Shell Session (shell)

Beachte hierbei allerdings, dass dieses Kommando mehr zu Testzwecken geeignet ist. Wenn Node-RED beendet wird, ist es möglich, dass bei diesem Kommando deine Daten verloren gehen.

Wenn du das Kommando auf dem Raspberry Pi ausführst, solltest du die folgende Ausgabe sehen:

Der erfolgreiche Start von node-red in Docker wird durch die Zeilen "Server now running" und "Started flows" angezeigt
Download und Startvorgang von Node-RED in Docker

Wenn du jetzt in deinem Webbrowser die Adresse des Raspberry Pi’s gefolgt von dem Port 8080 aufrufst, solltest du die Node-RED Seite sehen. Bei dem Standard-Hostname (raspberrypi) lautet die Adresse: http://raspberrypi:8080/. Die Node-RED Startseite sieht dabei wie folgt aus:

Administrationsseite von Node-RED
Startseite von Node-RED

Hier kannst du einmal die inject-Node (in der linken Leiste ganz oben) nehmen und in das große Feld ziehen. Anschließend wiederholst du dies mit einer debug-Node. Diese findest du direkt unterhalb der inject-Node. Verbinde die beiden kleinen grauen Kästchen an der rechten bzw. linken Seite der Nodes.

Drücke anschließend auf die rote Schaltfläche deploy am oberen, rechten Bildschirmrand.

Nach dem Klick auf deploy, sollte die rote Schaltfläche nach einiger Zeit grau geworden sein. Wechsel jetzt auf der rechten Seite auf den Reiter Debugnachrichten. Auf dem Reiter ist ein Käfer abgebildet. Du solltest auf der rechten Seite jetzt eine leere Spalte sehen können. Klicke nun im mittleren Teil des Fensters auf den kleinen blauen Kasten links neben der inject-Node (auf dieser müsste nun das Wort timestamp stehen).

Es sollte dir jetzt oben, in der Mitte des Bildschirms, ein PopUp angezeigt werden. Außerdem sollte in dem weißen Feld auf der rechten Seite ein neuer Eintrag erschienen sein. Dieser beinhaltet den aktuellen Timestamp (die Millisekunden seit dem 01.01.1970 0:00:00). Bei einem weiteren Klick auf den blauen Button würde diese Zahl also größer werden.

Installation von docker-compose

Für den nächsten Schritt benötigst du das in Python geschriebene Tool docker-compose. docker-compose hilft dir bei der Verwaltung von mehreren Containern. Wenn du beispielsweise eine Webanwendung gemeinsam mit einer Datenbank starten möchtest, kann dir docker-compose dabei helfen, dass diese beiden Dienste immer gemeinsam ausgeführt werden.

Zunächst musst du die für docker-compose benötigten Abhängigkeiten auf deinem Raspberry Pi installieren:

sudo apt-get install -y python3 python3-pipCode-Sprache: Shell Session (shell)

Anschließend kannst du über den Paketmanager pip docker-compose installieren:

sudo pip3 -v install docker-composeCode-Sprache: Shell Session (shell)

Sollte bei der Installation (von bcrypt) ein Fehler auftreten, führe einmal die folgenden Befehl aus, um die für den Build von bcrypt benötigten Packate neu zu installieren. Anschließend sollte die Installation von docker-compose ohne Fehler funktionieren:

sudo apt-get remove build-essential libffi-dev python-dev
sudo apt-get install build-essential libffi-dev python-devCode-Sprache: Shell Session (shell)

Nach der Installation sollte dir der folgende Befehl die installierte Version von docker-compose ausgeben:

docker-compose --versionCode-Sprache: Shell Session (shell)

Start mittels docker-compose

Ein weiterer Vorteil von docker-compose ist, dass die gesamte Konfiguration der Container in einer Datei abgespeichert werden kann.

Der oben genannte Befehl würde als docker-compose-Datei so aussehen:

version: '3'
services:
    nodered:
      image: nodered/node-red
      ports:
        - "8080:1880"
Code-Sprache: YAML (yaml)

Natürlich bietet hier die docker-compose.yml-Datei keinen großen Vorteil gegenüber der direkten Eingabe über die Kommandozeile. Allerdings kann die Datei etwas ergänzt werden, um einen Mehrwert zu bieten:

version: '3'
services:
    nodered:
      image: nodered/node-red
      restart: always
      ports:
        - "8080:1880"
      volumes:
        - ./data:/data
      user: 'node-red:node-red'Code-Sprache: YAML (yaml)

Die Option restart: always gibt hierbei an, dass docker versuchen soll den Container neuzustarten, falls diese beendet wird. Bei einem Neustart des Systems, startet hierbei auch der Container wieder erneut. Nur wenn du den Container manuell beendest, bleibt er beendet.

Die zweite Ergänzung ist der Punkt volumes. Über diesen wird festgelegt, dass im Ordner neben der docker-compose.yml ein Ordner data angelegt wird, in welchem alle Dateien von Node-RED gespeichert werden. Wenn du den Node-RED Container entfernst, werden deine Daten jetzt nicht mehr gelöscht.

Um die letzt Funktion zu nutzen, solltest du zunächst einen Benutzer mit dem Namen node-red im System anlegen. Verwende hierfür einfach das folgende Kommando:

sudo adduser --system node-red && sudo addgroup --system node-red
 && sudo adduser node-red node-red
Code-Sprache: Shell Session (shell)

Hierdurch wird der Container vom Benutzer node-red ausgeführt, was zu einer höheren Sicherheit führt.

Starte den Container nun mit dem folgenden Befehl:

docker-compose upCode-Sprache: Shell Session (shell)

Der Start des Containers müsste mit einem EACCES-Fehler abgebrochen werden. Dies passiert, weil docker den Ordner data standardmäßig als root-Benutzer anlegt. Ändere die Zugriffsrechte auf den data-Ordner mit dem folgenden Kommando:

sudo chown -R 1000:1000 ./dataCode-Sprache: Shell Session (shell)

Nun startet Node-RED ganz normal. Drücke die Tastenkombination [Strg]+[C] um Node-RED wieder zu beenden. Führe jetzt den folgenden Befehl aus, um Node-RED im Hintergrund zu starten:

docker-compose up -dCode-Sprache: Shell Session (shell)

Du kannst dich jetzt vom Raspberry Pi abmelden, während deine Node-RED Installation weiterhin ausgeführt wird.

Suchen von Netzwerkdiensten ermöglichen

Da es für Node-RED viele Erweiterungen gibt, kann es sein, dass du irgendwann mal eine Erweiterung verwendest, die direkten Zugriff auf dein Netzwerk benötigt. So benötigen beispielsweise viele Erweiterungen im Bereich der Sprachassistenten (bspw. Alexa) einen direkten Zugriff auf das Netzwerk um mit einem entsprechenden Endgerät (wie bspw. einem Amazon Echo) kommunizieren zu können.

Auch dies lässt sich über docker-compose ganz einfach realisieren. Hierfür musst du einfach den network_mode auf host umstellen. Beachte dabei, dass sich der Port, unter dem du Node-RED aufrufen kannst dabei auf den Port 1880 ändert. Die URL bei einem RaspberryPi mit Standard-Hostname ändert sich also auf http://raspberrypi:1880/. Die Port-Einstellungen sollten dabei aus der docker-compose.yml entfernt werden:

version: '3'
services:
    nodered:
      image: nodered/node-red
      restart: always
      network_mode: host
      volumes:
        - ./data:/data
      user: 'node-red:node-red'Code-Sprache: YAML (yaml)

Jetzt steht deinem Einstieg in den Bereich Home-Automation nichts mehr im weg!