Nightscout selbst aufsetzen und hosten

  • Ich habe stark überlegt, Nightscout über nen Raspberry zuhause laufen zu lassen.

    Ich finde das mit dem RasPi zu Hause sehr charmant. Habe den Pi 4 vor fast 2 Jahren mit Nightscout für Töchterchen und mich mit 2 Instanzen eingerichtet. So ohne Datenmengen-Beschränkung gefällt mir das doch sehr viel besser als etwa die kostenlose Heroku-Variante. Kann jetzt noch die Daten von Januar 2020 abrufen. Bei Heroku musste ich alle halbe Jahr die Datenbank wieder stutzen.


    War dann eigentlich bei Martins 10.be, aber weil ich mit meiner eigenen App den Master-Follower-Mechanismus über einen MQTT-Server abbilde, den ich sowieso bei mir auf dem Pi laufen lasse, habe ich auch gleich Nightscout bei mir auf den Pi geholt. Läuft seitdem ohne Ausfälle.


    Solange unsere Geräte im Wlan sind, ist mir die DSL-Verbindung sowieso egal, da wird der Pi über die lokale Namensauflösung erreicht (natürlich macht der Pi bei mir auch den DNS). Und wenn man unterwegs ist, kann zur Not auch später alles in Nightscout gepumpt werden.

  • Diesen Anleitung ist nicht von mir sondern von webwude.

    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:


    7509-pasted-from-clipboard-png

    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.


    Ich habe die Version 4.4.0 genommen da ab 5.0 ein 64bit Prozessor benötigt wird.


    7510-pasted-from-clipboard-png

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

    Das kann so bleiben.

    7511-pasted-from-clipboard-png


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


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

    7512-pasted-from-clipboard-png

    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.

    Username und Password sind frei wählbar.


    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:


    7514-pasted-from-clipboard-png

    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.

    als:

    MONGODB_URI habe ich mongodb:// ip der Synnolgy:27017/nightscout

    API_SECRET Frei wählbar muss aber mindestens 12 zeichen lang sein

    DISPLAY_UNITS mg/dl oder mmol/l
    BASE_URL Habe ich https://meinedyndns:1337 (es wird eine ddns adresse benötigt um von aussen zuzugreifen,ich habe Noip,für diese adresse wird noch ein Letsencrypt zertifikat benötigt)

    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):


    7515-pasted-from-clipboard-png



    Es muss noch ein Reverse_Proxy eingerichtet werden:

    RE: AndroidAPS und Closed Loop

    Thema #983


    Im Router müssen noch Port-Freigaben und der Dyndns eingerichtet werden.

    Im moment habe ich die Ports 80,443 und 5001 eingerichtet.

    Diese müssen in der Firewall der Synology freigegeben werden.

    In x-drip habe ich als Basis URL https://API_SECRET@meinedyndns/api/v1/


    Mit diesen Einstellungen läuft es bei mir.

    2 Mal editiert, zuletzt von Tschipla ()

  • Hi zusammen!

    Ich teste momentan das loopen mit aaps, meiner alten Combo und dem G6. Ich habe NightScout auf einer Debian-VM laufen und auf meinem Haupt-Server mit Apache einen ReverseProxy aufgesetzt.

    Nun bringt aaps immer einen Fehler: "io.socket.engineio.client.EngineIOException: xhr poll error". Ich habe inzwischen herausgefunden, dass das am Proxy liegt und ein paar Varianten ausprobiert.

    Aktuell sieht das so aus:

    Code
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.) ws://10.0.0.20:3000/$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.) https://10.0.0.20/$1 [P,L]
    ProxyPass / https://10.0.0.20/
    ProxyPassReverse / https://10.0.0.20/
    ProxyPassMatch ^/(.*)$ https://10.0.0.20/

    Port 3000 ist der Aggregator.

    Leider kommt der Fehler immernoch. Kann mir einer einen Tipp geben?

  • Bei apache brauchst Du eigentlich keinen Reverse Proxy.

  • Sondern? Ich muss ja irgendwie vom Apache-Host zur Nightscout-VM kommen.

    Apache regelt das.

    Du musst eigentlich nur in der virtual Host die IP oder Domain angeben und in der etc/Host deine IP Adresse konfigurieren.

    Wenn alles korrekt eingerichtet ist, brauchst du nur im Browser deine Domain/IP:1337 eingeben und du landest auf deiner nightscout instanz.


    Hier habe ich eine Beispiel Konfiguration für Apache Webserver.

    https://www.michael-schloemp.d…uf-ubuntu-20-04-1blu-vps/

  • Nein, wenn ich nur die IP/Domain angebe, kommt obiger Fehler.

    Außerdem will/brauche ich Port 443. Andere Ports führen bei xDrip zu Zertifikalts-Fehlern.

  • Nein, wenn ich nur die IP/Domain angebe, kommt obiger Fehler.

    Außerdem will/brauche ich Port 443. Andere Ports führen bei xDrip zu Zertifikalts-Fehlern.

    Port 443 wird über die virtual Host conf geregelt.

    Normalerweise auch automatisch durch Apache, da es der Standard http Port ist.

  • Port 443 wird über die virtual Host conf geregelt.

    Normalerweise auch automatisch durch Apache, da es der Standard http Port ist.

    Natürlich, aber den Port 443 nach außen teilen sich ca 10 virtuelle Server mit 10 vhost Blöcken in der Apache-Config. Daher ist der Reverse-Proxy zwingend nötig. Genau das ist mein Problem. Ich muss wie eingangs beschrieben es nur hinbekommen das HTTP:UPGRADE für den Websocket hinzubekommen.

  • Natürlich, aber den Port 443 nach außen teilen sich ca 10 virtuelle Server mit 10 vhost Blöcken in der Apache-Config. Daher ist der Reverse-Proxy zwingend nötig. Genau das ist mein Problem. Ich muss wie eingangs beschrieben es nur hinbekommen das HTTP:UPGRADE für den Websocket hinzubekommen.

    Das klingt natürlich etwas anders.

    Bei digital ocean gibt's ne Anleitung zu Apache Reverse Proxy.

    Es wird an deiner Proxy Einstellung liegen.

    http://www.digitalocean.com/co…g-mod_proxy-extension.amp

  • Danke! Da steht aber zu websockets auch nicht wirklich was drin.

    Bin jetzt nach der Anleitung gegangen: https://www.serverlab.ca/tutor…bsockets-with-apache-2-4/

    Derweil habe ich Fortschritte gemacht. mod_wstunnel war nicht aktiviert, so kanns natürlich schon zweimal nix werden.

    Folgender Block hält aktuell die Verbindung aufrecht:

    Code
    RewriteEngine on
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule ^/?(.*) "wss://10.0.0.20/$1" [P,L]
    ProxyPass / https://10.0.0.20/
    ProxyPassReverse / https://10.0.0.20/
    ProxyRequests off

    Der xhr poll error ist damit weg, stattdessen kommt "PING received". So weit also OK, mal abwarten ob es stabil läuft...

    Danke schonmal für die Hilfe!

    Einmal editiert, zuletzt von Schubi () aus folgendem Grund: Läuft stabil!

  • Heute Mail erhalten,


    Let's Encrypt certificate expiration notice for domain xxxxxxxx


    Kann es sein das das zertifikat nur 90 Tage gilt ?


    Und wie erneuere ich das ? reicht ein sudo certbot und ich habe wieder 90 Tage ruhe ?

  • sudo certbot renew ergibt immer


    The error was: MisconfigurationError('Error while running nginx -c /etc/nginx/nginx.conf -t.\n\nnginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/nightscout:11\nnginx: configuration file /etc/nginx/nginx.conf test failed\n'). Skipping.

    All renewal attempts failed. The following certs could not be renewed:

    /etc/letsencrypt/live/x251.myqnapcloud.com/fullchain.pem (failure)


    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


    All renewal attempts failed. The following certs could not be renewed:


    1.1.2022 läuft das Zertifikat ab :(


    Bei sudo certbot certonly kommt auch immer ein Fehler


    root@nightscout:/home/pi# sudo certbot certonly

    Saving debug log to /var/log/letsencrypt/letsencrypt.log

    Error while running nginx -c /etc/nginx/nginx.conf -t.


    nginx: [emerg] "server" directive is not allowed here in /etc/nginx/sites-enabled/nightscout:11

    nginx: configuration file /etc/nginx/nginx.conf test failed



    How would you like to authenticate with the ACME CA?

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    1: Nginx Web Server plugin (nginx) [Misconfigured]

    2: Spin up a temporary webserver (standalone)

    3: Place files in webroot directory (webroot)

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Select the appropriate number [1-3] then [enter] (press 'c' to cancel):