Установка PowerDNS и PowerDNS Admin в Ubuntu Linux 20.04

Установка PowerDNS

Устанавливаем необходимые пакеты

# aptitude install pdns-server pdns-tools pdns-backend-pgsql

Создаем пользователя и базу данных

# su postgres
/$ psql
postgres=# CREATE USER pdns_user WITH PASSWORD 'Password';
postgres=# CREATE DATABASE pdns_db OWNER pdns_user;
postgres=# \q
$ exit

Пример конфигурации PowerDNS

Файл /etc/powerdns/pdns.conf:

allow-axfr-ips=45.138.27.6/32
also-notify=45.138.27.6
api=yes
api-key=SECRET_API_TOKEN
daemon=no
master=yes
default-soa-mail=chernousov@interlan.xyz
include-dir=/etc/powerdns/pdns.d
launch=gpgsql
local-address=0.0.0.0
security-poll-suffix=
setgid=pdns
setuid=pdns
webserver=yes
webserver-loglevel=normal
webserver-password=SECRET_API_TOKEN
webserver-port=11080
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0
gpgsql-host=127.0.0.1
gpgsql-dbname=pdns_db
gpgsql-user=pdns_user
gpgsql-password=SECRET_DB_PASSWORD

Инициализация схемы базы данных

Нормального механизма миграций не завезли и используем грузинское блюдо «ЖРИЧОДАЛИ» и инит скрипты и скрипты миграций в каталоге /usr/share/pdns-backend-pgsql/schema.
Всем удачи на этом этапе.

В идеале вы увидите примерно такой статус запуска сервиса:

# systemctl status pdns  
● pdns.service - PowerDNS Authoritative Server
    Loaded: loaded (/lib/systemd/system/pdns.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2022-12-18 15:26:32 +07; 6s ago
      Docs: man:pdns_server(1)
            man:pdns_control(1)
            https://doc.powerdns.com
  Main PID: 18702(pdns_server)
     Tasks: 13(limit: 9297)
    Memory: 6.5M
    CGroup: /system.slice/pdns.service
            └─18702 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no

дек 1815:26:32 srv-promo-01 pdns_server[18702]: PowerDNS Authoritative Server 4.2.1 (C)2001-2019 PowerDNS.COM BV
дек 1815:26:32 srv-promo-01 pdns_server[18702]: Using 64-bits mode. Built using gcc 9.2.1 20200202.
дек 1815:26:32 srv-promo-01 pdns_server[18702]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redis>
дек 1815:26:32 srv-promo-01 pdns_server[18702]: [webserver] Listening for HTTP requests on 0.0.0.0:11080
дек 1815:26:32 srv-promo-01 pdns_server[18702]: Master/slave communicator launching
дек 1815:26:32 srv-promo-01 pdns_server[18702]: Creating backend connection for TCP
дек 1815:26:32 srv-promo-01 systemd[1]: Started PowerDNS Authoritative Server.
дек 1815:26:32 srv-promo-01 pdns_server[18702]: About to create 3 backend threads for UDP
дек 1815:26:32 srv-promo-01 pdns_server[18702]: No master domains need notifications
дек 1815:26:33 srv-promo-01 pdns_server[18702]: Done launching threads, ready to distribute questions

Установка PowerDNS Admin

Установка необходимых пакетов и дополнительных инструментов

# apt install -y python3-dev git libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential curl
# curl -sL https://deb.nodesource.com/setup_14.x | bash -
# apt install -y nodejs
# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
# echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
# apt update -y
# apt install -y yarn

Скачиваем последнюю версию из гита и подготавливаем виртуальное окружение

# git clone https://github.com/PowerDNS-Admin/PowerDNS-Admin.git /opt/powerdns-admin
# cd /opt/powerdns-admin/
# apt install python3.8-venv libmysqlclient-dev
# python3 -mvenv ./venv
# source ./venv/bin/activate
# pip install --upgrade pip
# pip install -r requirements.txt

Конфигурирование и тестовый запуск

Копируем файл конфигурации и редактируем его.

# cp ./configs/development.py ./configs/production.py
# mcedit ./configs/production.py

По умолчанию используется внутренняя база данных Sqlite, сервис запускается на порту 9191. Применяем миграции, инициализируем окружение и проводим тестовый запуск.

# export FLASK_CONF=/opt/powerdns-admin/configs/production.py
# export FLASK_APP=./powerdnsadmin/__init__.py
# flask db upgrade
# yarn install --pure-lockfile
# flask assets build
# export FLASK_ENV=production
# ./run.py

В проде запуск проводим через gunicorn.

# gunicorn --pid /tmp/powerdnsadmin.pid --bind 0.0.0.0:9191 'powerdnsadmin:create_app()'

Подготавливаем запуск от имени пользователя pdns

# chown -R pdns:pdns /opt/powerdns-admin/

Сервис SystemD для запуска в файле /etc/systemd/system/powerdns-admin.service:

[Unit]
Description=PowerDNS-Admin
After=network.target

[Service]
Environment="FLASK_CONF=/opt/powerdns-admin/configs/production.py"
Environment="FLASK_APP=./powerdnsadmin/__init__.py"
Environment="FLASK_ENV=production"
PIDFile=/tmp/powerdns-admin.pid
User=pdns
Group=pdns
WorkingDirectory=/opt/powerdns-admin
ExecStart=/opt/powerdns-admin/venv/bin/gunicorn --pid /tmp/powerdnsadmin.pid --bind 0.0.0.0:9191 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Установка в виде сервиса и реверс-прокси для nginx стандартные.

Пример docker-compose.yml для запуска PowerDNS Admin

version: "3.9"
services:
    pdns-admin:
      image: ngoduykhanh/powerdns-admin:latest
      ports:
        - "9191:80"
      logging:
        driver: json-file
        options:
          max-size: 50m
      volumes:
        - /etc/hosts:/etc/hosts
        - /etc/localtime:/etc/localtime:ro
        - /etc/timezone:/etc/timezone:ro
      healthcheck:
        test: wget --output-document=- --quiet --tries=1 http://127.0.0.1/ || exit 1
        start_period: 60s
        interval: 30s
        timeout: 20s
        retries: 7
      environment:
        - SQLALCHEMY_DATABASE_URI=mysql://login:password@10.77.77.254/powerdns_admin
        - GUNICORN_TIMEOUT=60
        - GUNICORN_WORKERS=2
        - GUNICORN_LOGLEVEL=DEBUG
        - OFFLINE_MODE=False

Похожие записи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда