Skip to content

Konfiguration

ZPO liest config.json aus dem Datenverzeichnis. Fehlt die Datei, wird sie beim Start mit sicheren Zufallswerten erzeugt — inklusive einem kryptografisch starken jwt_secret. Die Datei gehört mit den Rechten 0600 nur dem Service-Benutzer.

SchlüsselVorgabeBedeutung
host127.0.0.1Adresse, an der der HTTP-Server lauscht. Im Container 0.0.0.0.
port8080Port der Oberfläche und der API.
database_pathzpo.dbPfad zur SQLite-Datei. Relative Pfade werden im Datenverzeichnis aufgelöst.
jwt_secretzufällig erzeugtSigniert die Sitzungs-Tokens (HS256). Mindestens 32 Zeichen, niemals einchecken.
access_token_ttl_minutes60Vorgabe für die Lebensdauer einer Anmeldung in Minuten. Unter Allgemeine Einstellungen → Allgemein lässt sie sich sekundengenau überschreiben (5 Minuten bis 30 Tage).
admin_initial_passwordleerPasswort für admin beim Erststart. Leer heißt: zufällig erzeugen und einmalig ausgeben.
log_levelinfodebug, info, warn oder error. Das Flag -debug überschreibt zur Laufzeit mit debug.
access_logtrueProtokolliert jeden API-Request (Methode, Pfad, Status, Dauer, Benutzer).
reconcile_interval_seconds15Takt des Abgleichs: Knoten prüfen, offene Aufträge nachholen. 0 schaltet den Abgleich ab — nur für Tests sinnvoll.
full_reconcile_minutes15Takt des Vollabgleichs: den Ist-Zustand vom Knoten lesen und gegen den Sollzustand halten. So fallen Änderungen auf, die von Hand am Gerät gemacht wurden.
api_key_rate_limit_per_minute120Requests pro API-Schlüssel und Minute. 0 deaktiviert die Begrenzung. Gilt nicht für Browser-Sitzungen.
renew_interval_seconds3600Takt des Zertifikats-Erneuerers. Das ARI-Fenster der CA entscheidet über den Zeitpunkt; der Takt sorgt nur dafür, dass es nicht verpasst wird. 0 schaltet die Erneuerung ab — bei ACME-Zertifikaten riskant.
metrics_tokenleerSchützt den /metrics-Endpunkt. Leer heißt: ohne Token lesbar — gedacht für Prometheus im eigenen Netz.
local_port0 (aus)Zusätzlicher Listener auf 127.0.0.1 als Notzugang, wenn die Oberfläche hinter einem verwalteten Proxy liegt, der gerade nicht kann. Darf nicht gleich port sein.

Beispiel:

{
"host": "0.0.0.0",
"port": 8080,
"database_path": "zpo.db",
"jwt_secret": "<vom Start erzeugt>",
"access_token_ttl_minutes": 60,
"admin_initial_password": "",
"log_level": "info",
"access_log": true,
"reconcile_interval_seconds": 15,
"full_reconcile_minutes": 15,
"api_key_rate_limit_per_minute": 120,
"renew_interval_seconds": 3600,
"metrics_token": "",
"local_port": 0
}

Umgebungsvariablen überschreiben die config.json, ohne die Datei anzufassen — gedacht für Container und systemd-Overrides.

VariableBedeutung
ZPO_HOSTÜberschreibt host. Im Container-Image 0.0.0.0.
ZPO_PORTÜberschreibt port (1–65535).
ZPO_DATADatenverzeichnis für config.json, Datenbank und version.json. Vorgabe: Verzeichnis des Binaries, im Container /data.
ZPO_SECRET_KEYHauptschlüssel als base64 (32 Byte). Schlägt die Datei secret.key.
ZPO_SECRET_KEY_FILEDatei, aus der der Hauptschlüssel kommt, wenn ZPO_SECRET_KEY leer ist.
TZZeitzone der Anwendung (Logs, Zeitstempel), z. B. Europe/Berlin. Die Zeitzonendaten stecken im Binary.
zpo [-config pfad] [-data verzeichnis] [-debug] [-version]
zpo rollback [-data verzeichnis] --host <hostname> | --disable-host <hostname>
  • -config — expliziter Pfad zur config.json (Vorgabe: im Datenverzeichnis).
  • -data — Datenverzeichnis; schlägt ZPO_DATA.
  • -debug — hebt das Log-Level auf debug.
  • -version — gibt die Version aus und endet.
  • zpo rollback — der Notzugang, siehe Betrieb.