Hi! This is a script-guide to install Powerdns (authoritative) and Powerdns-Admin on Debian 9 (stretch), for Debian 10 (buster) see this newer post. This is a quick way, see instructions below, here is the commented code for the impatient.
Note: this post is outdated, use the new one instead.
#!/bin/bash # get script absolute path MY_PATH="`dirname \"$0\"`" MY_PATH="`( cd \"$MY_PATH\" && pwd )`" if [ -z "$MY_PATH" ] ; then exit 1 fi # upgrade system and install dependencies apt-get update && apt-get -y upgrade apt-get -y install software-properties-common dirmngr apt-get -y install git python-pip # install and prepare last stable mariadb version apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.zol.co.zw/mariadb/repo/10.3/debian stretch main' apt-get update && apt-get -y install mariadb-server # provide an strong password when prompted mysql -u root -p < ${MY_PATH}/sql01.sql # provide previously set password # install powerdns and configure db parameters apt-get -y install pdns-server pdns-backend-mysql # answer dbconfig-common No when prompted vi /etc/powerdns/pdns.d/pdns.local.gmysql.conf # db configuration # install dnsutils for testing and finally PowerDNS-Admin apt-get -y install python3-dev dnsutils apt-get -y install -y default-libmysqlclient-dev python-mysqldb libsasl2-dev libffi-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev pkg-config curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo 'deb https://dl.yarnpkg.com/debian/ stable main' > /etc/apt/sources.list.d/yarn.list apt-get -y install apt-transport-https # needed for https repo apt-get update apt-get -y install yarn git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin cd /opt/web/powerdns-admin pip install virtualenv virtualenv -p python3 flask . ./flask/bin/activate apt-get -y install libmysqlclient-dev pip install -r requirements.txt mysql -u root -p < ${MY_PATH}/sql02.sql cp config_template.py config.py vi config.py # db configuration export FLASK_APP=app/__init__.py flask db upgrade flask db migrate -m "Init DB" # install/update nodejs, needed to use yarn curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - apt-get install -y nodejs yarn install --pure-lockfile flask assets build # create systemd service file and activate it cp ${MY_PATH}/powerdns-admin.service /etc/systemd/system/ systemctl daemon-reload systemctl start powerdns-admin systemctl enable powerdns-admin # install nginx and configure site apt-get -y install nginx cp ${MY_PATH}/powerdns-admin.conf /etc/nginx/sites-enabled/ nginx -t && service nginx restart # activate powerdns api, change api-key if needed echo 'api=yes' >> /etc/powerdns/pdns.conf echo 'api-key=789456123741852963' >> /etc/powerdns/pdns.conf echo 'webserver=yes' >> /etc/powerdns/pdns.conf echo 'webserver-address=0.0.0.0' >> /etc/powerdns/pdns.conf echo 'webserver-allow-from=0.0.0.0/0,::/0' >> /etc/powerdns/pdns.conf echo 'webserver-port=8081' >> /etc/powerdns/pdns.conf service pdns restart # now go to server_name url and create a firt user account that will be admin # log in # configure api access on powerdns-admin # enjoy
Installation notes
You can execute the executable file install.sh inside the zip file, or execute lines one by one from code above. Whatever method you use you should read this notes carefully in order to fully understand what is going on. I assume that yo have a minimum linux knowledge and that you are comfortable with the shell and command line utilities.
- Download and uncompress pdns.zip anywhere in the server, then cd into pdns folder.
- Edit sql01.sql and modify the second line to set a secure password instead of the default one ‘mypassword’.
- Edit sql02.sql and modify the second line to set a secure password instead of the default one ‘mypassword’.
- Edit powerdns-admin.conf and modify the value of server_name to match the fqdn we want our pdnsadmin be served from.
- Execute install.sh script:
- Provide mariadb root password to execute sql01.sql when prompted.
- Edit /etc/powerdns/pdns.d/pdns.local.gmysql.conf db settings to match this ones:
- user: pdnsuser
- password: <the one provided in step 2>
- host: localhost
- db name: pdns
- Provide mariadb root password to execute sql02.sql when prompted.
- Edit /opt/web/powerdns-admin/config.py db settings to match this ones:
- user: pdnsuser
- password: <the one provided in step 2>
- host: localhost
- db name: pdns
- Enter web interface (domain provided in step 4) and click on create account to create the first account, thal will be an admin account.
- Log in into pdnsAdmin with the newly created account.
- Configure pdns api and pdns key, http://127.0.0.1:8081/ and the one provided at the end of the script.
- Enjoy!