Four services, one file
A PostgreSQL 18 database, PowerDNS Authoritative 4.9, PowerDNS Recursor and the Flask panel. Health-gated start-up order, secrets as files, no manual schema loading.
Quick start
PowerDNS Authoritative, PostgreSQL and a Tabler-themed admin panel β wired together in a single compose file, with local, LDAP, OAuth 2.0 and SAML sign-in.
git clone https://github.com/timothestoifl24/powerdns.git
cd powerdns
./scripts/generate-secrets.sh
docker compose up -d --buildOpen http://localhost:9191, sign in as admin with the password the script printed, and check that DNS is actually answering:
dig @127.0.0.1 example.com SOAThat is the whole install. The setup page covers what the script created, how to move the panel behind a reverse proxy, and what to do when something already owns port 53.
This is a small, self-contained authoritative DNS stack for people who would rather run their own nameservers than click through a registrar's control panel β a homelab, an internal network, a handful of public zones.
It is not a recursive resolver: it answers only for the zones you create, and it will not resolve the rest of the internet for your clients. It is also not a fork of the PowerDNS project's own admin tool; the panel here is a purpose-built Flask application that speaks the same public HTTP API.