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

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

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

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

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

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

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

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

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

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

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

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

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

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS