Собственно, я знаю о двух проектах для этой цели:
- https://www.poweradmin.org/ (https://github.com/poweradmin/poweradmin)
- https://github.com/ngoduykhanh/PowerDNS-Admin
Первый написан на php, работает напрямую с БД, позволяет настроить практически всё. Имеет неприятную особенность – в записях типа TXT не сохраняет “, что напрочь ломает доступ к этим записям через api, которое требует, чтобы текстовые поля хранили информацию внутри экранированного ” блока. Хотя на функционирование самого сервера это не влияет. Добавляет несколько своих таблиц и полей в исходную БД. Не ведет никаких логов работы в вэб-интерфейсе.
Второй – сборная солянка из python3, flask, nodejs. Ставится через ж... В общем – муторно. Работает исключительно через api, хотя и добавляет несколько своих таблиц в БД. Ведёт лог работы в вэб-интерфейсе. НЕ СОЗДАЁТ SuperMaster сервера. Хотя в общем, ИМХО, удобнее первой админки.
Установку второй админки на Centos 7 (и Centos 8) мы и опишем. Предполагаем, что с настройкой БД и самого PowerDNS вы справились раньше.
Вообще, – для Centos 7 есть штатный мануал в виках – https://github.com/ngoduykhanh/PowerDNS-Admin/wiki/Running-PowerDNS-Admin-on-Centos-7/
Он абсолютно рабочий, как ни странно. Маленькие дополнения:
- репозиторий https://centos7.iuscommunity.org/ius-release.rpm можно не ставить, как и python36u. Нужная версия питона всё равно будет вытащена дальше, скриптом
- Код демона systemd для запуска админки автоматически (пути к рабочей папки исправьте на свои)
[Unit] Description=PowerDNS-Admin Service After=multi-user.target [Service] Type=idle ExecStart=/usr/local/powerdns-admin/flask/bin/python3 /usr/local/powerdns-admin/run.py [Install] WantedBy=multi-user.target
- В коде скрипта run.py замените debug = True на debug = False
Установка для Centos 8 имеет свои особенности. Для инсталляции можно ориентироваться на статью для Fedora 30 из той же wiki. Мы же рассмотрим нюансы установки админки при использовании в качестве БД PostgreSQL. Следуем инструкциям отсюда творчески их перерабатывая для Centos 8.
Итак:
Для сборки нам будет нужен пакет postgresql-server-devel, компиляторы и ещё кое-что)). Ставим:
dnf install postgresql-contrib postgresql-plpython3 postgresql-server-devel gcc gc make -y dnf install python3 python3-devel python3-pip -y dnf install mariadb-devel mariadb-common openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel -y dnf install yarn npm -y dnf install python3-pip-wheel python3-setuptools-wheel python3-wheel-wheel -y
Да, вы правильно видите – пакеты для mariadb мы всё равно ставим!!! Иначе потом не соберётся…
Теперь готовим питон
pip3 install --upgrade pip pip install psycopg2
Дальше можно следовать инструкциям для Fedora 31.
В скрипте для systemd указываем системный python3.
Конфиг PowerDNS-Admin лежит в каталоге ./powerdnsadmin/default_config.py.
Для работы с постгресом, комментируем строки с остальными БД, оставляя в итоге что-то такое:
import os basedir = os.path.abspath(os.path.abspath(os.path.dirname(__file__))) ### BASIC APP CONFIG SALT = 'salt' SECRET_KEY = 'secret' BIND_ADDRESS = '127.0.0.1' PORT = 9191 LOGIN_TITLE = "PDNS" HSTS_ENABLED = False OFFLINE_MODE = False # TIMEOUT - for large zones TIMEOUT = 10 # LOG CONFIG LOG_LEVEL = 'DEBUG' LOG_FILE = 'logfile.log' # For Docker, leave empty string #LOG_FILE = '' # Upload UPLOAD_DIR = os.path.join(basedir, 'upload') # DATABASE CONFIG SQLA_DB_USER = 'pdns' SQLA_DB_PASSWORD = 'password' SQLA_DB_HOST = '127.0.0.1' SQLA_DB_NAME = 'pdns' #PGSQL SQLALCHEMY_DATABASE_URI = 'postgresql://'+SQLA_DB_USER+':'\ +SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') SQLALCHEMY_TRACK_MODIFICATIONS = True # POWERDNS CONFIG PDNS_STATS_URL = 'http://127.0.0.1:8081/' PDNS_API_KEY = 'api_key' PDNS_VERSION = '4.3.0' #Default Auth BASIC_ENABLED = True SIGNUP_ENABLED = True
Обратите внимание – мы вешаем админку на локалхост! Доступ к ней в дальнейшем будет через nginx или апач.
Конфиг хоста для nginx:
server { listen you_ip:80; server_name server_dns_name; access_log /var/log/nginx/pdns-ssl-access.log; keepalive_timeout 60; client_max_body_size 10m; client_body_buffer_size 128k; proxy_redirect off; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k; proxy_buffer_size 8k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_headers_hash_bucket_size 64; location ~ ^/static/ { include /etc/nginx/mime.types; root /usr/local/powerdns-admin/powerdnsadmin; location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; } location ~* ^.+.(css|js)$ { expires 7d; } } location / { proxy_pass http://127.0.0.1:9191; proxy_read_timeout 120; proxy_connect_timeout 120; proxy_redirect off; } }
Обсуждение закрыто.