H2-invent / open-datenschutzcenter

Open Source Datenschutzmanagement System
https://open-datenschutzcenter.de
GNU Affero General Public License v3.0
36 stars 10 forks source link

container app-odc unhealthy - startet nicht nach Rechnerneustart #262

Open nobe80 opened 4 months ago

nobe80 commented 4 months ago

Describe the bug Nach einem Rechnerneustart und dem Befehl docker-compose up -d oder docker-compose -f docker-compose.test.yml up -d startet der Container keycloak-odc nicht. Nach ca. 300 Sekunden Startversuch hängt der Container app-odc im Status "unhealthy" bzw. "created" und läuft nicht.

Wenn man das Script installOdcDocker.sh ausführt läuft wieder alles.

To Reproduce Steps to reproduce the behavior:

  1. Rechner/Server neustarten
  2. ins Verzeichnis wechseln
  3. Befehl: docker-compose -f docker-compose.test.yml up -d

Expected behavior Alle 4 Container sollen laufen

Server (please complete the following information):

nobe80 commented 4 months ago

Interessant ist auch zu wissen, wie man die Container nach einem Rechner Neustart automatisch starten lassen kann.

nobe80 commented 4 months ago

Hat jemand eine Idee? Das Start Script /etc/container/startup.sh gibts nicht

nobe80 commented 4 months ago

Ich bin ein kleines Stück weiter. Wenn ich nach der Installation den Befehl: curl -s -f - i http://localhost/health/check absetze, bekomme ich in 404 zurück. Wenn ich statt localhost die angegebene Public URL hinschreibe dann bekomme ich 200 OK zurück.

Hängt das Problem vielleicht damit zusammen das curl -s -f - i http://localhost/health/check nach dem Neustart mit 404 fehlschlägt und dadurch der Container unhealthy ist? Der Container keycloak-odc läuft dann nicht, wenn man den die Container wieder starten will

nobe80 commented 4 months ago

Nach 2 Tagen Suche hab ichs endlich hinbekommen! Also entweder habe ich etwas übersehen oder die Anwendung ist nicht zu Ende gedacht. Man muss von Hand die ganzen Export Variablen in die .env schreiben, damit sie beim erneuten Start der Container mitgegeben werden.

Gibts da kein spezielles Startskript wo diese gesetzt werden, wenn man docker-compose -f docker-compose.test.yml up -d ausführt? Bei der Installation werden die Variablen in die docker.conf geschrieben, aber nicht in die .env Datei. Warum nicht?

Jetzt bau ich mir selber ein Skript wo das macht, damit es beim nächsten mal einfacher geht..

holema commented 4 months ago

Hallo @nobe80,

es gibt extra das File: installDockerUbuntu.sh oder installDockerDebian.sh Wenn du die INStallation mit den Script ausführst dann werden die Envs korrekt gesetzt und beim docker-compose up auch übernommen. Dies steht auch in der Anleitung so.

VG

holema commented 4 months ago

du kannst bei jedem Neustart der Anwendung einfach nochmal das install Skript laufen lassen. Die Einstellungen die du gemacht hast werden dann einfach nochmal übernommen.

nobe80 commented 4 months ago

Hallo @holema

ich habe eure Anwendung extra nach eurer Anleitung auf Debian 12 und auch Ubuntu 24 installiert. Die Variablen werden nicht in die .env übernommen. Ich musste sie von Hand setzen. Wie startet man denn eurer Meinung die Docker Container nach einem Rechner Neustart?

nobe80 commented 4 months ago

du kannst bei jedem Neustart der Anwendung einfach nochmal das install Skript laufen lassen. Die Einstellungen die du gemacht hast werden dann einfach nochmal übernommen.

Das ist meiner Meinung nach keine Lösung wenn man die Anwendung automatisch nach dem Reboot starten lassen will..

holema commented 4 months ago

Du kannst die Container auf restart unless stoped setzen, dann starten diese selber wieder. So oft werden Server im Real-Betrieb nicht neu gestartet, als dass dieser Use-Case zum Einsatz gekommen wäre. Die Variablen werden im Script als Env exportiert und dann beim docker-compose up übernommen und in die Container übergeben. Gerne kannst du aber einen PR erstellen mit deiner Verbesserung. Das würde allen helfen.

nobe80 commented 4 months ago

Könnte man sich drüber streiten ;-) Nach einem LInux Kernel Update muss man neustarten. Bei der Installation mit dem installOdcDocker.sh Skript werden die Variablen als Export Variablen gesetzt. Allerdings nicht in die .env Datei bzw nur in den Cache nachdem man Installationsscript ausgeführt hat. Das habe ich extra mehrmals getestet. Oder ich habe tatsächlich was falsch gemacht bzw. übersehen.

Um die Container nach einem Serverneustart automatisch starten zu lassen, bin ich wie folgt vorgegangen. Dies kann gerne von jemand anderem gegengeprüft werden:

  1. Installkationsskript gemäß Anleitung ausführen (Hier die http Variante)

  2. Datei .env prüfen. Wenn Variablen fehlen -> manuelles setzen der fehlenden Variablen in die .env Datei

  3. Docker Container beenden und prüfen, ob sie mit docker-compose -f docker-compose.test.yml up -d fehlerfrei starten. Wichtig: Wenn Docker meckert das eine Variable nicht gesetzt ist, diese nachtragen.

  4. Startscript "start_docker.sh erstellen:

    !/bin/sh

    cd /root/open-datenschutzcenter /usr/local/bin/docker-compose -f docker-compose.test.yml up -d

  5. Startscript als systemd service erstellen "docker-compose-app" in /etc/systemd/system: [Unit] Description=Docker Compose Application Service [Service] Type=oneshot ExecStart=/bin/bash /root/start_docker.sh [Install] WantedBy=multi-user.target

  6. App Service aktivieren: systemctl enable docker-compose-app.service

  7. Prüfen ob die Docker Container nach dem Restart automatisch starten

nobe80 commented 4 months ago

Hallo Zusammen,

ganz ehrlich, ich bin stock sauer! Nachdem wir alles installiert haben und mit der Dateneingabe begonnen hatten, ist uns plötzlich die Datenbank weggeflogen. Wir konnten nicht mehr auf die angelegten Verarbeitungstätigkeiten zugreifen, da wir einen Fehler 500 bekommen haben. Ebenso wenn man auf die angelegte Software geklickt hatte. Nach dem Container Neustart war dann auch der User fürs ODC einfach weg. Das heißt Fehler nach Laufzeit. Jetzt ist ein ganzer Tag einfach verloren und wir haben umsonst gearbeitet.. Ich kann diese Software leider nicht produktiv einsetzen. Nicht zu gebrauchen und nur halb fertig! Was soll denn das jedesmal nach einem Serverneustart die Installationsdatei auszuführen?! Sowas hab ich noch nirgendswoanders gesehen, ehrlich!

holema commented 4 months ago

Hallo @nobe80,

hast du wie ich empfohlen die restart policy geändert? wenn diese auf unless stoped gesetzt ist dann muss du dich um nichts kümmern. nach einem Neustart musst du einfach nur die Container neu starten nicht das docker compose. Hast du denn noch die Volumes? Dann kann man daraus die Container wiederherstellen. Diese gehen nur kaputt wenn man mit docker-compose down -v die Container beendet was man nie machen sollte. Auch wenn man den Stack ohne das Script hochfährt gehen die Datenbanken nicht kaputt. Gerne kannst du mich unter der Email entwicklung@h2-invent.com kontaktieren.

nobe80 commented 4 months ago

Hallo @holema

ich mach jetzt gar nix mehr. Wir werden das direkt bei euch bestellen und dann seid ihr dafür verantwortlich das es läuft ;-)

holema commented 4 months ago

hallo @nobe80 wir betreiben es nicht im docker sondern in einem cluster

secman248 commented 4 months ago

Die Variablen werden nicht in die .env übernommen. Ich musste sie von Hand setzen.

Hallo, ich mach jetzt schon eine Woche rum um das open-datenschutzcenter in einer Debian VM zum laufen zu bekommen. Bislang vergeblich. Inzwischen läuft es wenigstens einmal direkt nach der Installation. Nach einem Neustart der VM ist wieder Schluss. Ich vermute es würde helfen wie Ihr geschrieben habt die Variablen von Hand zu setzen, denn es kommen etliche Meldungen: "...variable is not set. Defaulting to a blank string. " Leider weiss ich nicht um welche Variablen es sich handelt, wo ich die Werte nach erfolgter Erstinstallation ablesen kann und wo ich eine Datei mit dem Nsmen .env erstellen muss.

Kann mir da vielleicht jemand einen Tipp geben ?

nobe80 commented 4 months ago

Hi @secman248

du hast das gleiche Bild wie ich hatte. Nachdem man das Installationsscript ausgeführt hat, werden die Werte als Export Variablen geschrieben, die aber wohl nur in der Session vorübergehend gesetzt sind. Das ist der Grund warum es mit dem Installationsscript funktioniert. Startet man den Server neu, sind die Werte eben weg und man muss die fehlenden Werte, die Docker anmeckert, von Hand in die .env Datei schreiben. Dann funktioniert es und die Anwendung startet. Allerdings gab es bei uns (leider!!) einen Laufzeitfehler und nach ca. 5 Stunden waren all unsere Daten, die wir eingepflegt haben, einfach weg.. Ich habe dadurch beim Kunden einen ganzen Tag in Sand gesetzt und konnte den nicht abrechnen... :-( Backup ist auch nicht eingebaut sodass wir gesagt haben, dass wir diese Software aktuell nicht produktiv einsetzen können. So schade wie es ist!

holema commented 4 months ago

Hallo @secman248, Hallo @nobe80,

wir haben das Docker compose File und die Docker Installation als interne Development Umgebung aufgezogen, damit wir schneller entwickeln können. Docker war nie dafür gedacht im produktiven System eingesetzt zu werden. Wir würden gerne hier die Docker Installation weiterentwickeln und würden uns darüber sehr über eine PR oder ein Sponsoring zu dem Feature freuen damit wir die Docker installation production ready bauen können. Die Software ist kostenlos (auch Updates) aber wir können nicht noch Features und Verbesserungen kostenlos zu Verfügung stellen

nobe80 commented 4 months ago

Hallo @holema

warum um Himmelswillen gebt ihr das denn nicht von vorn herein an?! Auf euren Webseiten und auch hier in Github liest es sich so als wenn man es normal einsetzen kann, so wie Linux oder sonst irgendwelche OpenSource Software auch.

Ich habe einen ganzen Arbeitstag verloren (und ein Wochenende um den Fehler zu finden), den mir niemand bezahlt hat. Das ist extrem ärgerlich! :-( Dazu kam noch die Peinklichkeit gegenüber dem Kunden, weil ich es ihm empfohlen hatte..

Gerne unterstütze ich euch wie ich Zeit haben. Aber bitte kennzeichnet die Softare als nicht produktiv.

secman248 commented 4 months ago

Also, Production ready will ich ja gar nicht. Ich würde das Programm einfach gerne mal testen. Dazu müsste es dann halt schon wenigstens einen Neustart überstehen. Ich mach das ja auch gern erstmal selber mit den Variablen, wenn ich nur wüsste: um welche Variablen es sich handelt, wo ich die Werte nach erfolgter Erstinstallation ablesen kann und wo ich eine Datei mit dem Namen .env erstellen muss. nobe80, Du hattest geschrieben: "Datei .env prüfen. Wenn Variablen fehlen -> manuelles setzen der fehlenden Variablen in die .env Datei" vielleicht kannst Du das nur noch ein kleines Bisschen detaillierter beschreiben, dann bekomme ich es bestimmt hin. also:

holema commented 4 months ago

Hallo @nobe80, ich habe dir bereits meine E-Mail zugeschickt um mit mir in Kontakt zu treten. Die Software ist absolut produktiv einsetzbar. Dafür müsste man einfach einen LAMP-Server und einen Keycloak hinter einen NGINX Server aufbauen und fertig. Wir hatten dazu auch früher eine Anleitung, die wir aber nicht mehr öffentlich haben, da an dieser Anleitung, die für Techniker geschrieben war, herumgemeckert wurde und wir lieber das Geld und die Arbeit in neue Features stecken. @nobe80 ich hatte dich gebeten einen PR oder eine Doku dazu zu schreiben, dann davon lebt Open Source Software. Es ist unglaublich frustrierend zu erleben das die Arbeit die wir unentgeltlich zu Verfügung stellen so kritisiert wird. Wir betreiben für einige Kunden den ODC auch im Docker und haben dafür natürlich ein Backupscript aber das verwenden wir bei den von uns betriebenen Instanzen. Von irgendwas müssen wir als Unternehmen leben und das ist der Betrieb und die Featurerequests. Deshalb werden die Teile entwickelt, die bei uns als Featurerequest reinkommen. @nobe80 Du versuchst Zeiten für eine Open-Source Software gegen deinen Kunden abzurechnen aber die Maintainer gehen leer aus und dann kritisierst du die Maintainer dafür das sie "zu doof" sind eine Software zu bauen mit der du Geld verdienen kannst. Dann wäre der korrekte Weg gewesen mich über die angebotene E-Mail zu kontaktieren und ich hätte das Feature "schnell" entwickelt und du hättest es mit gutem Gewissen einsetzen können. Auch wir müssen unsere Mitarbeitet jeden Monat bezahlen und wenn wir Projekte haben die Geld verdienen bleibt sowas wie hier halt mal auf der Strecke.

holema commented 4 months ago

@secman248, schreibe mir einfach kurz auf entwicklung@h2-invent.com dann können wir dort mögliche Feature einfacher besprechen.

nobe80 commented 4 months ago

Hallo @holema

du alles gut, ich verstehe dich. Wie gesagt, wenn ihr es vorher geschrieben hättet, das man es mit Docker nicht produktiv einsetzen kann, hätte ich es auch gar nicht erst gemacht.

holema commented 4 months ago

Nochmal zum Thema zurück, ich fände es cool wenn wir die Docker Installation erweitern würden. Wenn ihr nun schon zu zweit seid dann würden sich ja die kosten halbieren und danach wäre es stable. Schreibt mir einfach beide über die E-Mail mal dann können wir die Software gemeinsam verbessern.

secman248 commented 4 months ago

Hallo @holema,

sodale, ich hab jetzt deinen Hint umgesetzt (Container auf restart unless stoped setzen) und jetzt läuft alles prima. Beim Restart der VM kommt odc automatisch hoch und ich musste nicht mal irgendwelche Variablen in die .env Datei schreiben (die ich inzwischen tatsächlich auch gefunden hatte).

secman248 commented 3 months ago

zu früh gefreut. Als erstes wollte ich nun ein Mitglied hinzufügen. 500 - Interner Serverfehler.

holzi1005 commented 3 months ago

@secman248: Dann ist ein Fehler im SMTP Server. Ist normal, wenn keine E-Mail an den neuen Benutzer verschickt werden kann.

secman248 commented 3 months ago

ah, ok, danke. Es wird halt leider auch kein Benutzer angelegt. Bedeutet das, ich muss erst den Connect zu einem echten smtp server zum laufen bringen, ehe ich Benutzer anlegen kann?

secman248 commented 3 months ago

Habt vielen lieben Dank für die Hilfe, war interessant, aber ich brauche eine einfache und stabile Lösung die einfach läuft und wenigstens ein Minimum von Dokumentation mitbringt. Ich such mir ne andere Lösung.