次の日投稿するはずが、AWSソリューションアーキテクトの試験を受けたりしてるうちに一月経ってしまいました。
PowerDNS AuthrititativeをInstallしてみるですが、Part1のPowerDNS導入の記事はこちら。
rotek.hateblo.jp
前回の記事ではPowerDNS Authoritativeのインストールまでを行いました。 今回はレコード編集操作用のWebインターフェースを導入してみます。
PowerDNS Frontendのサマリー
FrontendのPJについては、PowerDNSのgithubのwikiにリストがあり、
使われている言語とLast Commitの日にちなどが書かれています。
2019/2時点でのリストは以下のような形
PowerDNSのAPIを叩くものと、BackendのDBを直接叩くものにわかれている。
個人の感想としては膨大なレコードを持っている場合は、API経由ではタイムアウトが発生し情報が取得できなくなるケースが私はありました。
ただしどのくらいのレコードボリュームなどの検証まではできてなく、普段GENERATE文などを多用してBulkをたくさん抱えてる方は検証などを取られた方が良いかもしれません。
PowerDNS Frontendを導入してみよう
今回はAPIベースで操作するPowerDNS-Admin
を導入して見たいと思います。
Python/JSで作られているようです。
githubのアドレスはこちら github.com
Set Upを行う
GithubのREADME.mdを見る感じだと、docker imageも用意されているようなのですが今回はWiki pageに書かれている手順でサーバへインストールする方法でやりたいと思います。
基本的にはWikiに書かれている内容をこなせば起動まで確認ができます。(ですが、やった内容を一応残します)
Home · PowerDNS-Admin/PowerDNS-Admin Wiki · GitHub
MariaDB内にPowerDNS-Admin用のデータベースを作成する
PowerDNS Authoritativeをインストールした際に、BackendをMariaDBで構築を行いましたのでそのままMariaDBを使います。
MariaDB [(none)]> CREATE DATABASE powerdnsadmin CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.01 sec) MariaDB [(none)]> MariaDB [(none)]> GRANT ALL PRIVILEGES ON powerdnsadmin.* TO 'pdnsadminuser'@'%' IDENTIFIED BY 'ぱすわーど'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> MariaDB [(none)]> \q Bye
なお、大量のゾーンデータを扱う場合にはhistory
テーブルのデータ型をMEDIUMTEXT
に変更しておいた方が良いと書かれているので必要な方は実施しましょう。
Python3.6関係をインストール
今回の対象OSはCentOS7系を利用しているのでその流れで作業していきます。
OSはクリーンインストールからの状態なので色々多様利用していない前提で作業をしています。
epelとiusのレポジトリを追加します。
# yum install epel-release # yum install https://centos7.iuscommunity.org/ius-release.rpm
# yum install python36u python36u-devel python36u-pip # pip3.6 install -U pip # pip install -U virtualenv # ln -s /usr/bin/python3.6 /usr/bin/python3
その他フレームワーク起動に必要なlibrary群をインストール
Backendの利用バージョンで必要なlibrary群が変わりますので公式Wikiを必ず参照。
今回はMariadb5.5系のため以下を入れました。
# yum install gcc mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel
またyarnとNodejs 10が必要なためインストールしておきます。
# curl -sL https://rpm.nodesource.com/setup_10.x | bash - # curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo # yum install yarn
Githubからソースコードのcloneしvirtualenvで環境を作成
# git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/web/powerdns-admin Cloning into '/opt/web/powerdns-admin'... remote: Enumerating objects: 14, done. remote: Counting objects: 100% (14/14), done. remote: Compressing objects: 100% (11/11), done. remote: Total 7678 (delta 3), reused 14 (delta 3), pack-reused 7664 Receiving objects: 100% (7678/7678), 31.54 MiB | 13.78 MiB/s, done. Resolving deltas: 100% (3224/3224), done. # cd /opt/web/powerdns-admin # virtualenv -p python3 flask Running virtualenv with interpreter /bin/python3 Using base prefix '/usr' No LICENSE.txt / LICENSE found in source New python executable in /opt/web/powerdns-admin/flask/bin/python3 Also creating executable in /opt/web/powerdns-admin/flask/bin/python Installing setuptools, pip, wheel... done. # # source ./flask/bin/activate (flask) # pip install python-dotenv (flask) # pip install -r requirements.txt
PowerDNS-Adminの起動準備
flaskで起動するにあたり、config.py
が必要となります。
ソースコードをcloneした中身に、config_template.py
が存在するのでコピーして利用します。
(flask) # cp -p config_template.py config.py (flask) # vim config.py
起動時にbindするアドレスとポートを指定しましょう。 SECRET KEYはブラウザでのCookieの署名に使うらしいので適宜文字列をいれておく。
# BASIC APP CONFIG SECRET_KEY = '5qk8rzq2' BIND_ADDRESS = 'ipアドレス' PORT = 9191
PowerDNS-Admin用のDB接続情報を最低限設定する。
# DATABASE CONFIG SQLA_DB_USER = 'pdnsadminuser' SQLA_DB_PASSWORD = 'ぱすわーど' SQLA_DB_HOST = '127.0.0.1' SQLA_DB_PORT = 3306 SQLA_DB_NAME = 'powerdnsadmin' SQLALCHEMY_TRACK_MODIFICATIONS = True
DBのスキーマ作成を行う
(flask) # export FLASK_APP=app/__init__.py (flask) # flask db upgrade INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 787bdba9e147, Init DB INFO [alembic.runtime.migration] Running upgrade 787bdba9e147 -> 59729e468045, Add view column to setting table INFO [alembic.runtime.migration] Running upgrade 59729e468045 -> 1274ed462010, Change setting.value data type INFO [alembic.runtime.migration] Running upgrade 1274ed462010 -> 4a666113c7bb, Adding Operator Role INFO [alembic.runtime.migration] Running upgrade 4a666113c7bb -> 31a4ed468b18, Remove all setting in the DB INFO [alembic.runtime.migration] Running upgrade 31a4ed468b18 -> 654298797277, Upgrade BD Schema (flask) #
yarnで必要なパッケージ類をインストールしwebassetsでgenerateする
(flask) # yarn install --pure-lockfile yarn install v1.15.2 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh packages... Done in 50.17s. (flask) # (flask) # flask assets build Building bundle: generated/login.js [INFO] Building bundle: generated/login.js Building bundle: generated/validation.js [INFO] Building bundle: generated/validation.js Building bundle: generated/login.css [INFO] Building bundle: generated/login.css Building bundle: generated/main.js [INFO] Building bundle: generated/main.js Building bundle: generated/main.css [INFO] Building bundle: generated/main.css (flask) #
起動する
./run.py
を叩き起動する。
起動するとconfig.py
の中で指定している、Port 9191
でListenし起動します。
(flask) # ./run.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: on [INFO] * Running on http://10.31.0.172:9191/ (Press CTRL+C to quit) [INFO] * Restarting with stat [WARNING] * Debugger is active! [INFO] * Debugger PIN: 712-980-236
Webブラウザからアクセスする
起動メッセージ内のRunning on
にかかれているURLへアクセスを行います。(上記だとRunning on http://10.31.0.172:9191/
)
アクセスができるとログイン画面が表示されますので、初回アクセス時は赤枠内のCreate an account
をクリックしログインユーザを作成します。
ユーザ作成後にこの画面に戻るので作成したユーザでログインする。
PowerDNSのAPI情報を設定する
初回ログイン後はこの画面になるため、PowerDNS上で設定しているAPI Key
とAPI Endpoint
を入力する。
入力後
APIでの通信ができているかの確認をするためには、こちらの画面が表示されて値が取得されていれば大丈夫でしょう。
左ペインのPDNS
を選択すると今のPowerDNSでの統計値が取得されます。
APIでの通信ができていない場合 統計値が取得できていない。
以上でWeb GUIからPowerDNSのバックエンドへAPI経由でのアクセスができるようになりました。
ただし、現状ですとrun.py
をコマンドを実行して起動している状態のみのWeb GUIが起動となります。
今回はここまででPart3
で、nginxを使って常時起動する方法、レコードの更新操作周り、そして既存のBINDからのconfigインポート周りを書きたいと思います。