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
Variable
Default
Was sie tut
DB_ROOT_PASSWORD
leer (Pflicht)
MariaDB-Root-Passwort. Wird beim ersten Start gesetzt.
DB_NAME
dns_manager
Schema-Name. Nicht nachträglich ändern.
DB_USER
dns_admin
App-User in der DB.
DB_PASSWORD
leer (Pflicht)
App-User-Passwort. Wird vom Setup zufällig generiert.
Auth & Cookies
Variable
Default
Was sie tut
JWT_SECRET_KEY
leer (Pflicht)
Signiert die Session-JWTs. Empfohlen: openssl rand -hex 64.
JWT_ALGORITHM
HS256
Asymmetrisch wäre Overkill für eine selbstsignierte Session.
JWT_EXPIRE_MINUTES
1440
Session-Dauer im JWT. 24 Stunden.
AUTH_COOKIE_NAME
dns_manager_token
Cookie-Name. Bewusst nicht session, damit es im Browser-DevTools sofort wiederzufinden ist.
AUTH_COOKIE_SECURE
false
Auf true stellen sobald du HTTPS davor hast – sonst sendet der Browser den Cookie nicht zuverlässig.
AUTH_COOKIE_SAMESITE
lax
Default ist sicher und kompatibel. strict bricht typischerweise nichts, none nur wenn du Cross-Site-Embed brauchst.
AUTH_COOKIE_MAX_AGE
2592000 (Compose), 86400 (Code)
Cookie-Lebenszeit in Sekunden. Compose setzt 30 Tage, der reine Code-Default ist 24 h.
INITIAL_ADMIN_PASSWORD
nicht gesetzt
Wenn 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_REGISTRATION
false
Erlaubt öffentliche Registrierung über /register. Beim Wizard standardmäßig true für den Erst-Setup, anschließend bitte zurück auf false.
App / Verhalten
Variable
Default
Was sie tut
APP_NAME
PDNS Manager
Anzeige-Name (Titel im Tab, im Header). Lässt sich auch über das Panel ändern.
DEFAULT_LANGUAGE
de (Compose)
UI-Sprache beim allerersten Aufruf. User können später per Dropdown wechseln.
text für Menschen, json für Log-Aggregatoren wie Loki.
INSTALL_PATH
nicht gesetzt
Wird im Panel angezeigt („Updates kommen von …"). Praktisch in mehrteiligen Setups.
ALLOWED_ORIGINS
leer
CORS-Allowlist (Komma-getrennte URLs). Leer = nur same-origin, was für die Built-in-UI reicht.
DOCS_ENABLED
false
Schaltet die Swagger-Doku unter /docs und /openapi.json frei. Nur einschalten, wenn du sie wirklich brauchst.
PowerDNS
Variable
Default
Was sie tut
PDNS_SERVERS
leer
Komma-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
Variable
Default
Was sie tut
WEBHOOK_ALLOW_PRIVATE_URLS
false
SSRF-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: