Docker+phpMyAdminをBasic認証にする

blog

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認証を追加できた。

この記事を書いた人

PHPが好物な個人開発プログラマ。フリーランスエンジニアとしてWebサービス作ったりしてます。15年の経験を生かしてMENTAでメンターもやってます。WordPressやPHPでお困りのことがあればご相談に乗りますのでDMください。

Follow on SNS
blogDocker
SOHO MIND

Comments