Node-RED auf Docker installieren - IOTROUTER
Schwebe-Animation
Hinweis zum chinesischen Neujahrsfest (5.-23. Februar) - IOTRouter wünscht Ihnen ein frohes neues Jahr!

Node-RED auf Docker installieren

einige von ihnen und unterstützt mehrere Architekturen (amd64, arm32v6, arm32v7, arm64v8 und s390x).

Beginnend mit Node-RED 1.0, wurde das Repository auf Docker Hub in nodered/node-red umbenannt.

Schnellstart

Um es in Docker in seiner einfachsten Form auszuführen, führen Sie einfach aus:

docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red

Nehmen wir diesen Befehl einmal auseinander:

docker run - führt diesen Container aus, wobei er zunächst lokal erstellt wird, falls erforderlich

-it - eine Terminalsitzung einrichten, damit wir sehen können, was vor sich geht

-p 1880:1880 - verbindet den lokalen Port 1880 mit dem exponierten internen Port 1880

-v node_red_data:/data - ein Docker-Volume mit dem Namen `node_red_data` in das /data-Verzeichnis des Containers mounten, so dass alle Änderungen, die an den Flows vorgenommen werden, erhalten bleiben

-name mynodered - gibt diesem Rechner einen freundlichen lokalen Namen

nodered/node-red - das Bild, auf dem es basiert - derzeit Node-RED v1.2.0

Wenn Sie diesen Befehl ausführen, sollten Sie ein Terminalfenster mit einer laufenden Instanz von Node-RED erhalten.

Willkommen bei Node-RED

===================

10 Okt 12:57:10 - [info] Node-RED Version: v1.2.0

10 Oct 12:57:10 - [info] Node.js Version: v10.22.1

10 Okt 12:57:10 - [info] Linux 4.19.76-linuxkit x64 LE

10 Oct 12:57:11 - [info] Laden von Palettenknoten

10 Oct 12:57:16 - [info] Einstellungsdatei : /data/settings.js

10 Oct 12:57:16 - [info] Kontextspeicher : ‘default’ [module=memory]

10 Oct 12:57:16 - [info] Benutzerverzeichnis : /data

10 Oct 12:57:16 - [warn] Projekte deaktiviert : editorTheme.projects.enabled=false

10 Oct 12:57:16 - [info] Flussdatei : /data/flows.json

10 Oct 12:57:16 - [info] Neue Flussdatei erstellen

10 Oct 12:57:17 - [warn]

————————————————– ——————-

Die Datei mit Ihren Zugangsdaten wird mit einem vom System generierten Schlüssel verschlüsselt.

Wenn der vom System generierte Schlüssel aus irgendeinem Grund verloren geht, werden Ihre Anmeldedaten

Datei nicht wiederhergestellt werden kann, müssen Sie sie löschen und erneut eingeben

Ihre Zeugnisse.

Sie sollten Ihren eigenen Schlüssel mit der Option ‘credentialSecret’ in

Ihre Einstellungsdatei. Node-RED verschlüsselt dann Ihre Anmeldedaten erneut

Datei mit dem von Ihnen gewählten Schlüssel, wenn Sie das nächste Mal eine Änderung vornehmen.

————————————————– ——————-

10 Oct 12:57:17 - [info] Starten von Flüssen

10 Oct 12:57:17 - [info] Gestartete Flüsse

10 Oct 12:57:17 - [info] Server läuft jetzt unter http://127.0.0.1:1880/

[…]

Sie können dann zu http://{host-ip}:1880 navigieren, um den bekannten Node-RED-Desktop zu erhalten.

Der Vorteil dabei ist, dass wir durch die Vergabe eines Namens (mynodered) die Instanz leichter manipulieren können und durch die Festlegung des Host-Ports wissen, mit welchem wir vertraut sind. Natürlich bedeutet dies, dass wir nur eine Instanz zur gleichen Zeit ausführen können... aber nur einen Schritt zur gleichen Zeit.

Wenn wir mit dem, was wir sehen, zufrieden sind, können wir das Terminal mit Ctrl-p Ctrl-q- wechseln und der Container läuft im Hintergrund weiter.

