#!/bin/bash # # PowerDNS Admin Service PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin config_pdnsadmin() { echo -ne "* Configuring pdnsadmin container.." if [ ! -d "/federated/apps/pdnsadmin" ]; then mkdir -p /federated/apps/pdnsadmin/data/etc fi cat > /federated/apps/pdnsadmin/docker-compose.yml <<EOF services: pdnsadmin: image: pschiffe/pdns-admin:\${IMAGE_VERSION} container_name: pdnsadmin hostname: pdnsadmin.$DOMAIN restart: always networks: core: ipv4_address: 192.168.0.12 env_file: - ./.env volumes: - ./data/etc/uwsgi.ini:/etc/uwsgi.ini labels: - "traefik.enable=true" - "traefik.http.routers.pdnsadmin.rule=Host(\`powerdns.$DOMAIN\`)" - "traefik.http.routers.pdnsadmin.entrypoints=websecure" - "traefik.http.routers.pdnsadmin.tls.certresolver=letsencrypt" networks: core: external: true EOF MYSQL_PASSWORD=`grep MYSQL_PASSWORD /federated/apps/pdnsmysql/.env | awk -F= '{ print $2 }'` PDNS_APIKEY=`grep PDNS_api_key /federated/apps/pdns/.env | awk -F= '{ print $2 }'` PDNS_ADMIN_WEBSERVER_PASSWORD_SALT=`htpasswd -bnBC 10 "" $ADMINPASS | tr -d ':\n' | sed 's/$2y/$2b/'` PDNS_MYSQL_COMMAND="insert into user (id, username, password, firstname, lastname, email, otp_secret, role_id, confirmed) values (\"1\", \"admin@$DOMAIN\", \"$PDNS_ADMIN_WEBSERVER_PASSWORD_SALT\", \"Admin\", \"Federated\", \"admin@$DOMAIN\", \"\", \"1\", \"0\");" cat > /federated/apps/pdnsadmin/.env <<EOF IMAGE_VERSION="$(current_version pdnsadmin)" PDNS_ADMIN_SQLA_DB_HOST="'mysql'" PDNS_ADMIN_SQLA_DB_PORT="'3306'" PDNS_ADMIN_SQLA_DB_USER="'pdns'" PDNS_ADMIN_SQLA_DB_PASSWORD="'$MYSQL_PASSWORD'" PDNS_ADMIN_SQLA_DB_NAME="'pdns'" PDNS_ADMIN_SERVER_EXTERNAL_SSL=True PDNS_API_URL="http://pdns.$DOMAIN:8081/" PDNS_API_KEY="$PDNS_APIKEY" PDNS_VERSION="4.9.0" EOF chmod 600 /federated/apps/pdnsadmin/.env cat > /federated/apps/pdnsadmin/data/etc/uwsgi.ini <<'EOF' [uwsgi] strict = true master = true die-on-term = true need-app = true plugins = python3 uid = uwsgi gid = uwsgi chdir = /opt/powerdns-admin pythonpath = /opt/powerdns-admin mount = /=run.py manage-script-name = true callable = app vacuum = true harakiri = 20 buffer-size = 32768 post-buffering = 8192 protocol = http http-socket = 0.0.0.0:9494 pidfile = /run/uwsgi/%n.pid enable-threads = true EOF echo -ne "done.\n" } start_pdnsadmin() { # Start service with command to make sure it's up before proceeding start_service "pdnsadmin" "nc -z 192.168.0.12 9494 &> /dev/null" "8" # Run MySQL command to create admin user for pdns admin interface # Allowed to fail because the user may already be there from a previous start. docker exec pdnsmysql bash -c "mariadb -updns -p$MYSQL_PASSWORD pdns -e '$PDNS_MYSQL_COMMAND;'" || : echo -ne "done.\n" }