Skip to content

Instantly share code, notes, and snippets.

@DrCR77
Last active November 24, 2020 16:48
Show Gist options
  • Save DrCR77/11b5698fc304b9a214dfa15862f3722b to your computer and use it in GitHub Desktop.
Save DrCR77/11b5698fc304b9a214dfa15862f3722b to your computer and use it in GitHub Desktop.
Nightscoutinstallation auf Ubuntu 20.04 LTS

Installation von Nightscout auf einem Ubuntu 20.04 LTS Server (auf DigitalOcean oder MVPS)

Diese Übersetzuns ins Deutsche mag noch Fehler enthalten. Bitte verwenden Sie im Zweifelsfall die Englische Version. You can find this guide in English here

Warum?

  • Sie haben vollen SSH-Zugriff auf Ihren Server
  • Das Erstellen eines Servers dauert eine Minute
  • Ein Serverstandort in Deutschland ist möglich.
  • Sie können eine Sicherung / einen Snapshot des Servers erstellen, um ihn zu löschen und später wiederherzustellen (spart Geld, wenn Sie ihn eine Weile nicht benötigen).
  • Sie zahlen pro Stunde, die Basisversion von DO oder MVPS für 3 EUR oder 5$ pro Monat reicht für Nightscout aus
  • Es gibt jede Menge Hilfe zur Installation
  • Steuern und verfolgen Sie den Server über die DigitalOcean- oder MVPS-Control-Panel-Website oder alternativ über SSH.

Schritt für Schritt

Droplet auf DigitalOcean oder VPS auf MVPS erstellen

DigitalOcean ist wahrscheinlich der bekanntere Anbieter und bietet eine breite Palette von Dienstleistungen an. Ich persönlich bevorzuge allerdings MVPS. Es ist genauso einfach und etwas günstiger.

