Mehrere Nightscout Instanzen auf einem V-Server ohne Docker/Container/LXC
You can find the English translated version of the instructions here:
Multiple Nightscout instances on a V-Server without Docker/Container/LXC
Wie kann man „unkompliziert“ mehrere Nightscout Instanzen auf einem V-Server installieren?
Lange habe ich Versucht mehrere Nightscout Instanzen auf einem V-Server zum laufen zu bekommen.
In den gängigen Communitys wurde immer auf Docker, Docker Compose und Container Visualisierung gesetzt.
Als Anfänger bzw. als Container/Docker Neuling gar nicht so einfach. Doch es geht auch ganz ohne Docker/Container.
In dieser Anleitung zeige ich Dir meinen Weg der Realisierung, wie man mehrere Instanzen auf einem V-Server ohne Docker installiert. Dazu ist nur eine kleine Änderung an Nightscout notwendig.
Selbstverständlich ist es geübten Docker Nutzern umständlich, für mich jedoch eine einfache alternative, wenn der Server ausschließlich für Nightscout Verwendet wird.
Jeder der diese Anleitung anwendet, handelt eigenverantwortlich.
Benötigtes Material:
Nightscout -> https://github.com/nightscout/cgm-remote-monitor
Putty -> https://www.putty.org/
Programmers Notepad -> https://www.pnotepad.org/
Filezilla oder gleichwertiges FTP Programm -> https://filezilla-project.org/
Beliebigen V-Server mit Ubuntu 20.04 LTS.
Für diese Tutorial habe ich einen VPS R8 von 1blu.de verwendet.
Als erstes Loggen wir uns mit Putty auf dem Server mit dem Root Benutzer ein. In der gesamten Anleitung gehe ich von einer Neuisnstallation des Servers aus.
Apache 2 deinstallieren
Den Apache2 Service stoppen:
sudo service apache2 stop
Deinstallation durchführen:
sudo apt-get purge apache2 apache2-utils
Ggf. noch vorhandene Vorkommen löschen:
sudo rm -rf /etc/apache2
sudo rm -rf /usr/sbin/apache2
sudo rm -rf /usr/lib/apache2
sudo rm -rf /etc/apache2
sudo rm -rf /usr/share/apache2
sudo rm -rf /usr/share/man/man8/apache2.8.gz
Kontrolle ob noch Dateien und Verzeichnisse von Apache auf dem Server sind
whereis apache2
Ubuntu aktualisieren und benötigte Komponenten installieren
apt update
apt upgrade
apt install ufw
apt install nginx
apt-get install nano
apt install python
apt install gcc
Mongo Datenbank installieren
apt install mongodb
Mongo DB Status überprüfen
$ systemctl status mongodb
Ausgabe sollte so aussehen:
● mongodb.service – An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-09-20 18:27:57 UTC; 21s ago
In dieser Anleitung werde ich 3 Nightscout Instanzen zur Veranschaulichung installieren.
Es sind auch noch mehr möglich, jedoch sollte der V-Server auch genug Leistung haben.
Wie viele Tatsächlich stabil und Performant laufen, habe ich nicht getestet.
Theoretisch sollten bei meinem V-Server, verglichen zum Raspberry Pi1b, mindestens 10 Instanzen möglich sein.
Mongo Datenbanken erstellen
Wir erstellen direkt alle Datenbanken die benötigt werden.
Erste Datenbank:
$ mongo
> use Nightscout
> db.createUser({user: "mainuser", pwd: "passwort", roles:["readWrite"]})
> quit()
Zweite Datenbank:
$ mongo
> use Nightscout2
> db.createUser({user: "mainuser2", pwd: "passwort", roles:["readWrite"]})
> quit()
dritte Datenbank:
$ mongo
> use Nightscout3
> db.createUser({user: "mainuser3", pwd: "passwort", roles:["readWrite"]})
> quit()
Datenbank Namen und Passwörter merken/notieren!
Ersten Benutzer und erste Instanz erstellen
adduser mainuser
usermod -aG sudo mainuser
su mainuser
grep '^sudo' /etc/group
Node JS installieren und Einrichten
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 (alt)
$ nvm install 16.20.2
$ nvm list
$ nvm use 14.18.1 (alt)
$ nvm use 14.18.1
sudo apt install npm
Prüfen in welchem Verzeichnis man sich befindet:
$ pwd
> /home/mainuser
Wenn nicht im home/mainuser verzeichnis
§ cd /home/mainuser
Nightscout von Github herunterladen und auf Server laden.
Als erstes Nighscout Dateien auf GitHub als zip Datei herunterladen: https://github.com/nightscout/cgm-remote-monitor
Das heruntergeladene Verzeichnis auf dem PC entpacken.
FTP Programm (Filezilla) öffnen und mit Server verbinden.
Login auf Server mit Root.
Im FTP Verzeichnis /home/mainuser wechseln und den entpackten Nightscout Ordner in das /home/mainuser Verzeichnis hochladen.
Dem Nightscout Verzeichnis „cgm-remote-monitor-master“ chmod 777 geben.
Wenn alles korrekt hochgeladen wurde, zurück nach Putty wechseln.
Ins Nightscout Verzeichnis wechseln und Installation ausführen.
$ cd cgm-remote-monitor-master
$ npm install
Warten bis installation Vollständig abgeschlossen
Nightscout konfiguieren
Mongo Zugangsdaten und Api-Secret anpassen!
$ nano start.sh -> inhalt einfügen
#!/bin/bash
# environment variables
export DISPLAY_UNITS="mg/dl"
export MONGO_CONNECTION="mongodb://mainuser:passwort@localhost:27017/Nightscout"
export BASE_URL="127.0.0.1:1337"
export API_SECRET="12-stelliger-Code"
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"
# start server
/home/mainuser/.nvm/versions/node/v16.20.2/bin/node server.js
Mit strg+c beenden und mit Y das speichern bestätigen.
Der start.sh erforderliche Rechte geben:
$ chmod 775 start.sh
Danach die start.sh testen.
./start.sh
Wenn die start.sh korrekt läuft erscheint als letzte Meldung in Grüner Schrift „WS:…“
Mit strg+c beenden wir die Anzeige.
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-master
ExecStart=/home/mainuser/cgm-remote-monitor-master/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:
[…] Active: active (running)
Domain dem Host zuweisen
Hauptdomain und alle Subdomains für alle Instanzen in der Host Datei einpflegen.
$ sudo nano /etc/hosts
Speichern mit „strg+X“ – „Y“ – „enter“
Nginx config (Virtual Host) anlegen
Zu Erstlegen wir eine config für die Hauptdomain an und anschließend für die erste Instanz (um die anderen Instanzen kümmern wir uns später).
Hauptdomain konfiguieren (server_name eintragen)
sudo nano /etc/nginx/sites-available/domain.de.conf
Diesen Abschnitt einfügen:
server {
root /var/www/html;
server_name domain.de;
server_name www.domain.de;
location / {
try_files $uri $uri/ =404;
}
}
strg+x mit „y“ speichern
Konfiguration aktivieren:
sudo ln -s /etc/nginx/sites-available/domain.de.conf /etc/nginx/sites-enabled/
Default config löschen:
cd
cd /etc/nginx/
sudo rm sites-available/default
sudo rm sites-enabled/default
cd
Subdomain inkl. Portweiterleitung einrichten.
sudo nano /etc/nginx/sites-available/ns1.domain.de.conf
Diesen Abschnitt einfügen:
server {
listen 80;
server_name ns1.domain.de;
server_name www.ns1.domain.de;
location / {
proxy_pass http://127.0.0.1:1337;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto "https";
}
}
Konfiguration aktivieren
sudo ln -s /etc/nginx/sites-available/ns1.domain.de.conf /etc/nginx/sites-enabled/
nginx neustarten
sudo service nginx restart
Prüfen ob Nginx korrekt läuft
systemctl status nginx
Logout, Login mit Root Benutzer
Zweiten Benutzer Einrichten und sudo Rechte erteilen
adduser mainuser2
usermod -aG sudo mainuser2
su mainuser2
grep '^sudo' /etc/group
Node JS Einrichten
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 mainuser2 –
source /etc/profile
$ nvm ls-remote
$ nvm install 16.20.2
$ nvm list
$ nvm use 16.20.2
Prüfen in welchem Verzeichnis man sich befindet:
$ pwd
> /home/mainuser2
Wenn nicht im home/mainuser2 verzeichnis
§ cd /home/mainuser2
Nightscout Instanz 2 installieren
Auf dem PC in den entpackten Nightscout Ordner gehen, ins Verzeichnis lib->server wechseln.
Hier befindet sich eine Datei namens „env.js“.
Mit Programmers Notepad die Datei env.js öffnen und in Zeile 36 den Port ändern.
(Ports im Bereich 32768 – 65535 sollten frei zur Verfügung stehen.)
In dieser Anleitung Verwende ich für die zweite Installation den Port 36363.
Nach der Port Änderung die Datei speichern.
FTP Login auf Server mit Root.
Ins FTP Verzeichnis /home/mainuser2 wechseln und den Nightscout Ordner auf den Server laden.
Dem Nightscout Verzeichnis chmod 777 vor der Installation vergeben
Zurück zu Putty
Wechsel in das Verzeichnis von Nightscout
$ cd cgm-remote-monitor-master
Installation starten
$ npm install
Warten bis die Installation Vollständig abgeschlossen ist, anschließen die start.sh bearbeiten.
$ nano start.sh
-> inhalt einfügen
#!/bin/bash
# environment variables
export DISPLAY_UNITS="mg/dl"
export MONGO_CONNECTION="mongodb://mainuser2:passwort@localhost:27017/Nightscout2"
export BASE_URL="127.0.0.1:36363"
export API_SECRET="12-stelliger-code"
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"
# start server
/home/mainuser2/.nvm/versions/node/v16.20.2/bin/node server.js
strg+c -> mit „Y“ speichern bestätigen
Dateiberechtigung der start.sh ändern:
$ chmod 775 start.sh
Anschließend die start.sh einmal ausführen:
./start.sh
Wenn die start.sh korrekt läuft erscheint als letzte Meldung in Grün-Schrift WS:…
Mit strg+c beenden wir die Anzeige.
Nightscout Service einrichten
Damit die zweite Installation ebenfalls läuft, wird eine eigenständige nightscout2.service eingerichtet.
$ sudo nano /etc/systemd/system/nightscout2.service
einfügen und speichern:
[Unit]
Description=Nightscout2 Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/mainuser2/cgm-remote-monitor-master
ExecStart=/home/mainuser2/cgm-remote-monitor-master/start.sh
[Install]
WantedBy=multi-user.target
Speichern und beenden mit: „strg+X“ – „Y“ – „enter“
Reload systemd:
$ sudo systemctl daemon-reload
Nigtscout2 Service aktivieren und starten:
$ sudo systemctl enable nightscout2.service
$ sudo systemctl start nightscout2.service
Nightscout Service Status anzeigen lassen:
$ sudo systemctl status nightscout2.service
Ausgabe:
● nightscout2.service – Nightscout2 Service
Loaded: loaded (/etc/systemd/system/nightscout2.service; enabled; vendor preset: enabled)
Active: active (running)
[..]
Subdomain einrichten
sudo nano /etc/nginx/sites-available/ns2.domain.de.conf
kopieren und einfügen:
server {
listen 80;
server_name ns2.domain.de;
server_name www.ns2.domain.de;
location / {
proxy_pass http://127.0.0.1:36363;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto "https";
}
}
Konfiguration aktivieren und nginx neustarten
sudo ln -s /etc/nginx/sites-available/ns2.domain.de.conf /etc/nginx/sites-enabled/
sudo service nginx restart
Prüfen ob Nginx korrekt läuft
systemctl status nginx
Logout, Login mit Root Benutzer
Dritten Benutzer und Instanz anlegen
adduser mainuser3
usermod -aG sudo mainuser3
su mainuser3
grep '^sudo' /etc/group
Node JS 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 mainuser3 –
source /etc/profile
$ nvm ls-remote
$ nvm install 16.20.2
$ nvm list
$ nvm use 16.20.2
Prüfen in welchem Verzeichnis man sich befindet:
$ pwd
> /home/mainuser3
Wenn nicht im home/mainuser3 verzeichnis
$ cd /home/mainuser3
Git Kopieren/Clonen
Auf dem PC wieder in den Nightscout Ordner wechseln und die env.js wie bei der zweiten Instanz den Port ändern.
Für die dritte Installation habe ich den Port 36364 verwendet.
FTP Login auf Server mit Root.
Ins FTP Verzeichnis /home/mainuser3 wechseln und Nightscout Ordner auf den Server hochladen.
Nightscout Verzeichnis chmod 777 vor der Installation vergeben (wie auch bei der zweiten Instanz)
$ cd cgm-remote-monitor-master
$ npm install
Warten bis Installation Vollständig abgeschlossen (2-3 Minuten)
$ nano start.sh -> inhalt einfügen
#!/bin/bash
# environment variables
export DISPLAY_UNITS="mg/dl"
export MONGO_CONNECTION="mongodb://mainuser3:passwort@localhost:27017/Nightscout3"
export BASE_URL="127.0.0.1:36364"
export API_SECRET="12-stelliger-code"
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"
# start server
/home/mainuser3/.nvm/versions/node/v16.20.2/bin/node server.js
Mit strg+c schließen und mit „Y“ das speichern bestätigen.
Anschließend der start.sh wieder entsprechende Zugriffsrechte erteilen.
$ chmod 775 start.sh
Die start.sh einmal ausführen
./start.sh
Wenn die start.sh korrekt läuft erscheint als letzte Meldung in Grün-Schrift WS:…
Mit strg+c beenden wir die Anzeige.
Nightscout Service für dritte Instanz einrichten
Als nächstes muss ebenfalls eine nightscout.service Datei für die dritte Instanz erstellt werden.
$ sudo nano /etc/systemd/system/nightscout3.service
einfügen und speichern:
[Unit]
Description=Nightscout3 Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/mainuser3/cgm-remote-monitor-master
ExecStart=/home/mainuser3/cgm-remote-monitor-master/start.sh
[Install]
WantedBy=multi-user.target
Speichern und beenden mit: „strg+X“ – „Y“ – „enter“
Reload systemd:
$ sudo systemctl daemon-reload
Nigtscout3 Service aktivieren und starten:
$ sudo systemctl enable nightscout3.service
$ sudo systemctl start nightscout3.service
Nightscout Service Status anzeigen lassen:
$ sudo systemctl status nightscout3.service
Ausgabe:
● nightscout3.service – Nightscout3 Service
Loaded: loaded (/etc/systemd/system/nightscout3.service; enabled; vendor preset: enabled)
Active: active (running)
[..]
Subdomain für dritte Instanz
sudo nano /etc/nginx/sites-available/ns3.domain.de.conf
kopieren und einfügen:
server {
listen 80;
server_name ns3.domain.de;
server_name www.ns3.domain.de;
location / {
proxy_pass http://127.0.0.1:36364;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Proto "https";
}
}
Konfiguration aktivieren und nginx neustarten.
sudo ln -s /etc/nginx/sites-available/ns3.domain.de.conf /etc/nginx/sites-enabled/
sudo service nginx restart
Prüfen ob Nginx korrekt läuft
systemctl status nginx
Login mit Root Account
Certbot nginx installieren
Falls noch nicht installiert, certbot-nginx installieren:
sudo apt install certbot python3-certbot-nginx
SSL-Zertifikate anfordern
Wir beginnen mit der Hauptdomain und im weiteren Verlauf werden die SSL_Zertifikate für die Subdomains angefordert.
sudo certbot --nginx -d domain.de -d www.domain.de
E-Mail Adresse eingeben
Mit „A“ Bedingungen akzeptieren
Werbung mit N für Nein oder J für Ja
2 für automatische weiterleitung
sudo certbot --nginx -d ns1.domain.de -d www.ns1.domain.de
mit 2 weiterleitung bestätigen
sudo certbot --nginx -d ns2.domain.de -d www.ns2.domain.de
mit 2 weiterleitung bestätigen
sudo certbot --nginx -d ns3.domain.de -d www.ns3.domain.de
mit 2 weiterleitung bestätigen
Certbot Timer prüfen:
sudo systemctl status certbot.timer
Erneuerungsprozess testen
sudo certbot renew --dry-run
Firewall konfigurieren und aktivieren
Im ersten Schritt geben wir der Firewall (UFW) die entsprechenden Berechtigungen/Portfreigaben.
ufw allow 1337
ufw allow 36363
ufw allow 36364
ufw allow 'Nginx Full'
ufw allow 27017
ufw allow OpenSSH
Firewall aktivieren
ufw enable
Anschließend Kontrolle ob alles korrekt ist wie oben angeben.
$ sudo ufw status
(Status und freigegebene Ports einsehen)
Fertig. 3 laufende Nightscout Instanzen auf einem Server ohne zusätzliche andere Komponenten wie Docker, LXC oder ähnliche Container Dienste.
Update Hinweis:
Sollte eine neue Nightscout Version herauskommen, so muss jede Instanz einzeln Upgedated werden.
Vor einem Update muss zwingend die start.sh und die geänderte env.js gesichert werden!
Die Update Anleitung Nightscout Updates installieren muss enstprechend auf die einzelnen Instanzen bzgl der nightscout.service und dem Nightscout Verzeichnis geänder werden.