phpMyAdminの公式イメージを使用すると簡単にデータベースを操作できるようになるのだけど,MySQLのパスワードがちょっと弱いので(本当は複雑なパスワードにしたほうがいいのだけど,MySQLにログインして操作するときに毎回複雑なパスワードを入力するのが面倒なので)Basic認証を追加して,2重にすることで少しセキュリティをアップ。
前提条件
MySQL,phpMyAdminのDocker公式イメージを使用。
.htaccessでBasic認証を設定する。
ファイル構成
- phpMyAdmin/
- .htaccess
- .htpasswd
- docker-compose.yml
- Dockerfile
「.htaccess」ファイル
phpMyAdminのDockerはDebian + Apache2で構成されており,標準で.htaccessが使用できる設定になっているので,下記の.htaccessファイルを作成しておく。後ほどDockerfileで「/var/www/html」にCOPYする設定を追加する。
AuthType Basic
AuthName "Please Enter Your Password"
AuthUserFile /var/www/html/.htpasswd
Require valid-user
「.htpasswd」ファイルの作成
ホストがLinuxならホストでhtpasswdコマンドで「.htpasswd」ファイルを作成する。
後ほどDockerfile内でやはりCOPYコマンドで「/var/www/html」に配置する。。
#「newuser」というユーザー名で.htpasswdをカレントディレクトリに生成するコマンド。パスワードを二回入力
htpasswd -c .htpasswd newuser
New password:
Re-type new password:
Adding password for user newuser
「Dockerfile」の作成
FROM phpmyadmin:latest
COPY ./.htaccess /var/www/html/.htaccess
COPY ./.htpasswd /var/www/html/.htpasswd
「docker-compose.yml」の作成
volumes:の設定でMySQLのデータを永続化している。
version: '3'
services:
phpmyadmin:
build: ./
container_name: phpmyadmin
ports:
- "8000:80"
environment:
PMA_HOST: mysqld
db:
image: mysql:5.7
container_name: mysqld
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydata
MYSQL_USER: mysqluser
MYSQL_PASSWORD: userpassword
volumes:
db_data:
driver: local
docker-compose up -d --build
コンテナが起動したらブラウザで「http://localhost:8000」にアクセスする。
Basic認証のダイアログが表示され,htpasswdコマンドで指定したユーザー名とパスワードで入れればOK。
こんな感じでphpMyAdminにBasic認証を追加できた。
Comments