Node-RED mit dem INSTAR Cloud Webhook
Node-RED Installation mit Docker
Beginnen wir mit der Installation von Node-RED mit Docker. Auf diese Weise - nachdem Sie Docker installiert haben - wird die folgende Anleitung unabhängig davon funktionieren, ob Sie Node-RED auf einem Online Linux Server, einem Raspberry Pi, Ihrem NAS oder Ihrer lokalen Windows Workstation einrichten.
Nachdem Sie Docker installiert haben, führen Sie die beiden folgenden Befehle aus, um das neueste Node-RED-Docker-Image zu beziehen (oder wählen Sie eine bestimmte Version, die Sie benötigen, aus dem Docker Hub) und bereiten Sie das virtuelle Netzwerk vor, in dem wir unsere Container enbinden wollen (ich nenne es smart
):
docker pull nodered/node-red:latest
docker network create smart
Wenn der Node-RED-Container "zerstört" wird, geht alles verloren, was Sie konfiguriert haben. Um dies zu umgehen, werde wir einen Ordner von unserem Host-System in den Container mounten, der alle Daten enthält, die von Node-RED erzeugt werden, z.B. die Konfigurationsdateien. Auf einem LINUX-System müssen Sie bei der Erstellung dieser Ordner auf die Berechtigungen achten:
mkdir -p /opt/nodered/data
chmod -R 775 /opt/nodered
chown 1000:1000 -R /opt/nodered
Sie müssen diesen Ordner nicht im Verzeichnis /opt
erstellen, wählen Sie einfach ein Verzeichnis, in dem der Docker-Daemon die erforderlichen Rechte zum Lesen und Schreiben von Daten hat. Wenn Sie das Verzeichnis ändern, stellen Sie sicher, dass Sie auch den Volume Mount im folgenden docker run
Befehl ändern.
Jetzt können wir den Node-RED-Container mit dem folgenden Befehl starten:
docker run -d --rm --privileged --network=smart -p 1880:1880 -v /opt/nodered/data:/data --name nodered nodered/node-red:latest
Hinweis: Hier öffne ich den Port
1880
, um direkt auf die Node-RED UI zugreifen zu können. Wenn Sie planen, einen Web-Proxy wie NGINX für HTTP/2-Unterstützung nutzen wollen, können Sie das-p 1880:1880
entfernen. In diesem Fall fließt der gesamte Datenverkehr durch Ihren Web-Proxy und Sie brauchen keine Ports beim Node-RED-Container freigeben.
Wenn Sie den Port 1880
geöffnet haben, können Sie nun auf die Node-RED-Benutzeroberfläche über die IP-Adresse des Servers oder den zugewiesenen Domainnamen zugreifen:
http://meine.server.adresse:1880/
Node-RED Absichern
Wir haben nun eine Instanz von Node-RED eingerichtet, die vollständig den Weiten des Internets ausgesetzt ist. Es ist daher an der Zeit, sich um die Sicherheit zu kümmern. Wenn Sie einen Blick in das Verzeichnis werfen, das wir in den Node-RED-Container gemountet haben, werden Sie sehen, dass es jetzt die Hauptkonfigurationsdatei von Node-RED settings.js
enthält:
ls /opt/nodered/data
lib node_modules package.json package-lock.json settings.js
Hier müssen wir zwei Benutzer einrichten - das Admin API Login und das HTTP Node Login. Letztere wird zum Schutz unserer Webhooks verwendet.
Logins Erstellen
Node-RED bietet ein Passwort-Tool, mit dem wir die benötigten Logins erstellen können. Da wir Node-RED in Docker ausführen, müssen wir diese Befehle über das Docker CLI ausführen. Um z.B. das Login "username=admin" und "password=instar" zu generieren, führen Sie den folgenden Befehl aus:
docker exec -ti nodered node-red admin hash-pw
Password: instar
$2b$08$n6OUy4T5V5sF/dhpqvNxm.VS8Psht8E8Z3aDRS5mIECcGihPRvQhy
Hinweis: Dieser Befehl wird innerhalb unseres Node-RED-Containers ausgeführt, weil wir ihm den Namen
nodered
zugewiesen haben, als wir den RUN-Befehl mit dem Flag--name nodered
ausgeführt haben.
Hinzufügen von Admin- und Webhook-Sicherheit
Wir können nun die Konfigurationsdatei bearbeiten und unsere generierten Logins hinzufügen. Im folgenden Beispiel verwende ich das Login admin:instar
für beide Benutzer. Sie sollten hier Ihre eigenen Logins erstellen:
nano /opt/nodered/data/settings.js
module.exports = {
flowFile: 'flows.json',
flowFilePretty: true,
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2b$08$n6OUy4T5V5sF/dhpqvNxm.VS8Psht8E8Z3aDRS5mIECcGihPRvQhy",
permissions: "*"
}]
},
httpNodeAuth: {user:"admin",pass:"$2b$08$n6OUy4T5V5sF/dhpqvNxm.VS8Psht8E8Z3aDRS5mIECcGihPRvQhy"}
...
}
Starten Sie nun den Container neu und Sie sollten nun eine Benutzeranmeldung erhalten. Versuchen Sie, sich mit Ihrem persönlichen Login anzumelden:
docker stop nodered && docker start nodered