So verbinden Sie Ihr Internet der Dinge mit Node-RED unter Ubuntu 16.04

Einführung

Node-RED ist eine Vermittlungsstelle für das Internet der Dinge, ein visuelles Tool, mit dem Sie Ihre bevorzugten Apps, Websites und Hardware miteinander verbinden können, um neue und nützliche Dinge zu tun. Am häufigsten verglichen mit IFTTT oder den späten Yahoo Pipes, verfügt Node-RED über eine viel leistungsfähigere und flexiblere Benutzeroberfläche und eine große Open-Source-Community, die Nodes für die Interaktion mit einer Vielzahl von Apps und Anwendungen erstellt Dienstleistungen.

In diesem Lernprogramm werden Node.js und Node-RED installiert, ein SSL-Zertifikat von Let’s Encrypt abgerufen und Nginx zum Behandeln sicherer Verbindungen für Node-RED verwendet.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Ein Ubuntu 16.04-Server mit einem Benutzer ohne Rootberechtigung und einer grundlegenden Firewall, die unter https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 für diesen Ubuntu 16.04-Server eingerichtet wurde Setup-Tutorial]. Für dieses Tutorial verwenden wir einen Benutzer mit dem Namen "* sammy *". Sie können jedoch natürlich auswählen, was Sie möchten, und nach Bedarf ersetzen.

  • Der Webserver Nginx wurde installiert, und die Firewall wurde aktualisiert, um Datenverkehr auf den Ports 80 und 443 (* Nginx Full *) zuzulassen, wie unter https://www.digitalocean.com/community/tutorials/how-to-install-nginx- erläutert. on-ubuntu-16-04 [Installieren von Nginx unter Ubuntu 16.04]

  • Ein Domain-Name, der auf Ihren Server verweist (siehe How To Set Up a Host Name) mit DigitalOcean. In diesem Tutorial wird durchgehend "+ node-red.example.com +" verwendet.

  • Lassen Sie uns Encrypt installieren und ein Zertifikat für die oben konfigurierte Domäne generieren. So sichern Sie Nginx mit Let’s Encrypt unter Ubuntu 16.04 begleiten Sie durch die notwendigen Schritte. Sie können die Schritte bezüglich der Nginx-Konfiguration (Schritte 3–5) ignorieren, da wir dies hier behandeln. Stellen Sie einfach sicher, dass Sie ein erfolgreich ausgestelltes Zertifikat erhalten, und richten Sie den Job "+ cron +" für die automatische Verlängerung ein.

Schritt 1 - Installieren von Node.js und npm

Mit Ubuntu 16.04 ist es einfach, die neueste LTS-Version (Long Term Support) von Node.js zu installieren, da sie im Standard-Repository enthalten ist.

sudo apt-get install nodejs-legacy

Mit dem Befehl wird Node.js v4.2.x LTS (Langzeitunterstützung) installiert. Dies bedeutet, dass die Node.js Foundation diese Version ab dem Veröffentlichungsdatum vom 12. Oktober 2015 noch 30 Monate lang unterstützt.

Stellen Sie sicher, dass die Installation erfolgreich war, indem Sie die Version überprüfen.

node -v

Node.js gibt die Versionsnummer aus:

Outputv4.2.6

Mit dem Knotenpaket-Manager (+ npm +) können Sie die Softwarepakete von Node.j installieren und verwalten. Wir werden sie zur Installation von Node-RED verwenden. Installieren Sie + npm mit` + apt-get`.

sudo apt-get install npm

Um zu überprüfen, ob die Installation erfolgreich war, bitten Sie + npm +, die Versionsinformationen auszudrucken:

npm -v
Output3.5.2

Wenn eine Versionsnummer ohne Fehler ausgegeben wird, können wir mit dem nächsten Schritt fortfahren, in dem wir "+ npm +" verwenden, um Node-RED selbst zu installieren.

Schritt 2 - Installieren von Node-RED

Verwenden Sie "+ npm", um "+ node-red " und ein Hilfsprogramm namens " node-red-admin" zu installieren.

sudo npm install -g --unsafe-perm node-red node-red-admin

+ npm + installiert normalerweise seine Pakete in Ihrem aktuellen Verzeichnis. Hier verwenden wir das "+ -g " - Flag, um Pakete "global" zu installieren, damit sie an Standard-Systemstandorten wie " / usr / local / bin " abgelegt werden. Das Flag " - unsafe-perm " hilft uns, einige Fehler zu vermeiden, die auftreten können, wenn " npm " versucht, native Module zu kompilieren (Module, die in einer kompilierten Sprache wie C oder C + geschrieben sind, vs. JavaScript).

Nach einigem Herunterladen und Mischen der Dateien kehren Sie zur normalen Eingabeaufforderung zurück. Testen wir unsere Installation.

Zunächst müssen wir einen Port auf unserer Firewall öffnen. Node-RED verwendet standardmäßig den Port "+ 1880 +". Lassen wir das also zu.

sudo ufw allow 1880

Und jetzt starten Sie Node-RED selbst. Es ist kein + sudo + erforderlich, da Port + 1880 + hoch genug ist, um keine Root-Rechte zu benötigen.

node-red

Einige "Welcome to Node-RED" -Nachrichten werden auf dem Terminal gedruckt. Zeigen Sie auf Ihrem Computer mit einem Webbrowser auf den Port "+ 1880 " des Servers. In unserem Beispiel ist das " http: //: 1880 +". Die Hauptadministrationsoberfläche von Node-RED wird geladen.

image: https://assets.digitalocean.com/articles/node-red/jpWUEbI.png [Hauptbearbeitungsoberfläche von Node-RED]

Wenn es funktioniert hat, können Sie in Ihr Terminal die Tastenkombination "+ STRG + C +" eingeben, um Node-RED herunterzufahren und zur Eingabeaufforderung zurückzukehren. Wir haben Node-RED erfolgreich installiert und getestet. Als Nächstes richten wir es so ein, dass es beim Systemstart gestartet wird.

Schritt 3 - Starten von Node-RED beim Start

Um Node-RED beim Start automatisch zu starten, müssen Sie anstelle des herkömmlichen Init-Skripts die Datei "+ node-red.service " installieren. Dies liegt daran, dass Ubuntu 16.04 das erste LTS-Release ist, das " systemd +" für sein Init-System verwendet. Eine Zusammenfassung dieser und anderer Ubuntu 16.04-Änderungen finden Sie unter What’s New in Ubuntu 16.04.

Öffnen Sie eine leere Servicedatei mit dem Namen "+ node-red.service".

sudo nano /etc/systemd/system/node-red.service

Kopieren Sie die folgenden Informationen und fügen Sie sie ein. Speichern und schließen Sie die Datei.

/etc/systemd/system/node-red.service

[Unit]
Description=Node-RED
After=syslog.target network.target

[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog

# non-root user to run as
WorkingDirectory=/home//
User=
Group=

[Install]
WantedBy=multi-user.target

Eine vollständige Erläuterung der Systemd-Servicedateien ist nicht Bestandteil dieses Lernprogramms. Weitere Informationen finden Sie unter https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal [Systemd Essentials: Arbeiten mit Services, Units und dem Journal].

Lassen Sie uns dennoch einige Abschnitte in unserer Servicedatei aufschlüsseln:

/etc/systemd/system/node-red.service

[Unit]
Description=Node-RED
After=syslog.target network.target

Dies beschreibt unseren Dienst und zeigt an, dass er gestartet werden sollte, nachdem Netzwerk und Syslog funktionieren.

/etc/systemd/system/node-red.service

[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

+ ExecStart + ist der Befehl, der benötigt wird, um unseren Service zu starten. Wir rufen "+ node-red-pi " anstelle von " node-red " auf, damit wir einige speichersparende Optionen an "Node.js" übergeben können. Dies sollte es ermöglichen, dass es auf jedem Server mit angemessener Größe gut läuft, abhängig davon, wie viele Flows Sie in Node-RED erstellen (und wie kompliziert sie sind). ` Restart = on-failure` bedeutet, dass systemd versucht, Node-RED neu zu starten, wenn es abstürzt, und` + KillS signal` teilt systemd mit, wie Node-RED am besten beendet werden kann, wenn es heruntergefahren oder neu gestartet werden muss.

/etc/systemd/system/node-red.service

# log output to syslog as 'node-red'
SyslogIdentifier=node-red
StandardOutput=syslog

Dadurch wird die Bezeichnung festgelegt, die für die Protokollierung verwendet wird, und alle Ausgaben werden an den Syslog-Dienst protokolliert.

/etc/systemd/system/node-red.service

# non-root user to run as
WorkingDirectory=/home//
User=
Group=

Wir möchten Node-RED als Nicht-Root-Benutzer ausführen. Die obigen Zeilen weisen systemd an, Node-RED mit unserem Benutzer und unserer Gruppe und von unserem Home-Verzeichnis aus zu starten.

/etc/systemd/system/node-red.service

[Install]
WantedBy=multi-user.target

+ WantedBy + gibt die Ziele an, unter denen unser Service ausgeführt werden soll. In diesem Fall wird Ubuntu, wenn es im Mehrbenutzermodus startet, auch unseren Node-RED-Dienst starten. Der Mehrbenutzermodus ist das Standardstartziel.

Nachdem unsere Servicedatei installiert und verstanden wurde, müssen wir sie aktivieren. Dadurch kann es beim Start ausgeführt werden.

sudo systemctl enable node-red

Starten Sie den Service jetzt manuell, um zu testen, ob er noch funktioniert.

sudo systemctl start node-red

Richten Sie einen Browser wieder auf den Server-Port "+ 1880 +" und vergewissern Sie sich, dass Node-RED gesichert ist. Wenn dies der Fall ist, fahren Sie es herunter, bis die Installation im nächsten Schritt gesichert ist.

sudo systemctl stop node-red

Schritt 4 - Einrichten von Nginx

Wir werden Nginx verwenden, um den Node-RED-Service zu vertreten. Dies bedeutet, dass Nginx alle SSL-Verbindungen an Port "+ 443 +" (unter Verwendung der zuvor eingerichteten Let’s Encrypt-Zertifikate) verarbeitet und den Datenverkehr an Node-RED weiterleitet.

Öffnen Sie eine neue Nginx-Konfiguration für die Site.

sudo nano /etc/nginx/sites-enabled/

Kopieren Sie Folgendes, und fügen Sie es ein. Ändern Sie dabei den Servernamen und die Zertifikatpfade:

/etc/nginx/sites-enabled/node-red.example.com

server {
   listen 80;
   listen 443 ssl http2;
   server_name ;
   ssl_certificate /etc/letsencrypt/live//fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   ssl_prefer_server_ciphers On;
   ssl_session_cache shared:SSL:128m;
   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.8.8;

   location / {
       if ($scheme = http) {
           return 301 https://$server_name$request_uri;
       }
       proxy_pass http://localhost:1880;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
   }

   location '/.well-known/acme-challenge' {
       root /var/www/html;
   }
}

Speichern und schließen Sie die Datei. Lassen Sie uns erklären, was diese Datei bewirkt.

Die ersten drei Zeilen teilen Nginx mit, welche Ports abgehört werden sollen und auf welchen Domainnamen reagiert werden soll. Die Zeilen "+ ssl_certificate " und " ssl_certificate_key " zeigen auf die Zertifikate, die wir aus "Let's Encrypt" abgerufen haben. In den verbleibenden " ssl_ +" - Zeilen werden Protokolle, Chiffren und Optionen ausgewählt, die sicherer als die Standardeinstellungen sind.

+ location / + startet den Block, in dem wir unseren Node-RED-Proxy definieren.

/etc/nginx/sites-enabled/node-red.example.com

if ($scheme = http) {
   return 301 https://$server_name$request_uri;
}

Dieser Block stimmt mit allen einfachen, nicht sicheren http-Verbindungen überein und leitet sie an die https-Version der Site weiter.

/etc/nginx/sites-enabled/node-red.example.com

proxy_pass http://localhost:1880;

Wir verweisen hier auf unseren Node-RED-Service. Es ist auf "+ localhost " am Port " 1880 " verfügbar, daher leiten wir Verbindungen dorthin weiter. Der Rest dieses Konfigurationsblocks legt einige Header fest, die für die ordnungsgemäße Funktion des Proxys wichtig sind. Die Header " Upgrade " und " Connection +" sind besonders wichtig für die Verarbeitung der Websocket-Verbindungen von Node-RED.

Schließlich haben wir einen Block, um sicherzustellen, dass die Antworten der Let’s Encrypt-Abfrage weiterhin vom Standardwebstamm von Nginx abgerufen werden:

/etc/nginx/sites-enabled/node-red.example.com

location '/.well-known/acme-challenge' {
   root /var/www/html;
}

Laden Sie Nginx neu, um die neue Konfiguration zu übernehmen.

sudo systemctl reload nginx

Starten Sie anschließend Node-RED erneut.

sudo systemctl start node-red

Navigieren Sie erneut zu Ihrem Server: + http: // +. Sie sollten zu "+ https: // " umgeleitet werden (beachten Sie das " https +") und die Node-RED-Administrationsoberfläche sehen. Dies bedeutet, dass wir jetzt Node-RED über Nginx weiterleiten. Wir müssen nur noch ein paar Änderungen vornehmen, um Node-RED zu sperren, und dann sind wir fertig.

Schritt 5 - Node-RED sichern und einpacken

Nachdem unsere Verbindung jetzt sicher ist, fügen wir dem Node-RED-Administrator ein Kennwort hinzu. Anstatt ein nacktes Passwort direkt in unsere Einstellungsdatei einzufügen, erstellen wir zuerst einen kryptografischen Einweg-Hash und verwenden diesen stattdessen. Wir werden + node-red-admin verwenden, um den Hash zu erstellen:

node-red-admin hash-pw

Sie werden aufgefordert, ein Passwort einzugeben. Tippen Sie es ein, drücken Sie + ENTER + und ein Hash wird auf dem Bildschirm gedruckt. Kopieren Sie das in Ihre Zwischenablage und öffnen Sie die Node-RED-Einstellungsdatei.

nano ~/.node-red/settings.js

Scrollen Sie nach unten und kommentieren Sie den Block "+ adminAuth " aus (indem Sie das "//" vor jeder Zeile entfernen). Ändern Sie " Benutzername ein" in einen beliebigen Wert und fügen Sie den Hash in das Feld "+ Passwort" ein.

settings.js

adminAuth: {
   type: "credentials",
   users: [{
       username: "",
       password: "",
       permissions: "*"
   }]
},

Während wir die Datei geöffnet haben, entfernen Sie auch das Kommentarzeichen "+ uihost ", indem Sie das " // +" am Anfang der Zeile entfernen.

settings.js

uiHost: "127.0.0.1",

Dies bedeutet, dass Node-RED nur die lokale Schnittstelle überwacht und nicht direkt von der Außenwelt erreichbar ist (Zugriff nur über den Nginx-Proxy). Sie können die Datei jetzt speichern und schließen.

Aktualisieren Sie die Firewall ein letztes Mal, um sicherzustellen, dass Node-RED niemals direkt erreichbar ist.

sudo ufw deny 1880

Starten Sie schließlich Node-RED neu.

sudo systemctl restart node-red

Wenn Sie zu "+ https: // +" navigieren, wird anstelle der Hauptbearbeitungsoberfläche ein Anmeldebildschirm angezeigt.

image: https://assets.digitalocean.com/articles/node-red/W10ckeg.png [Anmeldebildschirm von Node-RED]

Wenn auf Ihrer Website ein Anmeldebildschirm und eine Verbindung mit "+ https +" angezeigt wird, haben Sie alles richtig eingerichtet.

Fazit

Wir haben jetzt eine einigermaßen sichere Installation von Node-RED, das von Nginx mithilfe von Let’s Encrypt für seine SSL-Zertifikate vertreten wird. Einloggen und Verkabelung holen! Auf der Website von http://nodered.org [Node-RED] finden Sie viel mehr Informationen und Projektinspiration.