NGINX UnitでAdminer (Docker-compose)
docker-composeで構築したWordPressにAdminerを追加してみました。
今回の目標
- 公式のイメージを使わず、独自のAdminerコンテナを作成する。
- Adminerコンテナ内のNGINX UnitをAdminerが動作するアプリケーションサーバーとして設定する。
- ホストと通信できるNGINXコンテナからadminerコンテナへのリバースプロキシを設定する。
- ホストから指定したURLへアクセスすることで、Adminerのログイン画面が開く。
- ログイン後、AdminerからmariaDBコンテナ内に保存されたWordPressのデータベースの情報が確認できる。
Dockerイメージの作成
諸般の事情で公式のイメージを利用できないため、Dockerfileの作成から始めました。
公式のガイド等を参考にNGINX UnitとAdminerの動作に必要そうなパッケージとAdminer本体を追加します。
NGINX Unitの設定を定義したjsonファイルとAdminerのCSSをコピーした後、NGINX Unitの設定をREST APIから読み込みます。
今回、CSSファイルは公式のpepa-linha-darkを使用しました。
NGINXコンテナと通信するポートをEXPOSEしてNGINX Unitをノーデーモンで起動、
最終的にDockerfileは以下のようになりました。
FROM alpine:3.13.5
RUN set -x \
&& apk update \
&& apk add --no-cache \
curl \
unit \
unit-php7 \
php \
php7-mysqli \
php7-session
RUN mkdir -p /var/www/html \
&& curl -L https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php \
> /var/www/html/adminer.php
COPY ./conf/config.json /tmp/config.json
COPY ./conf/adminer.css /var/www/html/adminer.css
RUN unitd \
&& curl -X PUT -d @/tmp/config.json --unix-socket /run/control.unit.sock http://localhost/config \
&& chmod +r /var/www/html/adminer.css
EXPOSE 8300
CMD [ "unitd", "--no-daemon" ]
config.jsonでは、EXPOSEしたポート8300をlistenし、デフォルトドキュメントとしてadminer.phpを設定、同じディレクトリに設置したadminer.cssへリクエストがあった時は静的ファイルとして返せるようルートの設定を行いました。
参考: NGINX Unit Static Files
{
"listeners": {
"*:8300": {
"pass": "routes"
}
},
"routes": [
{
"match": { //cssファイルへのリクエストはファイルを返す。
"uri": ["/adminer.css"]
},
"action": {
"share": "/var/www/html/"
}
},
{
"action": {
"pass": "applications/adminer"
}
}
],
"applications": {
"adminer": {
"type": "php",
"root": "/var/www/html/",
"index": "adminer.php"
}
}
}
NGINXコンテナの設定
NGINXコンテナには、ポートの公開とリバースプロキシの設定を追加します。
+ EXPOSE 8300
server {
~~~~~~
+ location /adminer/ { # https://localhost/adminer/へのリクエストはNGINX Unitへ
+ proxy_pass http://adminer:8300/;
+ }
~~~~~~
}
docker-composeの設定
docker-compose.ymlにadminerサービスを追加します。
version: "3"
networks:
network:
driver: bridge
services:
nginx:
networks:
- network
mariadb:
networks:
- network
+ adminer:
+ build:
+ context: ./adminer
+ container_name: adminer
+ restart: always
+ networks:
+ - network #NGINX, mariaDBと同一ネットワーク
動作確認
これで一通りの設定が終わったので、サービス起動後https://localhost/adminer/にアクセスすることでAdminerが動作してることが確認できると思います。
WordPressのデータベースのホスト、ユーザー名、パスワードを使って…
データベースにアクセスできました!
これで終わりです。
今回は、動作確認が目的なのでセキュリティ等に問題があるかもしれません。
記事の内容に誤りがあったらコメントいただけると幸いです。
読んでくださってありがとうございました。
Discussion