DigitalOcean

  • Registrieren Sie sich bei [DigitalOcean] an oder melden Sie sich an (https://m.do.co/c/896e26961756)
  • Klicken Sie auf "Create Droplet"
  • Wählen Sie unter "Distributions" Ubuntu 20.04 LTS aus
  • Unter "Size" ist die kleinste 5$ -Version ausreichend (aber wir müssen die Größe während des Installationsvorgangs vorübergehend ändern. Versuchen Sie nicht, mit dem 10$-Plan zu beginnen, eine Verkleinerung auf 5$ funktioniert nicht).
  • Der Rest liegt an Ihnen. Klicken Sie auf "Erstellen", um den Vorgang abzuschließen.

MVPS

  • Auf ähnliche Weise können Sie einen VPS auf MVPS erstellen.
  • Die Basisversion für nur 3 EUR pro Monat (weniger als 30 EUR p.a. bei jährlicher Zahlungsmethode) ist ausreichend (alle Preise + MwSt.).
  • MVPS verwendet europäische Serverstandorte

Melden Sie sich bei Ihrem Droplet / VPS an

Öffnen Sie ein Terminal oder was auch immer Sie verwenden, um SSH-Zugriff auf einen Server zu erhalten. Wenn Sie Linux noch nicht kennen oder noch nie von SSH gehört haben, geben Sie nicht auf! Es ist einfach und Sie finden eine gute Referenz hier.

Verwenden Sie die bereitgestellten Anmeldedaten, die Sie per E-Mail erhalten haben, um eine Verbindung zum Droplet / VPS herzustellen (ich verwende *123.456.789.123 * als Ersatz für die tatsächliche IP Ihres Droplets):

ssh root@123.456.789.123
// Passwort eingeben, wenn Sie danach gefragt werden

MongoDB installieren und einrichten

MongoDB muss installiert und konfiguriert sein, um (a) gesichert zu sein und (b) die Datenbank für Nightscout bereitzustellen.

sudo apt-get update && apt-get upgrade -y
sudo apt install mongodb -y

Sichere MongoDB

mongo --port 27017

Nun befinden Sie sich in der Mongo Oberfläche. Wir erstellen jetzt einen Administrator. Denken Sie daran, was Sie für ADMIN_NAME und ADMIN_PASSWORD ausgewählt haben. Geben Sie Folgendes ein (drücken Sie einfach die Eingabetaste, bevor Sie die nächste Zeile einfügen, das Kopieren und Einfügen sollte ebenfalls funktionieren):

use admin
db.createUser({user: "ADMIN_NAME", pwd: "ADMIN_PASSWORD", roles: [ { role: "userAdminAnyDatabase", db: "admin" }] })

Die Shell sollte diesen Code und "Successfully added user" zurückgeben.

Beenden Sie die Mongo-Shell (STRG + C) und geben Sie Folgendes ein:

sudo nano /etc/mongodb.conf

Suchen Sie die Zeile, in der steht:

#auth = true

und entfernen Sie das #

(Speichern und beenden Sie eine Datei, die Sie mit nano über "STRG" + "O", "Enter", "STRG" + "X" geöffnet haben.)

Starten Sie Mongo neu:

sudo service mongodb restart

Datenbank für Nightscout erstellen

Jetzt melden wir uns wieder als Administrator bei der Mongo-Shell an und erstellen unsere Nightscout-Datenbank, wobei MONGO_NS_DB der Name der von uns erstellten Datenbank ist, MONGO_NS_USER der Benutzer ist, der auf diese Datenbank zugreifen kann, und MONGO_NS_PASSWORD sein Passwort ist. Passen Sie Benutzer und Passwort an Ihre Bedürfnisse an (src):

mongo -u ADMIN_NAME -p --authenticationDatabase admin
// ADMIN_PASSWORD eingeben

Geben Sie in die Mongo-Shell Folgendes ein:

use MONGO_NS_DB
db.createUser({user: "MONGO_NS_USER", pwd: "MONGO_NS_PASSWORD", roles: [ { role: "readWrite", db: "MONGO_NS_DB" }]})

Die Shell sollte "Successfully added user" zurückgeben. Beenden Sie die Mongo-Shell erneut über STRG + C oder geben Sie "exit" ein.

Sie sollten sich als der Benutzer anmelden können, den Sie gerade erstellt haben:

mongo -u MONGO_NS_USER -p --authenticationDatabase MONGO_NS_DB
// MONGO_NS_PASSWORD eingeben

exit (STRG + C)

Erstellen Sie einen Benutzer ohne Rootberechtigung

Fügen Sie einen Nicht-Root-Benutzer mit Administratorrechten hinzu. Versuchen Sie nicht, Nightscout als Root-Benutzer auszuführen, es funktioniert jetzt. Ersetzen Sie mainuser durch einen Namen Ihrer Wahl.

sudo adduser mainuser

Nachdem Sie das Passwort festgelegt und überprüft haben, müssen Sie keine weiteren Informationen eingeben. Drücken Sie einfach weiter die Eingabetaste. Als Nächstes fügen wir den neuen Benutzer zur Liste der administrativen Benutzer hinzu:

sudo usermod -aG sudo mainuser

Jetzt melden wir uns mit logout ab und mit dem soeben erstellten Konto wieder über SSH am Server an.

ssh mainuser@IP-Nummer

Installiere Nightscout

Installieren Sie nodejs und npm:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install nodejs -y

Klonen Sie Nightscout und erstellen Sie einen Ordner-Link mit dem Namen "Nightscout", um das den Ordnerzugriff später etwas zu erleichtern:

git-clone https://github.com/nightscout/cgm-remote-monitor.git
sudo ln -s cgm-remote-monitor nightscout
cd nightscout

Installieren Sie jetzt Nightscout:

npm install

Wenn Sie sich für den $5/Monat-Plan bei DigitalOcean entschieden haben, wird dies möglicherweise mit der Meldung "killed" oder einer anderen Fehlermeldung fehlschlagen. Der Grund ist fehlender RAM. Aus diesem Grund müssen wir die Größe des Droplets vorübergehend auf einen 10$-Plan ändern, um Nightscout zu installieren.

  • Geben Sie über SSH "sudo shutdown now" ein, um das Droplet auszuschalten
  • Gehen Sie auf der DigitalOcean-Website zu "Droplets"
  • Öffne dein Nightscout-Droplet
  • Gehen Sie zu "resize" (Menü auf der linken Seite)
  • Klicken Sie auf den 10-Dollar-Plan und warten Sie, bis der Vorgang abgeschlossen ist
  • In der oberen rechten Ecke befindet sich ein Schieberegler mit der Aufschrift "Off". Klicken Sie auf den Schieberegler, um das Droplet "On" einzuschalten
  • Melden Sie sich erneut über SSH an und wiederholen Sie die folgenden Schritte:
cd cgm-remote-monitor
npm installieren

Anschließend können Sie das Droplet wieder ausschalten, zur DigitalOcean-Site zurückkehren und den Plan zurücksetzen (wählen Sie den 5-Dollar-Plan aus, schalten Sie das Droplet ein und stellen Sie die Verbindung über SSH wieder her).

Konfigurieren

Bearbeiten Sie die Konfigurationsdatei:

nano my.env

Fügen Sie je nach Bedarf die folgenden und weitere Variablen ein:

MONGO_CONNECTION=mongodb://MONGO_NS_USER:MONGO_NS_PASSWORD@127.0.0.1:27017/MONGO_NS_DB
BASE_URL=http://123.456.789.123:1337
DISPLAY_UNITS=mg
DEVICESTATUS_ADVANCED="true"
mongo_collection="entries"
API_SECRET=NIGHTSCOUT_API_SECRET
ENABLE=careportal%20openaps%20iob%20bwp%20sage%20cage%20basal%20pump%20maker

NIGHTSCOUT_API_SECRET ist etwas Langes, das Sie selbst auswählen können.

Die BASE_URL besteht aus der Droplet-IP und dem Port 1337, auf dem die Nightscout-App ausgeführt wird (stellen Sie sicher, dass Sie dort : 1337 an Ihre IP anhängen).

In meinem Fall musste ich verschiedene Werte mit "%20" anstelle von Leerzeichen oder " verbinden, damit es funktioniert.

Speichern und wieder schließen (STRG + O, Enter, STRG + X).

Startup - Installieren Sie pm2, um den Nightscout-Prozess zu überwachen

sudo npm install pm2 -g

Starten Sie cgm-remote-monitor mit pm2:

env $ (cat my.env) PORT = 1337 pm2 start server.js

Lassen Sie pm2 cgm-remote-monitor beim Start starten

pm2 Start

Dadurch erhalten Sie einen Befehl, den Sie als Superuser ausführen müssen, damit pm2 die App beim Neustart starten kann. Der Befehl lautet wie folgt: sudo su -c "env PATH=$PATH:/usr/bin pm2 startup ..."

Kopieren Sie den im Terminal angegebenen Befehl, fügen Sie ihn ein und führen Sie ihn aus. Damit sich pm2 daran erinnert, welche Apps beim nächsten Neustart gestartet werden sollen:

pm2 save

Nightscout kann jetzt so gestartet, gestoppt und neu gestartet werden (das müssen Sie jetzt nicht tun):

pm2 start server
pm2 stop server
pm2 restart server

Beachten Sie, dass Sie jedes Mal, wenn Sie Änderungen an Ihrer my.env-Datei (Ihren Nightscout-Umgebungsvariablen) vornehmen, die Instanz server.js stoppen, löschen und neu starten müssen. Gehen Sie zu Ihrem Ordner / cgm-remote-monitor und:

pm2 list zeigt Ihre aktuellen Prozesse und deren ID-Nummer an.

pm2 stop 0 stoppt den aktuellen Serverprozess mit der ID "0".

pm2 delete 0 löscht den Serverprozess mit der ID "0".

(Sie müssen auch pm2 unstartup systemd verwenden und den Startvorgang erneut wiederholen. Auch hier wieder die angegebene Zeile kopieren, einfügen und ausführen.)

Starten Sie dann cgm-remote-monitor erneut mit pm2: env $ (cat my.env) PORT = 1337 pm2 start server.js

Nightscout testen

Möglicherweise können Sie Nightscout bereits verwenden. Dies ist die URL (wie BASE_URL in my.env):

http://123.456.789.123:1337

Die meisten Browser erlauben diese unsichere http-Verbindung nicht. Daher sollten Sie die nächsten Schritte ausführen.

Sichere Verbindung einrichten (SSL / HTTPS)

Da es sehr empfohlen wird, nicht HTTP, sondern HTTPS für Ihre Nightscout-Instanz zu verwenden, füge ich die Schritte hinzu, um eine HTTPS-Adresse zu erhalten. Dazu benötigen Sie eine Domain - Domains kosten nur ein paar Euro pro Jahr - oder Sie verwenden eine Subdomain einer Domain, die Sie bereits besitzen. Das habe ich getan. Befolgen Sie zum Anhängen der Domain an Ihr Droplet die DigitalOcean-Anleitungen. Der Prozess unterscheidet sich in MVPS nur geringfügig. Ein A-Eintrag, der auf die IP-Adresse verweist, und 2 NS-Einträge in Ihrer Domain / Subdomain sind erforderlich.

Installieren Sie nginx, um die Site zu sichern und sie im gesicherten Zustand funktionsfähig zu machen:

sudo apt install certbot python3-certbot-nginx -y

Konfigurieren Sie nginx für die Verwendung Ihrer Domain:

sudo nano /etc/nginx/sites-available/default

Dann musste ich die folgenden 2 Schritte ausführen.

  1. Anfangs habe ich MYDOMAIN zur Standardkonfiguration hinzugefügt:
server {
    listen 80;
    ...
    server_name MYDOMAIN.COM;
    ...

Testen Sie über sudo nginx -t, ob die Konfigurationsdatei gültig ist. Starten Sie anschließend nginx neu:

sudo service nginx neu starten

Sie müssen die Firewall ufw zuerst aktivieren (vorher port 22 und ssh erlauben, sonst bricht die Verbindung ab!)

sudo ufw allow ssh && sudo ufw allow 22
sudo ufw enable

(Sie können die Frage mit "y" bestätigen, da nun ssh an Port 22 zulässig ist).

Konfigurieren Sie die Firewall "ufw", um die erforderlichen Ports zu öffnen (verwenden Sie "sudo ufw app list", um zu überprüfen, ob nginx für ufw als App sichtbar ist):

sudo ufw allow 'Nginx Full' && sudo ufw allow 443 && sudo ufw allow 1337 && sudo ufw allow 1337/tcp
sudo ufw status
sudo service nginx restart

Erhalten eines SSL-Zertifikats mit diesem Befehl (Antwort: a (gree); no; 2):

sudo certbot --nginx -d MYDOMAIN.COM

Verbesserung der SSL-Sicherheit durch Generierung einer starken Diffie-Hellman-Gruppe ([src] (https://gist.github.com/johnmales/1b3c927f2a56aae640b4b2cd0298b1e7)):

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Stellen Sie sicher, dass certbot sich um die Erneuerung Ihres Zertifikats kümmert:

ssudo certbot renew --dry-run

Starten Sie den Dienst neu:

sudo service nginx restart

Sie können überprüfen, wie sicher Ihre Website über https://www.ssllabs.com/ssltest/index.html ist.

  1. Zu diesem Zeitpunkt habe ich mehrere Website-Fehler (Umleitung usw.) erhalten und keine Website-Antwort erhalten. Also musste ich die Nginx-Standarddatei erneut konfigurieren:
ssudo nano /etc/nginx/sites-available/default

Ich musste diese Zeilen im Standortbereich des 443-Servers hinzufügen:

server {

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot

     server_name MYDOMAIN.COM;

... (a few lines managed by Certbot)

location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      # Fix the “It appears that your reverse proxy set up is broken" error.
      proxy_pass          http://localhost:1337;
      proxy_read_timeout  90;
      proxy_redirect      http://localhost:1337 https://MYDOMAIN.COM;
    }
}

Nightscout sollte jetzt über ihre Domain (ohne 1337-Portangabe) erreichbar sein

https://MYDOMAIN.COM

Wenn Sie auf Fehler wie "502 Bad Gateway" stoßen, ist der Prozess wahrscheinlich fehlgeschlagen, da die pm2-Installation fehlgeschlagen ist und der NS-Server noch nicht aktiv ist. Um die Nightscout-Installation zu testen, versuchen Sie es ohne pm2:

cd nightscout
screen

sudo env $ (cat my.env) PORT = 1337 node server.js

Sie können den Bildschirm mit "STRG + A STRG + D" verlassen und mit "screen -x" erneut öffnen oder den Prozess mit "STRG + C" beenden.

Mongo-Datenbank über Mongodump sichern und wiederherstellen

Im Basisabonnement eines Droplets können Sie jederzeit einen Schnappschuss Ihres ArbeitsDroplets erstellen. Das Speichern eines Schnappschusses würde ungefähr 20 Cent pro Monat kosten. Alternativ können Sie automatische wöchentliche Backups für 1 $ pro Monat hinzufügen.

Möglicherweise möchten Sie die Mongo-Datenbank sichern und / oder auf ein anderes Droplet übertragen. Führen Sie dazu die folgenden Schritte aus:

Erstellen Sie ein Backup

Melden Sie sich als mainuser beim Server an (über ssh oder Konsole). Erstellen Sie einen Sicherungsordner:

sudo mkdir backup

Jetzt können Sie diesen Befehl ausführen:

sudo mongodump --user MONGO_NS_USER --password MONGO_NS_PASSWORD --db MONGO_NS_DB --out Backup /

Es ist jedoch besser, zuerst den Server zu stoppen, ein Backup zu erstellen und den Server neu zu starten. Verwenden Sie daher das folgende Skript "backup.sh", um diesen Prozess auszuführen.

Backup wiederherstellen

sudo mongorestore --db = MONGO_NS_DB --username = MONGO_NS_USER --password = MONGO_NS_PASSWORD backup / MONGO_NS_DB

Um Dateninkonsistenzen in der MongoDB zu vermeiden, ist es ratsam, den Nightscout-Prozess zu stoppen, bevor Sie mongodump / mongorestore ausführen. Sie können die unten angegebenen Shell-Skripte im Sicherungsverzeichnis verwenden, die den Prozess über pm2 stoppen, die Sicherung oder Wiederherstellung ausführen und den Prozess dann erneut starten.

Erstellen Sie eine Datei mit

sudo nano backup.sh

Kopieren Sie den unten genannten Inhalt und fügen Sie ihn in das Skript ein. Beenden Sie ihn mit STRG + x und bestätigen Sie das Speichern.

Machen Sie dasselbe mit sudo nano restore.sh

Wenn Sie Backups mit einer täglichen / wöchentlichen Routine erstellen möchten, empfehle ich, der crontab des Root-Benutzers eine Zeile hinzuzufügen:

sudo nano /etc/crontab

und fügen Sie eine Zeile hinzu, die auf ein angepasstes Sicherungsskript verweist (siehe unten backupsu.sh):

0 9 * * * root /home/mainuser/backup/backupsu.sh

Machen Sie alle Skripte ausführbar mit

sudo chmod + x * .sh

Bitte beachten Sie, dass beide Skripte davon ausgehen, dass die Sicherheitsauthentifizierung der MONGO_NS_DB wie oben beschrieben aktiviert wurde.

Die ursprüngliche Quelle war von (https://gist.github.com/frauzufall/c69f4a76730e3eb24e7a582d636765df).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment