Nightscout selbst aufsetzen und hosten

  • Hi. Ich bin gerade auch am Basteln.


    Meine Tochter hat eine Minimed 640G - mittels passendem OTG Kabel und Handy kann ich die Daten schon einmal auslesen.


    Nun würde ich gerne eine lokale Instanz erstellen für die Webseite und Datenbank. Ich habe sowohl ein Synology DS 218+ als auch ein Raspberry Pi3. Leider waren meine Bemühungen auf der Pi nicht von Erfolg gekrönt, egal, mit welchem Weg, beim PostInstall der aktuellen Version 14 erhalte ich Fehler von node.js - fatal error call_and_retry_last allocation failed - javascript heap out of memory


    Daher denke ich die Docker-Lösung an. Aber: nur die Container installieren und ausführen wird es nicht sein - kann mir irgendeiner einen Tipp geben, wo ich die Einstellungen / Umgebungsvariablen her bekomme?


    Vielen Dank für einen Tipp.

    Beste Grüße

    Michael

  • Nachdem ich es jetzt mit Synology und Docker hinbekommen habe, kann ich gerne eine kleine, ausführlichere Anleitung schreiben, falls gewünscht.


    Nach dem ersten Probebetrieb habe ich ein paar Fragen bzgl. NightScout - ich habe schon gesucht, aber kein dezidiertes Thema dazu gefunden:


    - Ich habe gestern Abend den Stick für die Nacht abgesteckt und heute Morgen wieder eingesteckt. Allerdings sind jetzt auf der DB keinerlei Werte der Nacht. Auf der App sehr wohl, aber scheinbar werden die Nachtwerte (noch) nicht übertragen - geht das irgendwann automatisch oder muss / kann man das anstoßen?

    - gibt es Apps zum Auslesen der NightScout Webseite oder gar zum Auslesen der Datenbank?


    Beste Grüße

    Michael

  • Fände eine Anleitung für Synology auch super, da der pi nicht wirklich geeignet ist.


    Geht docker auch mit den günstigeren Einstiegslösungen wie einer DS216j oder muss es was potenteres sein?

  • Na gut, dann wollen wir mal.


    Voraussetzungen:

    - Synology Diskstation mit aktueller Diskstation Software


    Schritt 1:

    Docker Unterstützung prüfen. Dazu über das Menü auf Paketzentrum gehen und in der obigen Suche nach "docker" suchen:


    Wenn gefunden, Docker installieren. Wenn nicht gefunden, auf der Synology Seite die Docker Unterstützung überprüfen.


    Schritt 2:

    Docker öffnen und entsprechende Container installieren. Dazu auf den Reiter "Registrierung" und nach "mongo" suchen und "latest" herunterladen:

    Danach nach nightscout suchen und ebenfalls herunterladen - das travis Bild auswählen und "latest-dev" herunterladen:


    Schritt 3: Konfiguration der Container / der Mongo-DB:


    Man öffnet Mongo und fügt unter dem Reiter Umgebung zwei Variablen hinzu:

    Username und Password sind notwendig, um die Datenbank zu konfigurieren.

    Ebenso sollte man die Port-Einstellungen vereinheitlichen und den Container-Port und lokalen Port auf den gleichen Wert stellen, um Fehler zu vermeiden, hier am besten auf 27017.


    Danach mittels eines Datenbank-Clients auf der Datenbank verbinden, zum Beispiel "robo 3t":

    ---- Screenshots und Details folgen ----


    Schritt 4: Nightscout Container konfigurieren:


    Genau wie beim Mongo Container fügt man beim Nightscout Container ebensolche Umgebungsvariablen hinzu:


    Pflicht sind die Mongo URI mit den passenden Daten, Api Secret, Display Units und Base URL (die URL der Nightscout Seite), der Rest wohl erst mal optional.

    Die Ports steht man wieder auf den gleichen Wert für lokal und Container, hier 1337.


    Danach alles speichern ausführen. Am besten öffnet man den Container noch einmal, und schaut ins Protokoll, ob hier irgendwelche Fehlermeldungen aufscheinen (ich musste die statische IP der Synology in der Mongo Uri angeben, localhost und 127.0.0.1 gingen nicht):



    To be continued - ich mache bald weiter :)

    Einmal editiert, zuletzt von webwude ()

  • ... da der pi nicht wirklich geeignet ist.

    Ach nein, so ist das nicht.

    Ich habe es auf meinem Pi4 gut installieren können und es läuft einwandfrei.

    Habe alles einzeln installiert. 64bit Ubuntu als OS, eine MongoDB Instanz, zwei Nightscout, Apache mit letsencrypt für die https-Verbindung. Export der beiden MongoDB-Datenbanken aus Heroku, Import in meine lokale Mongo. Musst mir dafür lauter Eizelanleitungen zusammensuchen, ging aber ganz gut.

    Ich finde es auf dem Pi klasse.

  • ... da der pi nicht wirklich geeignet ist.

    Ach nein, so ist das nicht.

    Ich habe es auf meinem Pi4 gut installieren können und es läuft einwandfrei.

    Habe alles einzeln installiert. 64bit Ubuntu als OS, eine MongoDB Instanz, zwei Nightscout, Apache mit letsencrypt für die https-Verbindung. Export der beiden MongoDB-Datenbanken aus Heroku, Import in meine lokale Mongo. Musst mir dafür lauter Eizelanleitungen zusammensuchen, ging aber ganz gut.

    Ich finde es auf dem Pi klasse.

    Grundsätzlich gebe ich recht - der pi ist von der Idee her gut geeignet, allerdings ist das häufige Schreiben für die Speicherkarte nicht unbedingt gut, bzw. die ausfallwahrscheinlichkeit höher.

    Auf meinem pi3 hab ich es damals auch nicht installiert bekommen.

  • ... da der pi nicht wirklich geeignet ist.

    Ach nein, so ist das nicht.

    Ich habe es auf meinem Pi4 gut installieren können und es läuft einwandfrei.

    Habe alles einzeln installiert. 64bit Ubuntu als OS, eine MongoDB Instanz, zwei Nightscout, Apache mit letsencrypt für die https-Verbindung. Export der beiden MongoDB-Datenbanken aus Heroku, Import in meine lokale Mongo. Musst mir dafür lauter Eizelanleitungen zusammensuchen, ging aber ganz gut.

    Ich finde es auf dem Pi klasse.

    Ich versuche es seit Tagen auf dem Pi4 mit piOS zum Laufen zu bringen. Bisher laufen weder die Version von Kitekater noch die Dockerversion von dhermanns und ich zupf mir so langsam die restlichen Haare raus. Ich vermute es liegt am https aber bisher gabs auf localhost:1337 einfach keinerlei Lebenszeichen, egal ob mit oder ohne nginx etc. pp.


    Könntest du hier vielleicht kurz die Seiten verlinken, die dich zum Erfolg gebracht haben?

    Bei mir läuft der Pi4 von SSD ohne SD-Karte. Das dürfte wohl einige Zeit stabil laufen und mache mir da auch weniger Sorgen (habe einen anderen Pi1 mit SSD seit 3 Jahren im Dauerbetrieb ohne einen einzigen Absturz oder Neustart bisher). Ich versuche jetzt erstmal die Ubuntu-Lösung zu installieren, freue mich aber, wenn du hier die links teilen könnest.


    Falls ich es auch zum Laufen bringe, arbeite ich dann gern an einer Dokumentation und teile das hier.


    Vielen Dank! Viele Grüße CR

  • Könntest du hier vielleicht kurz die Seiten verlinken, die dich zum Erfolg gebracht haben?

    Leider nicht.
    Die von dir angeführten Seiten (kitekater und dhermanns) hatte ich mir auch angeschaut, bin aber beiden nicht gefolgt.
    Letztendlich habe ich mir einfach alles in einzelnen Schritten installiert.
    1) Ubuntu 18.04 LTS 64bit als Betriebssystem installiert. Mein Gedächtnis ist nicht mehr das beste, aber ich meine, der Grund war, dass MongoDB mit 32bit irgendwelche Einschränkungen hatte, die ich nicht haben wollte und deshalb 64bit als Grundlage wollte. Im Januar gab es das PiOS aber nocht nicht als 64bit, also nahm ich Ubuntu.

    2) Apache mit APT als Webserver installiert (irgendwie habe ich immer in meinem Leben Apache genommen, deshalb war das einfach Gewohnheit). Wie es mit nginx gehen würde, weiß ich deshalb nicht.

    3) Letsencrypt mit Apache-Einbindung mit APT installiert und mehrere subdomains zu meiner Domain zertifizieren lassen. Grund ist, dass ich 2 Nightscout-Instanzen laufen lasse (eine für mich, eine für meine Tochter). Von außen spreche ich die mit unterschiedlichen Subdomains an, so dass ich für den Nightscout-Link keine unterschiedlichen Ports brauche, sondern alles über den HTTPS-Port läuft, aber eben einmal an <tochter-name>.<meine-domain>.de und <papa-name>.<meine-domain>.de.
    4) MongoDB mit APT installiert und zwei User (einen für mich, einen für Tochter) angelegt, die Passworte habe ich einfach genauso wie vorher bei Heroku genommen. Datenbank-Tabellen habe ich nicht angelegt, das passiert automatisch in Schritt 5.

    5) die alten Nightscout-Daten aus Heroku exportiert (ich meine, das hätte ich über die Webseite gemacht, wo man irgendwo auch shell-Kommandos eingeben kann und da dann einen Export mit command-line-Kommando gemacht). Den Export dann auf dem Pi in die mongodb für den entsprechenden User importiert.

    6) cgm-remote-monitor mit git in mein User-Verzeichnis ausgecheckt. (Habe ich zuzsätzlich mit APT auch node.js installiert? wahrscheinlich)

    7) 2 Shell-Skripte (eines für Tochter, eines für mich) im Userverzeichnis angelegt, in denen ich sämtliche Nightscout-Umgebungsvariablen gesetzt habe (der Einfachheit halber habe ich einfach alle Heroku-Variablen inkl der Passworte für MongoDB und Api-Secret genommen. Die Ports, auf denen jede Nightscout-Instanz dann lauscht, in den zwei Skripten habe ich auf zwei irgendwo im 16000er Bereich gesetzt (also nicht 1337 genommen). Ist nicht optimal, irgendwo im Bereich, wo Ports dynamisch zugewiesen werden, Ports festzulegen, funktioniert aber, weil die Nightscout-Prozesse direkt nach dem Booten gestartet werden und diese Ports dann natürlich noch frei sind). Die Shell-Skripte habe dazu ich in der crontab des Pi-Users so eingetragen, dass sie nach einem Reboot automatisch gestartet werden (also nicht als Service auf der Maschine eingetragen), der crontab-Eintrag sieht dann so aus: "@reboot /home/ubuntu/<mein startscript name>.sh". [Nachtrag: Die shell-Skripte enthalten natürlich nicht nur die Umgebungsvariablen, sondern am Schluss auch den Start des Nightscout-Servers mit "node -title 'Vater/Tochter-Name' <pfad zu cgm-remote-monitor>/server.js"]
    8.) In Apache 2 VirtualHosts definiert, die über HTTPS mit der entsprechenden Vater- bzw. Tochter-Subdomain die Verbindung annehmen und an die beiden entsprechenden Nightscout-Ports weiterleiten. In Nightscout habe ich dazu die INSECURE_USE_HTTP-Umgebungsvariable in die beiden Shell-Skripte mit hineingenommen, weil ich zwar von außen durchaus eine HTTPS-Verbindung habe, aber das mit dem X-Forwarded-Proto-Header auf die Schnelle nicht hinbekommen habe, da war es das einfachste, Nightscout auch unsichere Verbindungen zu erlauben, obwohl die Verbindung durchaus sicher ist. Damit der Apache-Server auch von außen erreichbar ist, wird in der Fritzbox auf dem HTTPS-Port ein Forwarding an den HTTPS-Port des Pi eingerichtet.

    Zusätzlich habe ich den Pi in unserem Netzwerk als DNS-Server eingerichtet und unsere Fritzbox so konfiguriert, dass sie den Pi als DNS-Server auch bekannt gibt.

    Im Pi habe ich dann die externen subdomains lokal aufgelöst, so dass ich im Wlan/Ethernet nicht erst an den externen Provider-DNS-Server gehe und dann die externe Fritzbox-Adresse mit ihrer Weiterleitung an den Pi verwendet wird, sondern im Wlan/Ethernet ohne Umwege der Pi angesprochen wird.


    Wegen der Reboot-Einträge in der crontab habe ich dann den Pi einmal neu gestartet. Seitdem laufen die beiden Instanzen. Ich musste in allen unseren Clients nur den qualified name von xyz.herokuapp.com auf <vater/tochter>.<meine domain>.de ändern und alle clients liefen direkt auf den Pi.

  • Könntest du hier vielleicht kurz die Seiten verlinken, die dich zum Erfolg gebracht haben?

    Leider nicht.
    ...


    Wegen der Reboot-Einträge in der crontab habe ich dann den Pi einmal neu gestartet. Seitdem laufen die beiden Instanzen. Ich musste in allen unseren Clients nur den qualified name von xyz.herokuapp.com auf <vater/tochter>.<meine domain>.de ändern und alle clients liefen direkt auf den Pi.

    Herzlichen Dank!

    Zwar weiß ich jetzt ungefähr, wie es laufen könnte, aber ganz trivial ist das sicher nicht. Noch schrecke ich davor zurück.

    Gerade beim ssl/https hakt es bei mir regelmäßig und ich komme nicht mehr weiter. Und eine http-Seite bekomme ich nirgendwo geöffnet, weshalb ich bisher nicht mal weiß, ob mein setup bis dahin funktioniert hat.

    Naja, deshalb setze ich meine Hoffnung gerade auf digitalocean (DO) und versuche es dort mal. Da ist die ssl-Einbindung und mongodb ein wenig intuitiver. Für massig Speicherplatz und sichere Verbindung und stabiles setup sind 4,50 EUR im Monat ok. Dafür habe ich mir heute eine extra domain registriert und dns auf DO eingerichtet. Muss jetzt noch warten, dass das in den nächsten Stunden durchläuft und ich dann endlich ein Zertifikat bekomme. Mal sehen. Ich halte euch informiert.


    Update 20.10.20: ich hab's auf DO hinbekommen! Über dnydns konnte ich das nicht laufen lassen, weil ich da schon zu viele http server laufen habe und das nicht gut aufgeteilt bekomme.


    Ich habe mir die Einzelteile aus verschieden gists zusammengestückelt und hier kombiniert:

    gist.github.com/DrCR77


    Da das ganze hier vielleicht etwas OT ist, habe ich dafür einen eigenen Beitrag aufgemacht.

    4 Mal editiert, zuletzt von CR77 ()

  • Hi,


    erster Post - also: Hallo!


    Ich wollte auch eine lokal gehostete Variante vom Nightscout haben, damit ich lokal meine Daten unter Kontrolle habe und eine lokale Auswertung mittels Nightscout Reporter machen kann.

    Ich habe es auch hinbekommen:

    Pi4B mit Ubuntu 20.04 LTS, NodeJS 12 (und passendem NPM), MongoDB 4.4, local nightscout reporter 2.0.3


    Habe auch versucht mittels nginx und reverse proxy die Nightscout Instanz nicht über den Port sondern mittels URL zu realisieren 192.168.1.1:1337 --> 192.168.1.1/nightscout/

    Aber das klappt aktuell nicht ganz. Lädt zwar alles anfänglich, aber die Darstellung des Diagramms bleibt aus...

    Hat jemand für nginx für die reverse proxy config parat die funktioniert? Scheinbar reicht ein simples proxy_pass nicht aus:

    Code
    location /nightscout/ {
    proxy_pass http://192.168.1.1:1337/;
    }
  • webwude erstmal Danke für die Anleitung, wann schreibst du diese denn weiter? Ich habe bei mir das Problem, dass Nighscout entweder keinen Zugriff auf die MongoDB hat (die URI sollte eigentlich stimmen) oder in einer Loop hängt wenn ich noch die Variable "authSource=admim" noch dazunehme. Eine Datenbank habe ich in 3T erstellt. Das seltsame ist, sobald ich bei der Einrichtung der Mongo DB Root_Username und Root_Password weglasse (und in der Mongo_URI dann auch) funktioniert das ganze. Hast du hier noch einen Tipp für mich?

  • Hallo,

    Je nachdem an wann man wieder reisen kann, werde ich wohl bald mein aaps offline nutzen müssen. Ich bin normalerweise (vor corona) häufiger in china. Dort kommt sehr wenig durch die Firewall (jetzt ohne Hongkong noch beschissener) weshalb ich nicht davon ausgehe, dass mein aaps dort noch funktionieren wird.


    Muss ich das hier beschriebene Prozedere alles durchmachen oder gibt es für meine spezielle Anforderung (ohne Internet mein aaps am Laufen halten), einfachere Möglichkeiten?


    Benötige ich dann in china einen Handyhotspot um mit meinem raspberry ein gemeinsames (offline) Netzwerk zu haben? Oder gibt es da stromsparende Alternativen (Bluetooth?)


    Danke schonmal für die ersten Antworten.

    Ich habe vom thread bisher nur 10% verstanden aber ich habe wohl noch mindestens ein paar Monate um das Ding zum Laufen zu bekommen ;)