URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

PowerDNS-Adminをインストール

 PowerDNSをインストールしたので、管理のためのWeb UIです。
 GitHubのWikiにいろいろとリストアップされているので、ここからPowerDNS-Adminを選びました。
 PowerDNSとはAPIで連携、Python、最近も更新されている、なんとなくモダンな感じという適当な理由です。

 以前使っていたPoweradminはちょっと前に見たときはしばらく更新がなくて取り消し線が付いていたと思いますが、また復活していましたね。

 それでは早速インストールしていきますが、PowerDNS-Adminのインストール方法はWikiにまとまっているので、あまり迷うこともないと思います。
 環境の前提は前回のPowerDNSインストールを完了していること。PowerDNSと同じサーバに同居させます。

 まずは、諸般の事情でSELinuxを無効します。

# sed -i "s/SELINUX\=.*$/SELINUX=disabled/g" /etc/selinux/config
# setenforce 0

 次は、PowerDNS用データベースとは別に、PowerDNS-Admin用のデータベースを準備します。
 データベース名"pdnsadmin"、ユーザー名"pda"、パスワード"password"としています。

# mysql -h 127.0.0.1 -u root -p <<EOF
> CREATE DATABASE pdnsadmin CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON pdnsadmin.* TO 'pda'@'%' IDENTIFIED BY 'password';
> FLUSH PRIVILEGES;
> EOF

 Python 3.6を使うためIUSレポジトリを使います。
 ついでに後で必要となる開発系のパッケージもインストールしておきます。

# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
# yum -y install python36u python36u-devel python36u-pip git python-pip python-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel MySQL-python

 Python 3.6のパッケージを入れたら、"pip"と"virtualenv"の最新化、"python3"コマンドの作成をしておきます。

# pip3.6 install -U pip
# pip install -U virtualenv
# ln -s /usr/bin/python3.6 /usr/bin/python3

 Yarnと依存性で必要になるNode.jsをインストールします。

# 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 -y install yarn

 GitHubからPowerDNS-Adminのレポジトリをクローンします。
 ここでは"/opt/PowerDNS-Admin"に配置します。

# cd /opt
# git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git

 PowerDNS-Adminのディレクトリに移動し、Python 3.6用に"virtualenv"を使います。

# cd ./PowerDNS-Admin
# virtualenv -p python3 env

 Python 3.6の環境に入ってPythonの各種パッケージをインストールします。

# . ./env/bin/activate
(env) # pip install python-dotenv
(env) # pip install -r requirements.txt

 設定ファイルのテンプレートをコピーして、データベース情報の修正とリモートアクセスのためネットワーク情報を設定します。

(env) # cp -p ./config_template.py ./config.py
(env) # sed -i "s/SQLA_DB_USER \=.*$/SQLA_DB_USER = \'pda\'/g" ./config.py
(env) # sed -i "s/SQLA_DB_PASSWORD \=.*$/SQLA_DB_PASSWORD = \'password\'/g" ./config.py
(env) # sed -i "s/SQLA_DB_NAME \=.*$/SQLA_DB_NAME = \'pdnsadmin\'/g" ./config.py
(env) # sed -i "s/BIND_ADDRESS \=.*$/BIND_ADDRESS = \'0.0.0.0\'/g" ./config.py

 データベースの初期化とAssetファイル生成を実行します。

(env) # export FLASK_APP=app/__init__.py
(env) # flask db upgrade
(env) # yarn install --pure-lockfile
(env) # flask assets build

 ファイアウォールでポートを開放してからPowerDNS-Adminを起動します。

(env) # firewall-cmd --permanent --add-port=9191/tcp --zone=public
(env) # firewall-cmd --reload
(env) # ./run.py

 この時点では、フォアグラウンドかつデバッグモードで起動します。
 "http://<IPアドレス>:9191" へアクセスするとログイン画面が表示されるので、最初にユーザーを作成してからログインします(最初に作ったユーザーが管理ユーザーになります)。
 初回ログイン時に接続するPowerDNSのAPIエンドポイントやキーを設定してください。正しく設定できればPowerDNSの操作ができるはずです。



 これで動作確認はできましたが、実際に使うためにはサービス化する必要があると思います。
 そこでターミナルに戻って、[Ctrl]+[c]を押下してPowerDNS-Adminを終了してください。

 今回はアプリケーションサーバとしてGunicornを使っています。
 PowerDNS-Adminの"requirements.txt"にGunicornは記述してあるので、既にインストールされています。
 systemdで起動するためユニットファイル"/etc/systemd/system/pdns-admin.service"を以下の内容で作成します。


[Unit] Description=PowerDNS-Admin with Gunicorn After=network.target [Service] User=root Group=root WorkingDirectory=/opt/PowerDNS-Admin ExecStart=/opt/PowerDNS-Admin/env/bin/gunicorn --workers 2 --bind 0.0.0.0:8080 app:app [Install] WantedBy=multi-user.target

 TCPポート8080を使用していますが、環境に応じて適当に変更してください。
 あとはサービスの起動とファイアウォールのポート開放です。

# systemctl daemon-reload
# systemctl start pdns-admin.service
# systemctl enable pdns-admin.service
# firewall-cmd --permanent --add-port=8080/tcp --zone=public
# firewall-cmd --reload

 これで"http://<IPアドレス>:8080"でPowerDNS-Adminへアクセスできるようになったはずです。
 さらに考えるなら、Webサーバを使ってHTTPSにするとかでしょうか。


 とりあえず今回はここまで。


    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

プロフィール

1020@管理人

都内を彷徨っているインフラエンジニアとかいう雑用係。いつだって眠い…。

最近のつぶやき

@umkn1020 (07/06-17:56)
RT @sksat_tty: これは暴言ですが,Macで開発便利っつってるやつがGitリポジトリに.DS_Store入れてたら市中引き回しにして十字架に張り付けて火つける
@umkn1020 (07/03-18:57)
RT @kamo_hiroyasu: 「人口の1割は複文が処理できないのだから、そのつもりで行動しろ」と助言することが時々あるのですが、「何もしなければ、42万人死亡する」を「42万人死亡する」と誤読して「外した」と煽る人がわらわらと湧いてきたことで、説得力が増しました。
@umkn1020 (07/03-18:49)
RT @taijijiji: 外資企業が日本市場でhiring難しいとは聞いていましたがこれほどとは。。日本人の転職の心理的ハードルの高さ、英語ポジションへの苦手意識が伺える。。英語は実質的な語学スキルよりも「やっていける自信がない」「怖い」「どうせ落とされる」というメンタリテ…
@umkn1020 (07/03-13:03)
RT @yuutosi_hiyuu: 声だして笑った https://t.co/EjqAUuT3z0
@umkn1020 (07/02-16:02)
Smart LifeでIFTTT使えなくなっていたのか…

エントリーリスト

カテゴリーリスト

タグ