Установка 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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

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

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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования