PDNS Manager

Konfiguration (.env)

Der PDNS Manager wird über zwei Quellen konfiguriert: die .env-Datei (Boot-Konfiguration: DB, JWT, Cookies, Feature-Flags) und das Admin-Panel selbst (alles Operative: PowerDNS-Server, SMTP, Captcha, Welcome-Mail, Branding). Diese Trennung hat Methode: Sachen, die du im Betrieb ändern willst, brauchst du nicht über einen Container-Restart zu drehen.

Datenbank

VariableDefaultWas sie tut
DB_ROOT_PASSWORDleer (Pflicht)MariaDB-Root-Passwort. Wird beim ersten Start gesetzt.
DB_NAMEdns_managerSchema-Name. Nicht nachträglich ändern.
DB_USERdns_adminApp-User in der DB.
DB_PASSWORDleer (Pflicht)App-User-Passwort. Wird vom Setup zufällig generiert.

Auth & Cookies

VariableDefaultWas sie tut
JWT_SECRET_KEYleer (Pflicht)Signiert die Session-JWTs. Empfohlen: openssl rand -hex 64.
JWT_ALGORITHMHS256Asymmetrisch wäre Overkill für eine selbstsignierte Session.
JWT_EXPIRE_MINUTES1440Session-Dauer im JWT. 24 Stunden.
AUTH_COOKIE_NAMEdns_manager_tokenCookie-Name. Bewusst nicht session, damit es im Browser-DevTools sofort wiederzufinden ist.
AUTH_COOKIE_SECUREfalseAuf true stellen sobald du HTTPS davor hast – sonst sendet der Browser den Cookie nicht zuverlässig.
AUTH_COOKIE_SAMESITElaxDefault ist sicher und kompatibel. strict bricht typischerweise nichts, none nur wenn du Cross-Site-Embed brauchst.
AUTH_COOKIE_MAX_AGE2592000 (Compose), 86400 (Code)Cookie-Lebenszeit in Sekunden. Compose setzt 30 Tage, der reine Code-Default ist 24 h.
INITIAL_ADMIN_PASSWORDnicht gesetztWenn gesetzt, wird beim ersten Start ein Admin admin mit diesem Passwort angelegt. Sonst generiert das Backend ein zufälliges und legt es ab unter /app/.initial-admin-password.
ENABLE_REGISTRATIONfalseErlaubt öffentliche Registrierung über /register. Beim Wizard standardmäßig true für den Erst-Setup, anschließend bitte zurück auf false.

App / Verhalten

VariableDefaultWas sie tut
APP_NAMEPDNS ManagerAnzeige-Name (Titel im Tab, im Header). Lässt sich auch über das Panel ändern.
DEFAULT_LANGUAGEde (Compose)UI-Sprache beim allerersten Aufruf. User können später per Dropdown wechseln.
LOG_LEVELinfoStandard-Python-Log-Level: debug, info, warning, error.
LOG_FORMATtexttext für Menschen, json für Log-Aggregatoren wie Loki.
INSTALL_PATHnicht gesetztWird im Panel angezeigt („Updates kommen von …"). Praktisch in mehrteiligen Setups.
ALLOWED_ORIGINSleerCORS-Allowlist (Komma-getrennte URLs). Leer = nur same-origin, was für die Built-in-UI reicht.
DOCS_ENABLEDfalseSchaltet die Swagger-Doku unter /docs und /openapi.json frei. Nur einschalten, wenn du sie wirklich brauchst.

PowerDNS

VariableDefaultWas sie tut
PDNS_SERVERSleerKomma-getrennte Liste in der Form name|url|api_key. Nicht zwingend – Server lassen sich auch im Panel anlegen (was meist sauberer ist, weil sie dort in die DB wandern und editierbar sind).

Webhooks

VariableDefaultWas sie tut
WEBHOOK_ALLOW_PRIVATE_URLSfalseSSRF-Schutz: Localhost-, RFC1918- und Link-Local-URLs werden bei Webhooks blockiert. Auf true nur in komplett internen Netzen.

Was NICHT in der .env steht

Bewusst nicht in der .env: SMTP-, Captcha-, Welcome-Mail-, Branding- und ACME-Token-Konfiguration. Die liegen alle in der DB-Tabelle system_settings und werden im Panel gepflegt – siehe die jeweiligen Feature-Seiten:

Beispiel: vollständig gesetzte Production-.env

# --- DB ---
DB_ROOT_PASSWORD=jfM3...sehr-lang-zufaellig...vQ
DB_NAME=dns_manager
DB_USER=dns_admin
DB_PASSWORD=K8x...sehr-lang-zufaellig...mz

# --- Auth ---
JWT_SECRET_KEY=58b6...128-hex-zeichen...
INITIAL_ADMIN_PASSWORD=                      # leer = wird auto-generiert
ENABLE_REGISTRATION=false                    # nach Setup runterdrehen
AUTH_COOKIE_SECURE=true                      # weil Reverse-Proxy mit HTTPS davor
AUTH_COOKIE_SAMESITE=lax
AUTH_COOKIE_MAX_AGE=2592000                  # 30 Tage

# --- App ---
APP_NAME=PDNS Manager
DEFAULT_LANGUAGE=de
LOG_LEVEL=info
LOG_FORMAT=text
ALLOWED_ORIGINS=
DOCS_ENABLED=false

# --- Webhooks ---
WEBHOOK_ALLOW_PRIVATE_URLS=false