Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
PowerDNS-Admin/PowerDNS-Admin: A PowerDNS web interface with advanced features

PowerDNS-Admin/PowerDNS-Admin: A PowerDNS web interface with advanced features

19 hours ago

PowerDNS-Admin

A web interface for PowerDNS with advanced features.

Development status

Python tests</a> CodeQL</a> Docker Image</a>

Features

  • Forward and reverse zone management
  • Zone templating
  • User management with role-based access control
  • Zone-specific access control
  • Activity logging
  • Authentication:
- Local users - SAML - LDAP (OpenLDAP / Active Directory) - OAuth (Google / GitHub / Microsoft Entra ID / OpenID)
  • 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.

  1. Update the configuration
The included Compose configuration starts MySQL and connects PowerDNS-Admin to it automatically. Before deploying, replace the example database passwords in 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.

  1. 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

!dashboard

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.

Chat with me