powerdns-admin/docs/wiki/install/Running-on-FreeBSD.md
2022-12-08 12:26:00 -04:00

3.5 KiB

On FreeBSD, most software is installed using pkg. You can always build from source with the Ports system. This method uses as many binary ports as possible, and builds some python packages from source. It installs all the required runtimes in the global system (e.g., python, node, yarn) and then builds a virtual python environment in /opt/python. Likewise, it installs powerdns-admin in /opt/powerdns-admin.

Build an area to host files

mkdir -p /opt/python

Install prerequisite runtimes: python, node, yarn

sudo pkg install git python3 curl node12 yarn-node12
sudo pkg install libxml2 libxslt pkgconf py37-xmlsec py37-cffi py37-ldap

Check Out Source Code

Note: Please adjust /opt/powerdns-admin to your local web application directory

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-admin
cd /opt/powerdns-admin

Make Virtual Python Environment

Make a virtual environment for python. Activate your python3 environment and install libraries. It's easier to install some python libraries as system packages, so we add the --system-site-packages option to pull those in.

Note: I couldn't get python-ldap to install correctly, and I don't need it. I commented out the python-ldap line in requirements.txt and it all built and installed correctly. If you don't intend to use LDAP authentication, you'll be fine. If you need LDAP authentication, it probably won't work.

python3 -m venv /web/python --system-site-packages
source /web/python/bin/activate
/web/python/bin/python3 -m pip install --upgrade pip wheel
# this command comments out python-ldap
perl -pi -e 's,^python-ldap,\# python-ldap,' requirements.txt 
pip3 install -r requirements.txt

Configuring PowerDNS-Admin

NOTE: The default config file is located at ./powerdnsadmin/default_config.py. If you want to load another one, please set the FLASK_CONF environment variable. E.g.

cp configs/development.py /opt/powerdns-admin/production.py
export FLASK_CONF=/opt/powerdns-admin/production.py

Update the Flask config

Edit your flask python configuration. Insert values for the database server, user name, password, etc.

vim $FLASK_CONF

Edit the values below to something sensible

### BASIC APP CONFIG
SALT = '[something]'
SECRET_KEY = '[something]'
BIND_ADDRESS = '0.0.0.0'
PORT = 9191
OFFLINE_MODE = False

### DATABASE CONFIG
SQLA_DB_USER = 'pda'
SQLA_DB_PASSWORD = 'changeme'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'pda'
SQLALCHEMY_TRACK_MODIFICATIONS = True

Be sure to uncomment one of the lines like SQLALCHEMY_DATABASE_URI.

Initialise the database

export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade

Build web assets

yarn install --pure-lockfile
flask assets build

Running PowerDNS-Admin

Now you can run PowerDNS-Admin by command

./run.py

Open your web browser and go to http://localhost:9191 to visit PowerDNS-Admin web interface. Register a user. The first user will be in the Administrator role.

Running at startup

This is good for testing, but for production usage, you should use gunicorn or uwsgi. See Running PowerDNS Admin with Systemd, Gunicorn and Nginx for instructions.

The right approach long-term is to create a startup script in /usr/local/etc/rc.d and enable it through /etc/rc.conf.