PowerDNS-Admin
A web interface for PowerDNS with advanced features.
Development status
Features
- Forward and reverse zone management
- Zone templating
- User management with role-based access control
- Zone-specific access control
- Activity logging
- Authentication:
- Two-factor authentication (TOTP)
- PDNS service configuration and statistics monitoring
- DynDNS 2 protocol support
- Easy IPv6 PTR record editing
- API for zone and record management
- Full IDN/Punycode support
Compatibility
PowerDNS-Admin is built and tested against the current stable release of
the PowerDNS Authoritative Server, plus recent prior minor releases.
Support for versions older than 5.0 has been dropped entirely, even where
PowerDNS itself continues to backport critical/security fixes to them.
See app-support.json
for the exact PowerDNS, Python, and browser versions supported by the
current release.
Running PowerDNS-Admin
The quickest way to run PowerDNS-Admin is with Docker. For instructions on installing PowerDNS-Admin directly on your system, please refer to our installation documentation.
Docker
We offer two options for running PowerDNS-Admin with Docker.
Option 1: From Docker Hub
This option is ideal for getting started quickly. Generate a SECRET_KEY first. Startup refuses a missing, short, or published SECRET_KEY. It must be at least 32 characters. Startup validates SALT with bcrypt and refuses a missing or unusable salt. Use bcrypt.gensalt() to generate a salt for a new deployment, as shown below.
For an existing deployment, keep its current valid SALT: it does not need to be private, and the published salt is accepted with a warning. Changing SALT invalidates existing API keys and outstanding email-confirmation links. Keep both configuration values stable across container restarts. See the environment variables documentation for details.
$ docker pull powerdnsadmin/pda-legacy:latest
$ export SECRET_KEY="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
$ export SALT="$(docker run --rm --entrypoint python powerdnsadmin/pda-legacy:latest -c 'import bcrypt; print(bcrypt.gensalt().decode())')"
$ docker run -d \
-e SECRET_KEY \
-e SALT \
-e SQLALCHEMY_DATABASE_URI='sqlite:////data/powerdns-admin.db' \
-v pda-data:/data \
-p 9191:80 \
powerdnsadmin/pda-legacy:latest
This example explicitly selects SQLite and creates a volume named pda-data to persist its database. PowerDNS-Admin does not select a database by default.
Note on image name: While the image is named pda-legacy, it is the current and actively maintained version. The name is a historical artifact.
Option 2: Using Docker Compose
This option is recommended if you need to customize the configuration.
- Update the configuration
docker/docker-compose.yml. You can find a list of other environment variables in the AppSettings.defaults file.
Database settings can be passed as a single SQLALCHEMY_DATABASE_URI or as separate DATABASE_DRIVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME, and DATABASE_EXTRA_PARAMS variables. Split variables are percent-encoded automatically, so a password with @ or # does not need a second encoded copy. DATABASE_EXTRA_PARAMS carries driver-specific URI flags such as ssl=true. To use Docker-style secrets, append _FILE to an environment variable with a path to a file containing the secret (e.g., DATABASE_PASSWORD_FILE=/run/secrets/db_password).
Export SECRET_KEY and SALT in the shell before starting, using the commands in Option 1. docker/docker-compose.yml reads those variables. A bcrypt salt contains $, so pass it through the environment. A literal $ in the Compose file is treated as interpolation.
- Start the container
# From the root of the project
$ docker compose -f docker/docker-compose.yml up --build
You can now access PowerDNS-Admin in your browser at http://localhost:9191.
Screenshots
Support
For assistance, please see our Support Guide or join our Discord Server.
Security
Please refer to our Security Policy for information on reporting security vulnerabilities.
Contributing
We welcome contributions to PowerDNS-Admin. Please see our Contribution Guide for more information.
Code of Conduct
We are committed to providing a welcoming and inclusive environment for everyone. Please review our Code of Conduct for our community standards.
License
PowerDNS-Admin is released under the MIT License. For more information, please see the full license.