Start with basic install of Debian (I used 9.9.X) – no packages and simply replace “password” with your mysql password, and nsX.domain.tld with your actual domain name (name server).
Install OpenSSH Server:
[bash]apt-get install openssh-server[/bash]
Allow root to SSH into machine:
[bash]nano /etc/ssh/sshd_config[/bash]
[text]allow root logins = yes[/text]
If using Proxmox let’s install QEMU:
[bash]apt-get install qemu-guest-agent[/bash]
If using ESXi:
[bash]apt-get install open-vm-tools[/bash]
I like to install a few other tools:
[bash]apt-get install htop vnstat net-tools ntp locate apt-transport-https[/bash]
If using ESXi:
[bash]echo blacklist i2c_piix4 >> /etc/modprobe.d/blacklist.conf
update-initramfs -u -k all[/bash]
If using Proxmox we need another package:
[bash]apt-get install lsb-release[/bash]
[bash]wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.3.list[/bash]
Let’s update our sources:
[bash]apt-get update[/bash]
Now to install some web requirements:
[bash]apt-get install apache2 mariadb-server php7.3 php7.3-mysql php7.3 php7.3-json php-apcu[/bash]
Configure the database:
[bash]mysql_secure_installation[/bash]
Create the directory web access files will reside:
[bash]mkdir -p /var/vhosts/nsX.domain.tld/[/bash]
Let’s download the latest release:
[bash]cd /tmp
wget https://dl.pdnsmanager.org/pdnsmanager-2.0.1.tar.gz
tar xzf pdnsmanager-2.0.1.tar.gz
cd pdnsmanager-2.0.1
cp -R * /var/vhosts/nsX.domain.tld/[/bash]
Create an Apache configuration file:
[bash]nano /etc/apache2/sites-available/nsX.domain.tld.conf[/bash]
[text]<VirtualHost 0.0.0.0:80>
ServerAdmin email@emailaddress.com
ServerName nsX.domain.tld
DocumentRoot "/var/vhosts/nsX.domain.tld/frontend"
Require all granted
RewriteEngine On
RewriteRule ^index.html$ – [L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule !^/api/.* /index.html [L]
Alias /api /var/vhosts/nsX.domain.tld/backend/public
<Directory /var/vhosts/nsX.domain.tld/backend/public>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L][/text]
Assign ownership:
[bash]chown -R www-data:www-data /var/vhosts[/bash]
Enable the required Apache modules:
[bash]a2enmod rewrite[/bash]
Enable the configuration and start restart Apache:
[bash]a2ensite nxX.domain.tld
service apache2 restart[/bash]
Now we need to create a database:
[bash]mysql -u root -p[/bash]
[text]CREATE DATABASE pdns;
GRANT ALL PRIVILEGES ON pdns.* To ‘pdns’@’%’ IDENTIFIED BY ‘password’;
quit;[/text]
Complete the setup via a browser:
[text]http://ip-address/setup[/text]
Install the DNS server:
[bash]apt-get install pdns-server pdns-backend-mysql[/bash]
[text]select >>> NO[/text]
Copy the configuration file:
[bash]cp /etc/powerdns/pdns.conf /etc/powerdns/pdns.conf.original[/bash]
Remove the configuration file:
[bash]rm /etc/powerdns/pdns.conf[/bash]
Create a new configuration file:
[bash]nano /etc/powerdns/pdns.conf[/bash]
[text]allow-axfr-ips=
allow-recursion=127.0.0.1
config-dir=/etc/powerdns
daemon=yes
disable-axfr=no
guardian=yes
local-address=0.0.0.0
local-port=53
master=yes
slave=yes
module-dir=/usr/lib/x86_64-linux-gnu/pdns
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d[/text]
Make a copy of the configuration file:
[bash]cp /etc/powerdns/pdns.d/bind.conf /etc/powerdns/pdns.d/bind.conf.original
rm /etc/powerdns/pdns.d/bind.conf[/bash]
Make a copy of the configuration file:
[bash]cp /etc/powerdns/pdns.d/pdns.local.gmysql.conf /etc/powerdns/pdns.d/pdns.local.gmysql.original
rm /etc/powerdns/pdns.d/pdns.local.gmysql.conf[/bash]
[bash]nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf[/bash]
[text]launch=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=password
gmysql-dnssec=no[/text]
Let’s restart the service:
[bash]service pdns restart[/bash]
Finally, doublecheck the hostname is correct:
[bash]hostnamectl set-hostname nsX.domain.tld[/bash]
PDNS Manager has very poor error parsing / checking. It will allow you to create records with spaces and other non-standard characters. It’s always best to run pdnsutil to check all zones via the console:
[bash]pdnsutil check-all-zones -v[/bash]