手元でPowerDNSのAPIを叩くためのDockerイメージを作った(その2)
こちらの記事で、手元でPowerDNSのAPIを叩くためのDockerイメージを作りましたが、
加えて、
というのをやっていきます。
レコードの保存先をMySQLへ
docker-composeに以下の設定を追加しました。
mysql: image: mysql:5.7 healthcheck: test: "echo 'SELECT version();'| mysql -u pdns -h 127.0.0.1 --password=pdns pdns" timeout: 30s retries: 5 ports: - "13306:3306/tcp" volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro - mysql_data:/var/lib/mysql environment: - "MYSQL_DATABASE=pdns" - "MYSQL_USER=pdns" - "MYSQL_PASSWORD=pdns" - "MYSQL_RANDOM_ROOT_PASSWORD=yes" volumes: mysql_data:
powerdns: depends_on: mysql: condition: service_healthy
また、設定に以下を追加します。
launch=gmysql # launch=bind から変更 gmysql-host=mysql gmysql-user=pdns gmysql-password=pdns gmysql-dbname=pdns
具体的に何をやっているかというと・・・
healthcheck, depends_on
DBの準備ができる前にpowerdnsを起動してしまうと、DBのコネクションエラーになってしまうので、MySQLが立ち上がり、DBがセットアップできるまでpowerdnsを起動させないようにしています。
volumes
/docker-entrypoint-initdb.d/
以下にSQL, シェルスクリプトなどのファイルを置いておくと、MySQLコンテナ起動時に実行してくれるようになります。
それを利用して、PowerDNSのテーブルをCREATEするようにしています。
SQLはこちら https://github.com/PowerDNS/pdns/blob/rel/auth-4.3.x/modules/gmysqlbackend/schema.mysql.sql
environment
MySQLのDB情報を設定しています。
詳しくはこちら https://hub.docker.com/_/mysql
PowerDNS-Adminを使ってGUIで管理できるようにする
以下の設定を追加しました。
powerdns-admin: image: ngoduykhanh/powerdns-admin:latest ports: - "9191:80" logging: driver: json-file options: max-size: 50m environment: - SQLALCHEMY_DATABASE_URI=mysql://pdns:pdns@mysql/pdns - GUNICORN_TIMEOUT=60 - GUNICORN_WORKERS=2 - GUNICORN_LOGLEVEL=DEBUG - OFFLINE_MODE=False
これは公式の設定通り
https://github.com/ngoduykhanh/PowerDNS-Admin
動かしてみる
起動は通常通り docker-compose up
で起動、http://localhost:9191/ へアクセスし、GUIからのAレコードを追加してみます。
test.takapi-example.jp
からIPアドレス127.0.0.1が引けるようにしました。
dig +norec @localhost -p 1053 test.takapi-example.jp A ; <<>> DiG 9.10.6 <<>> +norec @localhost -p 1053 test.takapi-example.jp A ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57925 ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;test.takapi-example.jp. IN A ;; ANSWER SECTION: test.takapi-example.jp. 60 IN A 127.0.0.1 ;; Query time: 7 msec ;; SERVER: ::1#1053(::1) ;; WHEN: Fri Jan 01 17:42:52 JST 2021 ;; MSG SIZE rcvd: 67
構築した環境はこちらで公開しております。 github.com
とりあえず、今日はここまで