Um sich wieder mit dem Terminal zu verbinden (Protokollierung anzeigen), führen Sie aus:

docker attach mynodered

Wenn Sie den Container neu starten müssen (z. B. nach einem Neustart oder einem Neustart des Docker-Dämons):

docker start mynodered

und bei Bedarf wieder anhalten:

docker stop mynodered

Bildänderungen

Node-RED-Images basieren auf offiziellen Node JS Alpine Linux-Images, um sie so klein wie möglich zu halten. Die Verwendung von Alpine Linux reduziert die Größe des erstellten Images, entfernt aber die Standard-Abhängigkeiten, die für die Kompilierung nativer Module erforderlich sind. Wenn Sie Abhängigkeiten mit nativen Abhängigkeiten hinzufügen möchten, erweitern Sie das Node-RED-Image mit den fehlenden Paketen auf dem laufenden Container oder bauen Sie ein neues Image, siehe docker -custom, das in der README.md im Node-RED-Docker-Projekt erweitert ist.

Detaillierte Informationen zu Bildern, Tags und Manifesten finden Sie in der Readme-Datei des Github-Projekts.

Ein Beispiel: Angenommen, Sie arbeiten auf einem Raspberry PI 3B mit arm32v7as-Architektur. Dann führen Sie einfach den folgenden Befehl aus, um das Image (mit dem Tag 1.2.0-10-arm32v7) zu ziehen und den Container zu starten.

docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red:latest

Derselbe Befehl kann auch auf einem amd64-System ausgeführt werden, da Docker erkennt, dass es auf einem amd64-Host läuft und das Image mit dem passenden Label (1.2.0-10-amd64) zieht.

Dies hat den Vorteil, dass Sie die Architektur, auf der Sie arbeiten, nicht kennen bzw. spezifizieren müssen, und macht den Befehl docker run und die Dateien docker compose flexibler und systemübergreifend austauschbar.

Hinweis: Derzeit gibt es einen Fehler in der Architekturerkennung von Docker für arm32v6 wie Raspberry Pi zero oder one. Für diese Geräte müssen Sie derzeit das vollständige Image-Tag angeben, zum Beispiel:

docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red:1.2.0-10-arm32v6

Verwalten von Benutzerdaten

Nach der Ausführung von Node-RED mit Docker müssen wir sicherstellen, dass alle hinzugefügten Knoten oder Streams nicht verloren gehen, wenn der Container zerstört wird. Diese Benutzerdaten können gespeichert werden, indem das Datenverzeichnis in ein Volume außerhalb des Containers eingebunden wird. Dies kann mit Bind-Mounts oder benannten Datenvolumes geschehen.

Node-RED verwendet das Verzeichnis innerhalb des Containers /data zum Speichern von Benutzerkonfigurationsdaten.

Host-Verzeichnis für Persistenz verwenden (bind mount)

Um das Node-RED-Benutzerverzeichnis innerhalb des Containers in das Host-Verzeichnis außerhalb des Containers zu speichern, können Sie den folgenden Befehl verwenden. Um den Zugriff auf dieses Host-Verzeichnis zu ermöglichen, muss der Benutzer node-red innerhalb des Containers (Standard uid=1000) die gleiche uid haben wie der Eigentümer des Host-Verzeichnisses.

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

In diesem Beispiel ist das Host-Verzeichnis /home/pi/.node-red an das Container-Verzeichnis /data gebunden.

Hinweis: Benutzer, die von Version 0.20 auf Version 1.0 migrieren, müssen sicherstellen, dass alle vorhandenen /data-Verzeichnisse die richtigen Besitzverhältnisse haben. Ab Version 1.0 muss dies 1000:1000 sein. Dies kann mit dem Befehl sudo chown -R 1000:1000 path/to/your/node-red/data erzwungen werden

Einzelheiten zu den Berechtigungen finden Sie im Wiki.

Benannte Datenvolumen verwenden

Docker unterstützt auch die Verwendung von benannten Datenvolumina, um persistente oder gemeinsame Daten außerhalb des Containers zu speichern.

