This guide installs Poweradmin on a Linux host with a PowerDNS backend. Poweradmin requires PowerDNS Authoritative Server to be already installed and configured.
Before installing Poweradmin, ensure you have:
# Update package cache
sudo apt update
# Install PHP and required extensions
sudo apt install -y php php-intl php-gd php-mysql php-pgsql php-curl \
php-xml php-mbstring php-zip php-bcmath php-json
# Install web server (Apache example)
sudo apt install -y apache2 libapache2-mod-php
# Install database client (MySQL example)
sudo apt install -y mariadb-client
# Install Git and other tools
sudo apt install -y git unzip curl
# Install PHP and required extensions
sudo dnf install -y php php-intl php-gd php-mysqlnd php-pgsql php-curl \
php-xml php-mbstring php-zip php-bcmath
# Install web server (Apache example)
sudo dnf install -y httpd mod_php
# Install database client (MySQL example)
sudo dnf install -y mariadb
# Install Git and other tools
sudo dnf install -y git unzip curl
# Create web directory
sudo mkdir -p /var/www/poweradmin
cd /var/www/poweradmin
# Clone Poweradmin repository
sudo git clone https://github.com/poweradmin/poweradmin.git .
# For production, checkout a stable release
# sudo git checkout v4.0.7
# Set ownership
sudo chown -R www-data:www-data /var/www/poweradmin # Debian/Ubuntu
# sudo chown -R apache:apache /var/www/poweradmin # RHEL/CentOS
# Set permissions
sudo chmod -R 755 /var/www/poweradmin
sudo chmod -R 775 /var/www/poweradmin/var
# Download latest release
cd /tmp
curl -LO https://github.com/poweradmin/poweradmin/archive/refs/tags/v4.0.7.tar.gz
# Extract to web directory
sudo mkdir -p /var/www/poweradmin
sudo tar -xzf v4.0.7.tar.gz -C /var/www/poweradmin --strip-components=1
# Set ownership and permissions
sudo chown -R www-data:www-data /var/www/poweradmin
sudo chmod -R 755 /var/www/poweradmin
Poweradmin needs its own database for user management and settings (separate from PowerDNS database).
# Connect to MySQL
sudo mysql -u root -p
# Create database and user
CREATE DATABASE poweradmin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'poweradmin'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON poweradmin.* TO 'poweradmin'@'localhost';
FLUSH PRIVILEGES;
EXIT;
# Create database and user
sudo -u postgres psql
CREATE DATABASE poweradmin;
CREATE USER poweradmin WITH PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE poweradmin TO poweradmin;
\q
# Create virtual host configuration
sudo nano /etc/apache2/sites-available/poweradmin.conf
<VirtualHost *:80>
ServerName dns-admin.example.com
DocumentRoot /var/www/poweradmin/web
<Directory /var/www/poweradmin/web>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
# Enable mod_rewrite for clean URLs
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
# Security headers
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
ErrorLog ${APACHE_LOG_DIR}/poweradmin_error.log
CustomLog ${APACHE_LOG_DIR}/poweradmin_access.log combined
</VirtualHost>
# Enable site and required modules
sudo a2ensite poweradmin.conf
sudo a2enmod rewrite headers
sudo systemctl reload apache2
# Create server block
sudo nano /etc/nginx/sites-available/poweradmin
server {
listen 80;
server_name dns-admin.example.com;
root /var/www/poweradmin/web;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
# Security headers
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
access_log /var/log/nginx/poweradmin_access.log;
error_log /var/log/nginx/poweradmin_error.log;
}
# Enable site
sudo ln -s /etc/nginx/sites-available/poweradmin /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Navigate to Poweradmin in your browser: http://dns-admin.example.com
Follow the installation wizard:
Complete the installation
Poweradmin needs to connect to your PowerDNS database or API.
Edit the Poweradmin configuration file:
sudo nano /var/www/poweradmin/config.inc.php
<?php
$pdns_db_host = 'localhost';
$pdns_db_user = 'pdns';
$pdns_db_pass = 'your_pdns_db_password';
$pdns_db_name = 'pdns';
$pdns_db_type = 'mysql'; // or 'pgsql'
$poweradmin_db_host = 'localhost';
$poweradmin_db_user = 'poweradmin';
$poweradmin_db_pass = 'your_poweradmin_password';
$poweradmin_db_name = 'poweradmin';
$poweradmin_db_type = 'mysql';
$api_access_key = ''; // Leave empty for database access
$api_protocol = 'http';
$api_host = '127.0.0.1';
$api_port = '8081';
?>
For DNSSEC operations, configure API access:
# Enable API in PowerDNS configuration
sudo nano /etc/powerdns/pdns.conf
api=yes
api-key=your_secure_api_key_here
webserver=yes
webserver-address=127.0.0.1
webserver-port=8081
webserver-password=your_web_password
# Restart PowerDNS
sudo systemctl restart pdns
Then update Poweradmin config to use API:
$api_access_key = 'your_secure_api_key_here';
$api_protocol = 'http';
$api_host = '127.0.0.1';
$api_port = '8081';
# Test MySQL connection
mysql -u poweradmin -p -e "SHOW DATABASES;" poweradmin
# Test PowerDNS connection
mysql -u pdns -p -e "SHOW TABLES;" pdns
# Test HTTP access
curl -I http://localhost
# Check for PHP errors
sudo tail -f /var/log/apache2/poweradmin_error.log
# or
sudo tail -f /var/log/nginx/poweradmin_error.log
Blank page after installation
sudo chmod -R 775 /var/www/poweradmin/varCannot connect to PowerDNS database
sudo systemctl status pdnsDNSSEC operations fail
curl -H "X-API-Key: your_key" http://127.0.0.1:8081/api/v1/servers/localhostPermission denied errors
sudo chown -R www-data:www-data /var/www/poweradminsudo chmod -R 775 /var/www/poweradmin/varPoweradmin integration with PowerDNS can be tricky, especially with DNSSEC. Our team has extensive experience with web-based DNS management and can help you troubleshoot, optimize, or scale your deployment. Contact office@linux-server-admin.com or visit our contact page.