PDNS Manager

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 compose als Subcommand, nicht das alte docker-compose).
  • Ein freier Port 5380 auf der Maschine. Den kannst du im ports:-Mapping der compose.yaml ändern, falls schon was drauf läuft.
  • Mindestens ein laufender PowerDNS-Authoritative-Server (4.x) mit aktivierter HTTP-API – siehe weiter unten.
  • Optional openssl auf 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:

  1. Prüft, dass es interaktiv läuft (warnt bei curl | bash ohne TTY).
  2. Fragt die UI-Sprache ab (Deutsch / Englisch).
  3. Prüft Docker, das Compose-Plugin und ob Port 5380 frei ist (Fallback-Kette lsof → ss → netstat).
  4. Wählt einen Install-Pfad (Default ./pdns-manager) und klont das Repo – mit Tarball-Fallback auf das neueste Release-Tag, falls git fehlt.
  5. Ruft setup.sh auf für die .env.
  6. docker compose up -d, dann aktives Polling von http://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 .env als MAIL_* hinterlegt; produktiv kommt SMTP eh meist aus dem Panel, das in MariaDB lebt.)
  • HTTPS später vorgeschaltet? Setzt AUTH_COOKIE_SECURE entsprechend.
  • 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

  1. Browser auf http://localhost:5380 (oder die IP des Servers).
  2. 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.
  3. 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:8081 oder über das Container-Netz http://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.

Hier ist noch kein Bild hinterlegt. Lege es unter src/assets/screenshots/<dateiname> ab und trage es in der Galerie-Liste ein.

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.sh unangetastet.

Die Container heißen dns-manager-api und dns-manager-db, das Compose-Netzwerk dns-manager-net.

Nächste Schritte