Betrieb & Selbstheilung
Der Server ist auf Absturzsicherheit in drei Ebenen ausgelegt — und darauf, dass ein anhaltend ungesunder Prozess sich selbst beendet, damit der Supervisor ihn frisch neu startet.
Ebene 1: Panics bleiben lokal
Abschnitt betitelt „Ebene 1: Panics bleiben lokal“- Ein Panic in einem HTTP-Handler wird abgefangen: Die Anfrage endet
als
500, der Stacktrace steht im Log, der Prozess läuft weiter. - Ein Panic in einem Hintergrund-Job (Propagation, Erinnerungen, Zertifikate, …) wird zum gewöhnlichen Fehler: Der Job bekommt den normalen Versuchs-Backoff (30 s bis 30 min) und läuft später erneut — ein kaputter Job kann weder heißlaufen noch den Prozess reißen.
- Der Zustand liegt Event-sourced in der Datenbank: Auch ein harter Absturz verliert keine bestätigten Änderungen; Projektionen und Reaktoren setzen nach dem Start am Checkpoint wieder auf.
Ebene 2: Health-Endpunkte
Abschnitt betitelt „Ebene 2: Health-Endpunkte“Zwei öffentliche Endpunkte (bewusst ohne Anmeldung — sie verraten nur oben/unten) für Supervisoren und Load Balancer:
| Endpunkt | Bedeutung | Antwort |
|---|---|---|
GET /healthz | Prozess bedient Anfragen (Liveness) | 200 ok |
GET /readyz | Datenbank antwortet (Readiness) | 200 oder 503 mit Fehlertext |
Ebene 3: Watchdog — Selbst-Restart bei Instabilität
Abschnitt betitelt „Ebene 3: Watchdog — Selbst-Restart bei Instabilität“Ein eingebauter Watchdog prüft den Prozess periodisch von innen: Datenbank-Ping, optional Heap- und Goroutine-Grenzen. Einzelne Aussetzer werden nur geloggt; erst mehrere Fehlschläge in Folge beenden den Prozess kontrolliert mit Exit-Code 2 — der Supervisor startet ihn neu (Crash-only-Muster: ein frischer Prozess ist der verlässlichste Weg zurück in einen bekannten Zustand).
| Variable | Bedeutung | Default |
|---|---|---|
DNSE_WATCHDOG | Watchdog aktiv | on |
DNSE_WATCHDOG_INTERVAL | Prüfintervall | 30s |
DNSE_WATCHDOG_FAILS | Fehlschläge in Folge bis zum Neustart | 4 |
DNSE_WATCHDOG_HEAP_MB | Go-Heap-Obergrenze in MB (0 = aus) | 0 |
DNSE_WATCHDOG_GOROUTINES | Goroutine-Obergrenze (0 = aus) | 0 |
Restart-Policy einrichten
Abschnitt betitelt „Restart-Policy einrichten“systemd
Abschnitt betitelt „systemd“[Unit]Description=DNS-EditorAfter=network-online.target
[Service]ExecStart=/usr/local/bin/dnseditorEnvironmentFile=/etc/dnseditor/envRestart=alwaysRestartSec=3# optional: Neustart-Sturm bremsenStartLimitIntervalSec=120StartLimitBurst=10
[Install]WantedBy=multi-user.targetDocker / Compose
Abschnitt betitelt „Docker / Compose“services: dnseditor: image: <euer-image> restart: unless-stopped healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8422/readyz"] interval: 30s timeout: 5s retries: 3Kontrollkommandos
Abschnitt betitelt „Kontrollkommandos“curl -s http://127.0.0.1:8422/healthzcurl -s http://127.0.0.1:8422/readyzWatchdog-Meldungen erscheinen im Log als watchdog: self-check failed
(Warnung je Fehlschlag) und watchdog: process unhealthy - exiting for supervisor restart unmittelbar vor dem Selbst-Neustart.
Bei deutscher Systemsprache heissen sie Watchdog: Selbstpruefung fehlgeschlagen und Watchdog: Prozess ungesund - Beenden fuer den Neustart durch den Supervisor. Welche Sprache greift und warum die deutschen Texte
ohne Umlaute auskommen, steht unter
Installation als Paket.
Sicherung der Organisation
Abschnitt betitelt „Sicherung der Organisation“Mit gesetztem DNSE_BACKUP_DIR schreibt der Dienst jede Nacht einen
vollständigen logischen Export der Organisation (JSON Lines) in dieses
Verzeichnis — die Wiederherstellungspunkte. Punkte älter als 35 Tage werden
automatisch aufgeräumt. Ohne die Variable ist die Sicherung aus, und der
Admin-Reiter erscheint nicht.
Im Admin-Panel unter Sicherung lassen sich Punkte einsehen, mit Jetzt
sichern außer der Reihe erzeugen (etwa vor riskanten Änderungen) und
herunterladen. Eine Wiederherstellung wird dort mit dem Bestätigungswort
RESTORE angefragt; unmittelbar vorher entsteht automatisch ein
Sicherheits-Export des Ist-Zustands.
Die Wiederherstellung führt aus: Die Organisation wird kurz angehalten (Schreibzugriffe abgewiesen), der gewählte Punkt ersetzt den Bestand vollständig — Geheimnisse werden dabei mit dem aktuellen Schlüssel neu verschlüsselt, abgeleitete Sichten aus den Ereignissen neu aufgebaut — und danach läuft die Organisation nahtlos weiter. Bricht eine Wiederherstellung ab, bleibt die Organisation erkennbar unvollständig (Schreibzugriffe scheitern mit klarer Meldung) statt still halb gefüllt; eine wiederholte Anfrage räumt auf und setzt neu auf — der Cooldown tritt für diesen Reparaturfall beiseite. Punkte von einem anderen Schemastand werden mit Begründung abgelehnt, nie still eingespielt.
Update-Hinweis
Abschnitt betitelt „Update-Hinweis“Der Admin-Bereich zeigt unten links die laufende Version — und einen
Hinweis, sobald der Paketserver repo.techeve.de eine neuere Version
der eigenen Edition führt (Paket dnseditor bzw. dnseditor-ee in der
Suite stable). Die Abfrage liest den ohnehin öffentlichen APT-Index —
ein anonymer GET, höchstens alle sechs Stunden; es fließen keine Daten
über die Installation hinaus. Ist der Server nicht erreichbar — etwa in
abgeschotteten Netzen — bleibt der Hinweis einfach aus.
DNSE_UPDATE_FEED übersteuert die Index-URL (etwa für eine andere
Suite); off schaltet die Abfrage ganz ab.