Nightscout selbst aufsetzen und hosten

  • Moin,

    Code
    export MONGO_CONNECTION="mongodb://username:password@localhost:27017/Nightscout

    Damit hatte ich auch ein Problem. Ich verstehe das so, dass .../Nightscout bedeutet, dass die Datenbank Nightscout heißt, auf die zugegriffen werden soll. Die war aber gar nicht bei mir erstellt. Schaue doch mal, ob die Datenbank bei Dir in der MOngoDB existiert.

  • Die aktuelle Nightscout Version 14.2.2 ist auf dem Raspberry 3 etwas träge, z.B. bei Reporten. Hab mir nun einen 4er besorgt, da ist es besser. War aber wieder etwas Bastelei mit dem Umzug. Ist halt Hobby.

    Moin,


    zuerst sollte ich localhost bei proxy_pass machen:

    Code
    location / {
    proxy_pass https://meine.seite.url:1337;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }

    und dann später meine Seite eintragen.


    Aber muss ich dann auch den Port 1337 nach außen aufmachen? Ich dachte ein Reverse WebProxy macht nur einen Port nach außen auf und leitet dann intern auf alles weiter, was ich möchte.

    Ich wollte nur den 443 nach außen aufmachen und den dann auf meinen internen 1337 weiterleite - wo Nightscout doch sitzt.

    Wo ist mein Gedankenfehler?


    Ich sehe aktuell leider nur die NGINX-Testseite und komme nicht auf meine NS-Seite, weder im lokalen Netz, noch von außen über port 443.


    PS. "Listening on port 1337 null" --> ist die null da richtig?

    Einmal editiert, zuletzt von ovinator ()

  • Ahh, ich habe den Fehler glaube ich identifiziert. Am Ende des start scripts wird:

    Code
    PORT=1337 node server.js

    aufgerufen - der mach bei mir aber nur einen tcp6 port auf. Den muss ich jetzt irgendwie auf tcp bekommen ...

  • Code
    PORT=1337 HOSTNAME=0.0.0.0 node server.js

    Löst das Problem.


    denn in: lib/server/server.js

    wird connect (port, hostname) aufgerufen

  • So etwas wie


    net.ipv6.conf.all.disable_ipv6


    unter /etc/sysctl.d ?

    Danke, dass habe ich auch probiert, trotzdem war nach reboot immer tcp6 drin - habe ich vielleicht irgendwas falsch gemacht. (Ich hatte irgendwas mit =1 drin - das probiere ich auch noch mal. Denn ipv6 will ich gar nicht haben ...

  • Moin,

    Damit hatte ich auch ein Problem. Ich verstehe das so, dass .../Nightscout bedeutet, dass die Datenbank Nightscout heißt, auf die zugegriffen werden soll. Die war aber gar nicht bei mir erstellt. Schaue doch mal, ob die Datenbank bei Dir in der MOngoDB existiert.

    habe mit

    db.createUser( { user: "meinuser", pwd: "meinpw", roles: [ "readWrite", "dbAdmin" ] } )


    meinen User und Db erstellt, lt. Anleitung un in der start.sh steht

    export MONGO_CONNECTION=mongodb://"meinuser":"meinpw"@127.0.0.1:27017/dbAdmin?authSource=admin


    ist doch richtig oder ? oder wie kann ich nachschauen welche Mongo DB ich erstellt habe?



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

    das steht in der Anleitung

    4 - MongoDB einrichten / einrichten MongoDB

    Daten in <> durch eigene Daten ersetzen! / Daten in <> durch eigene Daten ersetzen! Benutzer anlegen über die Mongo Shell: / Benutzer erstellen:

    erst den Admin: / erster Admin:

    Code
    sudo mongo -shell
    use admin
    db.createUser( { user: <"USER">, pwd: <"PASSWORD">, roles: [ "userAdminAnyDatabase" ] } )

    dann die eigentliche Nightscout Datenbank und Nightscout User anlegen: / then Nightscout Datenbank und Benutzer:

    Code
    use mongodb db.createUser( { user: <"USER_NS">, pwd: <"PASSWORD_NS">, roles: [ "readWrite", "dbAdmin" ] } )

    hier die start.sh lt. Anleitung


    Bash
    #!/bin/sh
    cd /home/user/nightscout
    export AUTH_DEFAULT_ROLES=denied
    export CUSTOM_TITLE="Mein Nightscout"
    export API_SECRET=PASSWORT #export SSL_KEY=/etc/letsencrypt/live/.../privkey.pem (das wird später nachgetragen)
    #export SSL_CERT=/etc/letsencrypt/live/.../fullchain.pem BASE_URL=NIGHTSCOUT_SITE_URL export MONGO_CONNECTION=mongodb://<"USER_NS">:<"PASSWORD_NS">@localhost:27017/nightscout
    export DISPLAY_UNITS=mg/dl
    export ENABLE="delta direction timeago devicestatus ar2 profile careportal boluscalc food rawbg iob cob bwp cage sage iage treatmentnotify basal pump openaps upbat errorcodes simplealarms bridge mmconnect loop"
    export DISABLE=""
  • Ich glaube, dass lag an der Mongo DB Version, die ab einer bestimmten Nightscout Version nötig war und nur auf 64 Bit verfügbar war.

    Mongo funktioniert nur mit sehr kleinen Datenmengen und in alten Versionen auf 32 bit. War damals (2017) für mich der Grund keinen Raspi sondern einen kleinen Intel-Server zu nehmen.


    LG
    Martin

  • Hallo Garfield78, hallo Community,

    vielen Dank nochmal für Deine Anleitung, ich habe sie hauptsächlich benutzt, Ich habe es aber mit einem Raspi 4 (2GB) durchgeführt und mit den aktuellen Paketen. Läuft seit gestern um 19:30 und funktioniert auch. Allerdings habe ich den Reverse Proxy nicht hinbekommen - aber ich brauche ihn auch nur für certbot - ich habe direkt meinen API-Port freigegeben.


    Hier (in Englisch) meine Kommentare zur Anleitung, falls jemand anders über die gleichen Probleme stolpert:


    Nightscout on a raspi 4:


    Download buster image:

    https://downloads.raspberrypi.…raspios_arm64-2021-05-28/


    Burn on SD card using Raspberry Pi Imager

    https://www.raspberrypi.org/software/


    Following instructions from Garfield, see my comments below per Step of that instruction:

    https://github.com/Garweho/Nightscout-on-raspberry-pi


    Step 2 and 3, change sources only for MongoDB installation:

    • Step 2: Before changing sources.list, copy old souces.list as source.org

      copy sources.org sources.list


    • After Step 3:
      rename sources.list sources.mongocopy sources.org sources.list



    During Step 5, I followed the attached link to get newest versions, but later it didn‘t work out, so I had to go back to nodejs version 10.24.0.

    Code
    sudo node-install -v 10.24.0;



    Step 8: Before nightscout installation (npm update):

    Code
    sudo chmod 777 /home/pi/cgm-remote-monitor-14.2.2/package-lock.json



    Step 9:

    • Be careful, according to Step 4 the Database is not named “nightscout”, but “mongodb” (and you could call it what you want – and if you do an export from e.g. 10be, your could restore the database from there with mongorestore (mongorestore filename.bson) – but then you need to create the right user (as in Step 4) in that database –> put the right database name into the connection string of the start.sh script (so e.g. mongodb if you used that in step 4, instead of nightscout):
    Code
    export MONGO_CONNECTION=mongodb://<"USER_NS">:<"PASSWORD_NS">@localhost:27017/mongodb


    • PORT=1337 node server.js starts the nightscout API on port 1337. Be careful, in my setting only a IPv6 port got attached to the rest API of nightscout. To check that please run after start.sh was executed / nigthscout service is running:

      sudo netstat -tulpen | grep -v '127.0.0.1' | grep -v '::1:'

      And see if port 1337 is only attached to tcp6 and you are using tcp4 – then you cannot connect to that port. To ensure you are using tcp4, the server.js need to listen to 0.0.0.0 – therefore the parameter HOSTNAME needs to be set to 0.0.0.0 at the end of start.sh script:
    Code
    PORT=1337 HOSTNAME=0.0.0.0 node server.js &


    • Please check at the end of Step 9 if you can access the rest api on port 1337, either with a browser on the raspi (http://localhost:1337) if you have a connected screen, or through the network on

      http://raspi-ip:1337



    Step 10: Read carefully: nightscout.service to be placed into /etc/... folder!

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


    Step 12:

    • Before starting sudo certbot (or sudo certbot -d meine.domain.de), you need to open port 80 and port 443 in your firewall fordwarding to your raspi
      • In Fritzbox in German this is under “Internet/Freigaben”. I found a bug in Fritzbox – you have to edit the configuration again and press ok again to get it activated (?!). And also every change needs to be done twice.
      • I closed port 80 after the installation again. But be careful, the certbot needs to have an open port regularly to update the certificates.
    • After certbot was executed, you need to put the certificates into the start script. Be careful the certificates are usually not readable for the nightscout user and service. So you need to do chmod 755 on the /etc/letsencrypt/live/ and /etc/letsencrypt/archive/ folders and also on the certificates inside the "meine.seite.url" folders.
    • TODO: I still need to put a script in cron.d folder to ensure that this get repeated whenever a new certificate in created.
    • Dont restart ./start.sh manually (otherwise you must kill the process before) and always use the service. it is better to use systemctl to start or stop or restart or check if it is running without error messaged through status.
    Code
    sudo systemctl restart/start/stop/status nightscout


    Gruß ovinator

    2 Mal editiert, zuletzt von ovinator () aus folgendem Grund: Verschönerungen

  • Mongo funktioniert nur mit sehr kleinen Datenmengen und in alten Versionen auf 32 bit. War damals (2017) für mich der Grund keinen Raspi sondern einen kleinen Intel-Server zu nehmen.


    LG
    Martin

    Mein Verständnis ist, dass die MongoDB-Lizenzbestimmungen sehr problematisch sind. Deswegen sind sie heute aus fast alles Releases geflogen. Sie waren noch in Debian Stretch 64-Bit drin, aber ab Buster nicht mehr. (Aber vielleicht habe ich das auch falsch verstanden)

  • Freut mich, dass die Anleitung helfen konnte. Und danke für deine umfangreichen Kommentare.:thumbup:

    Wenn ich darf, würde ich die demnächst in meine Anleitung einbauen. Sobald ich die Zeit finde.

  • Code
    use mongodb
    db.createUser( { user: <"USER_NS">, pwd: <"PASSWORD_NS">, roles: ["readWrite", "dbAdmin"] } )

    Moin,

    mit use mongodb, springst Du in eine Datenbank namens mongodb. Wenn Du hier stattdessen use nightscout benutzt, dann heißt die Datenbank nightscout.


    In der start.sh steht dann diese Zeile:

    export MONGO_CONNECTION=mongodb://<"USER_NS">:<"PASSWORD_NS">@localhost:27017/mongodb

    oder eben

    export MONGO_CONNECTION=mongodb://<"USER_NS">:<"PASSWORD_NS">@localhost:27017/nightscout

    oder z.B.

    export

    MONGO_CONNECTION=mongodb://<"USER_NS">:<"PASSWORD_NS">@localhost:27017/bestDBever 


    Hilft das weiter?


    Gruß ovinator


    PS: Wenn Du vorher eine Datanbank bereits woanders hast und die ganzen *.bson-files exportieren kannst, dann kannst Du diese mit mongorestore patternname.bson einzeln importieren. Hierbei wird dann der Datenbankname aus der anderen DB übernommen. Wenn das der Fall ist, musst Du in mongodb dann use richtigerdatenbankname machen, und dort drin dann den user erstellen.

  • Freut mich, dass die Anleitung helfen konnte. Und danke für deine umfangreichen Kommentare.:thumbup:

    Wenn ich darf, würde ich die demnächst in meine Anleitung einbauen. Sobald ich die Zeit finde.

    Natürlich darfst Du das. Würde mich freuen. Ich hatte auch überlegt einen Vorschlag direkt im GitHub zu machen, aber da wollte ich Dir lieber nicht reinfuhrwerken.

  • Danke genau daran lag es :-) aber die >< müssen weg


    Noch eine frage wie exportiere ich mal zu testzwecken die DB von 10be ?

    habe das hier gefunden unter Backups


    Vorhandene MongoDB-Datenbank-Dumps herunter laden.

    Diese können dann z.B. bei einem anderen Anbieter/Datenbank eingespielt oder nur als Backup zur Sicherheit wo anders gespeichert werden.

  • Datenbankrecovery von 10be

    Moin,

    auf der neuen Webseite von 10be oben auf Backups.

    Du siehst dann alle 4 Stunden ein Backup, Du suchst Dir eins aus - zum Beispiel das Neueste von ganz oben und lädst es runter.

    Die Datei dann irgendwo im Linuxdateisystem entpacken [z.B. in ~/temp/] (tar -xvzf backup.tar.gz) [Achtung das backup heißt datum_uhrzeitstunde.tar.gz]. Dann wird ein Verzeichnis erzeugt, mit dem gleichen Namen wie die gepackte Datei - darin ist ein Verzeichnis mit nighscout und einer Nummer. Wenn Du in beide hereingehst, sieht das Verzeichnis wie folgt aus:


    Für mongorestore sind nur die x.bson-Datein relevant, also diese 7:


    Dann schreibst Du für jede .bson datei das folgende Kommando auf:

    mongorestore name.bson


    (Name also beim ersten mal: activity, beim zweiten mal devicestatus ...)


    Wenn Du Deine Datenbank zum Beispiel "horst" vorher genannt hast, dann wir sie nach dem restore wieder so heißen. (Wenn Du keine ganze neue Datenbank wiederhergestellt haben willst, sondern die Daten importieren möchtest, dann kannst Du mit mongoimport arbeiten - aber dann brauchst Du noch die richtigen Befehle dafür).


    Danach hast Du alle Deine Werte in der Datenbank names "horst".


    Jetzt musst Du wieder in mongo hereingehen und dort die Anleitung unter Punkt 4 wiederholen, nur dass Du jetzt "use horst" machst und dann dort den User erneut anlegst.


    Code
    sudo mongo -shell
    use horst
    db.createUser( { user: "USER_NS", pwd: "PASSWORD_NS", roles: [ "readWrite", "dbAdmin" ] } )


    Wenn Du nicht weißt, wie die Datenbank heißt, dann kannst Du wenn Du in der mongo-shell drin bist (nach Zeile 1 von dem Quellcode), einfach show dbs schreiben. Dann siehst du vermutlich: admin, local und die, die du erstellt hast (nach Anleitung mongodb) und die, die Du restored hast ("horst"). Den Namen also oben statt horst einfügen.


    In der start.sh-Datei musst Du dann auch in der Datenbank-Zeile hinten .../horst schreiben statt mongoDB oder nightscout.

    Code
    export MONGO_CONNECTION=mongodb://"USER_NS":"PASSWORD_NS"@localhost:27017/horst

    Service neu starten und es sollte gehen.

    Code
    sudo systemctl restart nightscout



    Gruß ovinator

    8 Mal editiert, zuletzt von ovinator ()

  • Dann schreibst Du für jede .bson datei das folgende Kommando auf:

    mongorestore name.bson


    (Name also beim ersten mal: activity, beim zweiten mal devicestatus ...)

    Da scheint irgendetwas an der Syntax nicht in Ordnung zu sein :( bekomme in mongo -shell immer folgende Fehlermeldung, befinde mich aber schon im richtigen Verzeichnis.

    > mongorestore activity.bson

    2021-09-26T10:46:45.734+0200 E QUERY [thread1] SyntaxError: missing ; before statement @(shell):1:13

  • Habe nun einen Pi4 mit 8GB Ram (72€) hier liegen und bekomme keinen zugriff per ssh hin :-( buster image: vom link ist druff aber bekomme weder über WinSCP per ssh noch über Putty einen connect hin, wo liegt der Fehler ? IP ist vom Router festgesetzt, ping kommt an