Nightscout Installation auf Ubuntu 20.04 – 1blu VPS

Nightscout auf Ubuntu 20.04 installieren


Es gibt eine aktualisiert Anleitung. Ich empfehle die Verwendung der neuen Anleitung:
Nightscout auf Ubuntu VPS-Server mit Nginx


Nightscout ist ein webbasierter CGM (Continuous Glucose Monitor) bzw. eine Art Diabetes Management System, welches mit Xdrip & AAPS Kommunizieren kann.
Genaue Details gibt es auf Github von den Entwicklern.
https://github.com/nightscout/cgm-remote-monitor

Nightscout kann man über Heruko/Azure selbst Einrichten oder man kann sich eine Instanz über ns.10be.de (ab 4,99€/Monat) mieten.

ns.10be.de hat den Vorteil das es sehr einfach einzurichten ist. Habe ich selber auch in Verwendung gehabt.
Heruko/Azure ist etwas komplexer, kam für mich aber nie in Frage.

In der Vergangenheit habe ich mit ns.10be.de gearbeitet. Ein sehr zuverlässiger Dienstleister.
Dennoch wollte ich schon immer Nightscout selber Betreiben, ohne einen zusätzlichen Dienstleister, ausgenommen 1blu, die den Server zur Verfügung stellen.
Also habe ich einen VPS Server angemietet und Nightscout selbst aufgesetzt.
Genauer den VPS R6 von 1blu.de. Im Rahmen einer Aktion gibt es den VPS R6 sechs Monate lang für 1€/Monat, danach nur 3,90€/Monat.
Der VPS hat 2 CPU Cores, 6 GB Ram und 80GB SSD u.v.m…, ausreichend für Nightsout.
https://www.1blu.de/vps-aktion/

Aktion abgelaufen. VPS Server gibt es bei 1blu bereits ab 3,90€ – 1blu VPS 2R

oder etwas Leistungsstärker ab 5,90€ VPS-SX





Eine zusätzliche Domain ist nicht zwangsläufig notwendig, kann man aber günstig dazu buchen. Eine Subdomain von 1blu ist beim Server enthalten. Let´s Encrypt funktioniert mit der Subdomain ohne Probleme (Die IP Adresse des Servers kann nicht mit Let´s Encrypt abgesichert werden!).
Da ich schon ein Webhosting Paket bei 1blu besitze, habe ich daraus eine Domain auf den Server per DNS Eintrag geleitet.

Einrichtung des Servers.

Ich setzte Grundkenntnisse Server/SSH/Konsole voraus.

Ich habe mich für Ubuntu 20.04 als Distribution entschieden.
Im Vorfeld habe ich Ubuntu 20.04 über das 1blu Kundeninterface installiert und mir die SSH Zugangsdaten notiert.
Als Konsole/SSH Client verwende ich Putty https://www.putty.org/

Beginnen wir mit dem Einrichten.

Putty öffnen, Serverdaten eingeben und via root User einloggen. Beim ersten Login via SSH muss das Passwort geändert werden.


Server Updates und diverse notwendige Plugins installieren

Neuen Benutzer anlegen:

$ adduser mainuser

mainuser Root Berechtigung erteilen:

$ usermod -aG sudo mainuser

Berechtigung prüfen:

$ su mainuser

$ grep '^sudo' /etc/group

Ubuntu aktualisieren:

$ sudo apt update

Wenn Aktualisierungen vorliegen:

$ sudo apt upgrade

Firewall UFW installieren:

$ sudo apt install ufw

Um die Konfiguration der Firewall kümmern wir uns zum Schluss.

Nano installieren

$ sudo apt-get install nano

Git installieren:

$ sudo apt install git

Phython sollte vorinstalliert sein, wenn nicht

$ sudo apt install python

Wenn Apache2 noch nicht aktiv/installiert

$ sudo apt install apache2

Nodejs installieren

$ sudo apt install nodejs
$ sudo apt install build-essential checkinstall
$ sudo apt install libssl-dev
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

– restart konsole – login mit mainuser –

$ source /etc/profile
$ nvm ls-remote
$ nvm install 14.18.1
$ nvm list
$ nvm use 14.18.1

NPM installieren

$ sudo apt install npm

GCC sollte installiert sein, wenn nicht

$ sudo apt install gcc

Ab hier kann mit Root Benutzer weiter gearbeitet.


Mongo DB installieren

$ sudo apt install mongodb
$ sudo systemctl status mongodb