Erstellen Sie ein neues benanntes Daten-Volume, das unsere Benutzerdaten enthält, und starten Sie einen neuen Container mit diesem Volume.

$ docker volume create -name node_red_data

$ docker volume ls

NAME DES TREIBERVOLUMENS

local node_red_data

$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red

Wenn Sie Daten von einem gemounteten Volume sichern müssen, können Sie darauf zugreifen, während der Container läuft.

$ docker cpmynodered:/data/ihr/backup/directory

Durch die Verwendung von Node-RED zur Erstellung und Bereitstellung einiger Beispielprozesse können wir nun den Container zerstören und eine neue Instanz starten, ohne dass unsere Benutzerdaten verloren gehen.

$ docker stop mynodered

$ docker rm mynodered

$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red

erneuern

Da /data nun außerhalb des Containers aufbewahrt wird, ist die Aktualisierung des Basis-Container-Images nun wie folgt

$ docker pull nodered/node-red

$ docker stop mynodered

$ docker rm mynodered

$ docker run -it -p 1880:1880 -v node_red_data:/data -name mynodered nodered/node-red

Docker Stack/Docker Geschrieben

Nachfolgend finden Sie ein Beispiel für eine Docker Compose-Datei, die mit Docker Stack oder Docker Compose ausgeführt werden kann. Weitere Informationen über den Docker-Stack und Docker-Compose finden Sie auf der offiziellen Docker-Seite.

################################################ ############################### Node-RED Stack oder Compose############1T# ################################################ red -compose-file docker-compose-node-red.yml# docker-compose -f docker-compose-node-red.yml -.p myNoderedProject up########################################## ####################################version: “3.7 ”services:
Knoten-Rot:
Bild: nodered/node-red:latest
Umwelt:
- TZ=Europa/Amsterdam
Häfen:
– “1880:1880”
Netzwerke:
-knoten-rot-netz
Volumen:
- node-red-data:/datavolumes:
node-red-data:networks:
node-red-net:

Datei oben zusammenstellen:

Node Red Service erstellen

Ziehen Sie das neueste Node Red Image

Zeitzone auf Europa/Amsterdam einstellen

Zuordnung von Container-Port 1880 zu Host-Port 1880

Erstellen Sie ein node-red-net Netzwerk und verbinden Sie den Container mit diesem

/data persistiert das Verzeichnis innerhalb des Containers auf ein Volume in node-red-dataDocker

Dockerfile in lokale Ressourcen kopiert

Manchmal ist es sinnvoll, das Node-RED-Docker-Image mit Dateien aus einem lokalen Verzeichnis zu füllen (z.B. wenn Sie das gesamte Projekt in einem Git-Repository aufbewahren wollen). Hierfür benötigen Sie ein lokales Verzeichnis wie dieses:

Dockerdatei

README.md

package.json # fügen Sie alle zusätzlichen Knoten, die Ihr Fluss benötigt, in Ihre eigene package.json ein.

flows.json # der normale Ort, an dem Node-RED Ihre Flüsse speichert

flows_cred.json #-Anmeldeinformationen, die Ihre Abläufe benötigen

settings.js # Ihre Einstellungsdatei

Hinweis: Diese Methode ist nicht geeignet, wenn Sie das Volume /data extern mounten wollen. Wenn Sie ein externes Volume für die Persistenz verwenden müssen, kopieren Sie Ihre Einstellungen und Flow-Dateien auf dieses Volume.

Das folgende Dockerfile baut auf dem Node-RED-Docker-Image auf, verschiebt aber zusätzlich Ihre eigenen Dateien in das Image:

FROM nodered/node-red

# Kopieren Sie package.json in das WORKDIR, damit npm alle

# der von Ihnen hinzugefügten Knotenmodule für Node-RED

COPY package.json .

RUN npm install -unsafe-perm -no-update-notifier -no-fund -only=production

# Kopieren Sie _ihre_ Node-RED-Projektdateien an ihren Platz

# HINWEIS: Dies funktioniert nur, wenn Sie /data später NICHT als externes Volume mounten.

# Wenn Sie ein externes Volume für die Persistenz verwenden müssen, dann

# kopieren Sie stattdessen Ihre Einstellungen und Flow-Dateien auf dieses Volume.

COPY settings.js /data/settings.js

COPY flows_cred.json /data/flows_cred.json

COPY flows.json /data/flows.json

# Sie sollten zusätzliche Knoten über Ihre package.json-Datei hinzufügen, aber Sie können sie auch hier hinzufügen:

#WORKDIR /usr/src/node-red

#RUN npm install node-red-node-smooth

HINWEIS: Die Datei package.json muss eine Startoption im Skriptabschnitt enthalten. Der Standardcontainer sieht zum Beispiel so aus:

“Skripte”: {

“start”: “node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS”,

Reihenfolge der Dockerdateien und Erstellungsgeschwindigkeit

Obwohl es nicht notwendig ist, ist es eine gute Idee, package... npm install... zu kopieren, um diese Schritte früh zu tun, denn während flows.json sich oft ändert, wenn man in Node-RED arbeitet, ändert sich package.json nur, wenn Module im Projekt geändert werden. wird sich ändern. Und weil die Schritte, die Sie ausführen müssen, wenn Sie npm install package.json ändern, manchmal zeitaufwändig sein können, ist es eine gute Idee, zeitaufwändige, oft unveränderte Schritte früher in der Dockerdatei auszuführen, so dass diese Build-Images wiederverwendet werden können, wodurch nachfolgende Builds schneller sind.

Berechtigungsnachweise, Geheimnisse und Umgebungsvariablen

Wenn Sie also in einem Node-RED-Projekt Anmeldeinformationen verwenden müssen, können Sie dies mit der obigen Dockerdatei in Ihrer settings.js tun...

module.exports = {

credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET // genau dies hinzufügen

}

...und dann, wenn Sie es in Docker ausführen, fügen Sie eine Umgebungsvariable zu Ihrem Ausführungsbefehl hinzu...

docker run -e “NODE_RED_CREDENTIAL_SECRET=Ihr_Geheimnis_geht_hier”

Erstellen und ausführen

Normalerweise erstellen Sie diese Dockerdatei:

docker build -t dein-bild-name:dein-tag .

Für die lokale Entwicklung, bei der Änderungen sofort geschrieben werden, müssen Sie nur vom lokalen Verzeichnis, in dem Sie arbeiten, in das Projektverzeichnis wechseln und es dann ausführen:

docker run -rm -e “NODE_RED_CREDENTIAL_SECRET=Ihr_Geheimnis_geht_hier” -p 1880:1880 -v `pwd`:/data -name a-container-name ihr-bild-name

anfahren

Umgebungsvariablen können an den Container übergeben werden, um die Laufzeit von Node-RED zu konfigurieren.

Die Flusskonfigurationsdatei wird über den Umgebungsparameter ( FLOWS ) festgelegt, der standardmäßig auf ‘flows.json’ eingestellt ist. Dies kann zur Laufzeit mit den folgenden Befehlszeilenflags geändert werden.

docker run -it -p 1880:1880 -v node_red_data:/data -e FLOWS=my_flows.json nodered/node-red

Hinweis: Wenn Sie -e FLOWS=”” einstellen, können Sie den Fluss über die Eigenschaft flowFile in der Datei settings.js festlegen.

Andere nützliche Umgebungsvariablen sind

-e NODE_RED_ENABLE_SAFE_MODE=false# Auf true setzen, um Node-RED im sicheren (nicht laufenden) Modus zu starten

-e NODE_RED_ENABLE_PROJECTS=false # Auf true setzen, um Node-RED zu starten und Projektfunktionen zu aktivieren

Node.js-Laufzeitparameter können über Umgebungsparameter (NODE_OPTIONS) an den Container übergeben werden. Um beispielsweise die vom Node.js Garbage Collector verwendete Heap-Größe festzulegen, können Sie den folgenden Befehl verwenden.

docker run -it -p 1880:1880 -v node_red_data:/data -e NODE_OPTIONS=”-max_old_space_size=128″ nodered/node-red

Schlüsselwörter: Industrie-Gateway

Kontakt