Installation
Der PDNS Manager läuft als Docker-Compose-Stack aus zwei Containern: einem Python/FastAPI-Backend (das auch das gebaute React-Frontend ausliefert) und einer MariaDB. Es gibt drei Wege ihn aufzusetzen, je nachdem wie viel Komfort du willst.
Voraussetzungen
- Docker ≥ 20 und das Compose-Plugin (
docker composeals Subcommand, nicht das altedocker-compose). - Ein freier Port 5380 auf der Maschine. Den kannst du im
ports:-Mapping dercompose.yamländern, falls schon was drauf läuft. - Mindestens ein laufender PowerDNS-Authoritative-Server (4.x) mit aktivierter HTTP-API – siehe weiter unten.
- Optional
opensslauf dem Host, damit das Setup-Skript starke Zufallsschlüssel erzeugen kann (der Default-Pfad).
Variante A · One-Liner
Das Skript holt das Repo, fragt ein paar Sachen ab, generiert eine vollständige .env mit zufälligen Passwörtern, startet die Container und wartet auf den Healthcheck. Für 90 % der Fälle der schnellste Weg.
curl -sSLO https://raw.githubusercontent.com/29barra29/PowerDNS-PDNS-MANAGER/main/install.sh && bash install.sh Das Skript macht der Reihe nach:
- Prüft, dass es interaktiv läuft (warnt bei
curl | bashohne TTY). - Fragt die UI-Sprache ab (Deutsch / Englisch).
- Prüft Docker, das Compose-Plugin und ob Port 5380 frei ist (Fallback-Kette
lsof → ss → netstat). - Wählt einen Install-Pfad (Default
./pdns-manager) und klont das Repo – mit Tarball-Fallback auf das neueste Release-Tag, fallsgitfehlt. - Ruft
setup.shauf für die.env. docker compose up -d, dann aktives Polling vonhttp://localhost:5380/health(max. 120 s).
Variante B · Klonen und Setup-Wizard
Selber Effekt wie A, nur ohne Download-Wrapper:
git clone https://github.com/29barra29/PowerDNS-PDNS-MANAGER.git
cd dns-manager
./setup.sh
docker compose up -d Der Wizard führt durch diese Punkte:
- App-Name (Branding, lässt sich später jederzeit im Panel ändern).
- Admin-Passwort: (1) zufällig generiert, (2) Selbst-Registrierung im Browser, (3) manuell festgelegt.
- SMTP optional – Host, Port, User, Passwort, Absender. (Wird in der
.envalsMAIL_*hinterlegt; produktiv kommt SMTP eh meist aus dem Panel, das in MariaDB lebt.) - HTTPS später vorgeschaltet? Setzt
AUTH_COOKIE_SECUREentsprechend. - Erster PowerDNS-Server optional – Name, URL, API-Key. Lässt sich auch nachträglich im Panel anlegen.
Der Wizard schreibt die .env atomar (über .env.tmp und mv, mit Cleanup-Trap bei Strg+C) und legt vorher ein zeitgestempeltes Backup an.
Variante C · Manuell
Wer keinen Wizard mag und alle Variablen selbst setzen will:
git clone https://github.com/29barra29/PowerDNS-PDNS-MANAGER.git
cd dns-manager
cp .env.example .env
# Pflichtfelder: DB_ROOT_PASSWORD, DB_PASSWORD, JWT_SECRET_KEY
# Beispiel für einen sicheren Schlüssel:
sed -i "s|^JWT_SECRET_KEY=.*|JWT_SECRET_KEY=$(openssl rand -hex 64)|" .env
nano .env
chmod 600 .env
docker compose up -d Erster Login
- Browser auf
http://localhost:5380(oder die IP des Servers). -
Bei
ENABLE_REGISTRATION=true(Default beim Wizard) erscheint der Setup-Wizard im Browser. Der erste angelegte User ist automatisch Admin; danach stellt sich die Registrierung selbst ab. - Wurde gar kein Passwort hinterlegt, generiert das Backend beim ersten Start eines und legt es im Container ab plus einmalig ins Log:
docker compose logs backend | grep -i "initial admin"
docker compose exec backend cat /app/.initial-admin-password PowerDNS-API freischalten
Damit der Manager auf einen PowerDNS-Server zugreifen kann, muss dessen HTTP-API aktiv sein. Minimal-Konfiguration in /etc/powerdns/pdns.conf:
api=yes
api-key=dein-sicherer-api-key
webserver=yes
webserver-address=0.0.0.0
webserver-port=8081
webserver-allow-from=0.0.0.0/0 Anschließend einmal systemctl restart pdns.
PowerDNS-Server im Panel eintragen
Im PDNS Manager unter Einstellungen → DNS-Server → Server hinzufügen:
- Name – freier Anzeigename.
- URL – z. B.
http://pdns.intern:8081oder über das Container-Netzhttp://pdns:8081. - API-Key – derselbe Wert wie in
pdns.conf. - Schreibend? Aktiv lassen, wenn der Manager Änderungen pushen darf. Wer mehrere PowerDNS-Instanzen auf derselben DB betreibt, lässt nur einen davon schreibend; die anderen sind reines Read-Replica.
Verbindung testen drücken, speichern – fertig. Mehrere Server gleichzeitig sind kein Problem; die Zonen-Liste fasst gleiche Zonen automatisch zusammen.
Was passiert auf Disk?
Nach dem Start gibt es zwei Volumes (im Default unter /var/lib/docker/volumes/):
mariadb_data– die komplette Datenbank, inkl. Users, Zonen-Berechtigungen, Settings, Tokens, Audit-Log, Webhook-Definitionen.backend_uploads– hochgeladene Dateien (vor allem das Branding-Logo). Dieses Volume bleibt bei./update.shunangetastet.
Die Container heißen dns-manager-api und dns-manager-db, das Compose-Netzwerk dns-manager-net.
Nächste Schritte
- Erste Schritte – erste Zone anlegen, Records, DNSSEC.
- Konfiguration (.env) – alle Variablen mit Defaults.
- Sicherheit & Härtung – Reverse-Proxy, Cookies, Firewall.