MongoDB sollte active sein, Verbindfung prüfen:

$ mongo --eval 'db.runCommand({ connectionStatus: 1 })'

Ausgabe:

MongoDB shell version v3.6.8
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { „id“ : UUID(„e3c1f2a1-a426-4366-b5f8-c8b8e7813135“) }
MongoDB server version: 3.6.8
{
„authInfo“ : {
„authenticatedUsers“ : [ ],
„authenticatedUserRoles“ : [ ]
},
„ok“ : 1
}

Mongo Datenbank erstellen („benutzername“ „passwort“ nach Wunsch ändern und merken/aufschreiben)

$ mongo
> use Nightscout
> db.createUser({user: "benutzername", pwd: "passwort", roles:["readWrite"]})
> quit()

Prüfen in welchem Verzeichnis man sich befindet:

$ pwd
> /home/mainuser

Wenn nicht im home/mainuser verzeichnis

§ cd /home/mainuser

Git Kopieren/Clonen

$ git clone https://github.com/nightscout/cgm-remote-monitor.git
$ cd cgm-remote-monitor
$ npm install


Nach der Installation

$ nano start.sh

folgenden Text einfügen und speichern. „benutzer““passwort“ der MongoDatenbank ändern/angeben, API_Secret wunschgemäß Angeben, Base-Url ggf. ändern. Welche Plugins/Module benötigt werden hängt vom Anwender individuell ab.
Die hier aufgeführten Plugins/Module sind für mich Optimal. Eine Auflistung der möglichen Plugins gibt´s auf github
https://github.com/nightscout/cgm-remote-monitor#plugins  :

#!/bin/bash

# environment variables
export DISPLAY_UNITS="mg/dl"
export MONGO_CONNECTION="mongodb://benutzer:passwort@localhost:27017/Nightscout"
export BASE_URL="127.0.0.1:1337"
export API_SECRET="1234567890"
export PUMP_FIELDS="reservoir battery status"
export DEVICESTATUS_ADVANCED=true
export ENABLE="careportal loop iob cob openaps pump bwg rawbg basal cors direction timeago devicestatus ar2 profile boluscalc food sage iage cage alexa basalprofile bgi directions bage upbat googlehome errorcodes reservoir battery openapsbasal"
export TIME_FORMAT=24
export INSECURE_USE_HTTP=true
export LANGUAGE=de
export EDIT_MODE=on
export PUMP_ENABLE_ALERTS=true
export PUMP_FIELDS="reservoir battery clock status"
export PUMP_RETRO_FIELDS="reservoir battery clock"
export PUMP_WARN_CLOCK=30
export PUMP_URGENT_CLOCK=60
export PUMP_WARN_RES=50
export PUMP_URGENT_RES=10
export PUMP_WARN_BATT_P=30
export PUMP_URGENT_BATT_P=20
export PUMP_WARN_BATT_V=1.35
export PUMP_URGENT_BATT_V=1.30
export OPENAPS_ENABLE_ALERTS=false
export OPENAPS_WARN=30
export OPENAPS_URGENT=60
export OPENAPS_FIELDS="status-symbol status-label iob meal-assist rssi freq"
export OPENAPS_RETRO_FIELDS="status-symbol status-label iob meal-assist rssi"
export LOOP_ENABLE_ALERTS=false
export LOOP_WARN=30
export LOOP_URGENT=60
export SHOW_PLUGINS=careportal
export SHOW_FORECAST="ar2 openaps"

#export SSL_KEY=/etc/letsencrypt/live/domain.de/privkey.pem
#export SSL_CERT=/etc/letsencrypt/live/domain.de/fullchain.pem

# start server
/home/mainuser/.nvm/versions/node/v14.18.1/bin/node server.js

Speichern und beenden mit: strg+X - Y - enter

$ chmod +100 +010 start.sh
$ ./start.sh

Nach Erfolgsmeldung strg+c


Nightscout Service einrichten

$ sudo nano /etc/systemd/system/nightscout.service

einfügen und speichern:

[Unit]
Description=Nightscout Service
After=network.target


[Service]
Type=simple
WorkingDirectory=/home/mainuser/cgm-remote-monitor
ExecStart=/home/mainuser/cgm-remote-monitor/start.sh

[Install]
WantedBy=multi-user.target

Speichern und beenden mit: „strg+X“ – „Y“ – „enter“
Reload systemd:

$ sudo systemctl daemon-reload

Nigtscout Service aktivieren und starten:

$ sudo systemctl enable nightscout.service
$ sudo systemctl start nightscout.service

Nightscout Service Status anzeigen lassen:

$ sudo systemctl status nightscout.service

Ausgabe:

nightscout.service – Nightscout Service
Loaded: loaded (/etc/systemd/system/nightscout.service; enabled; vendor preset: enabled)
Active: active (running)
[..]


Konfiguration VirtualHost

Standard Konfiguration kopieren (Standard zu deiner Domain). Rot Markierte Elemente auf deine Domain/Bedürnisse ändern.

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/Domain.de.conf

Konfiguration abändern auf Deine Domain

$ sudo nano /etc/apache2/sites-available/Domain.de.conf

<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.

ServerAdmin webmaster@domain.de
ServerName Domain.de
ServerAlias www.Domain.de
DocumentRoot /var/www/html

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/Domain.de.error.log
CustomLog ${APACHE_LOG_DIR}/Domain.de.access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Spichern mit „strg+x“ –> „Y“–>“enter“

Standard Konfiguration deaktivieren

$ sudo a2dissite 000-default.conf

Deine Konfiguration aktivieren

$ sudo a2ensite Domain.de.conf

Apache neustart

$ sudo systemctl restart apache2

Domain dem Host zuweisen

$ sudo nano /etc/hosts

[...]
IP.deines.Servers Domain.de
[...]

Speichern mit „strg+X“ – „Y“ – „enter“


Let´s Encrypt Zertifikat installieren

und mit Certbot automatisch aktualisieren

$ sudo apt install certbot python3-certbot-apache

Installation mit Y bestätigen,

Servername/Alias überprüfen

$ sudo nano /etc/apache2/sites-available/Domain.de.conf

Wenn ServerName und ServerAlias fehlt, nachtragen.

Konfiguration testen

$ sudo apache2ctl configtest

Wenn Syntax OK, Apache neu starten

$ sudo systemctl reload apache2

Zertifikat anfordern

$ sudo certbot --apache
–> Email Adresse eingeben „Enter“
–> Nutzungsbedingungen bestätigen „A“+“Enter“
–> Newsletter/Neuigkeiten „N“+“Enter“
–> Domain auswählen
–> Nach einem Moment auswählen ob alle Anfragen auf https umgeleitet werden sollen.
1 = Nein 2=Ja mit „Enter bestätigen

Erfolgsmeldung erschein (Congratulations! You have successfully enabled[…])

Certbot status überprüfen

$ sudo systemctl status certbot.timer

Es sollte die Meldung

Active: active (waiting)
erscheinen.

Let´s Encrypt Zertifikat wurde erstellt und wird mit Certbot automatisch aktualisiert.


Firewall Port freigaben und Firewall aktivieren:

$ sudo ufw allow 1337
$ sudo ufw allow 27017
$ ufw allow OpenSSH
$ sudo ufw allow 'Apache Full'
$ sudo ufw enable
$ sudo ufw status (Status und freigegebene Ports einsehen)

Kontrolle ob alles korrekt freigegeben wurde

$ sudo ufw status

Output
Status: active

To Action From
-- ------ ----
27017 ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
1337 ALLOW Anywhere
27017 (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
1337 (v6) ALLOW Anywhere (v6)

Server neu starten (ein paar Minuten warten…)


SSL für Nightscout aktivieren

Via SSH einloggen und ins Nightscout Basisverzeichnis wechseln.

$ cd /home/mainuser/cgm-remote-monitor
$ nano start.sh

bei #export SSL_KEY [..] das „#“ entfernen und deinen Pfad zum SSL Key eintragen

export SSL_KEY=/etc/letsencrypt/live/Domain.de/privkey.pem
export SSL_CERT=/etc/letsencrypt/live/Domain.de/fullchain.pem

Schließen und Speichern mit  „strg+X“ –>“Y“–>“enter“

Nightscout Service neu starten

$ sudo systemctl restart nightscout.service

Nightscout status Prüfen:

$ sudo systemctl status nightscout.service


Nun kann Nightscout über deine domain.de:1337 (ssl verschlüsselt) aufgerufen werden.
Es muss gegebenenfalls die Cache deines Browsers geleert werden wenn zuvor die Domain oder Nightscout aufgerufen wurde.

Hinweis: Es gibt eine Optimierung zur Nightscout Installation –> Optimierung der Nightscout installation