nginx + php + mariadbの環境でphpMyAdminを使えるようにする

# 概要

[CentOS8 + nginx1.18 + php-fpm7.4 + MariaDB10.5 + CodeIgniter4の開発環境準備メモ](https://qiita.com/You_name_is_YU/items/82ea7f9fcae43649ebda)の手順で事前にnginxやphp、MariaDBのセットアップが完了している状態の環境に対し、phpMyAdminを使えるように設定していきます。

# セットアップ手順

```shell-session
# cd /usr/local/src/
# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.3/phpMyAdmin-5.0.3-all-languages.zip
# unzip phpMyAdmin-5.0.3-all-languages.zip 
# mv phpMyAdmin-5.0.3-all-languages /var/www/html/phpMyAdmin
# cd /var/www/html/phpMyAdmin
# cp -p config.sample.inc.php config.inc.php
# vim config.inc.php
```

```php:/var/www/html/phpMyAdmin/config.inc.php
#$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['blowfish_secret'] = 'KkpY`!<_[i"K_eK}Htz4&GV)%f;_$_Bi';
```

phpMyAdmin用のデータベーススキーマをインポートします。
インポートするスクリプトは`/var/www/html/phpMyAdmin/sql`にあります。

```shell-session
# mysql < /var/www/html/phpMyAdmin/sql/create_tables.sql -u root -p
Enter password: 
```

phpMyAdmin用のtmpディレクトリを作成

```shell-session
# mkdir /var/www/html/phpMyAdmin/tmp
# chmod 777 /var/www/html/phpMyAdmin/tmp
# chown -R nginx:nginx /var/www/html/phpMyAdmin
# cd /etc/nginx/conf.d
# vim default.conf
```

nginxのdefault.confファイルにphpMyAdmin用の設定を追加

```config:/etc/nginx/conf.d/default.conf
    # phpMyAdmin用の設定を追加
    location /phpMyAdmin {
        alias /var/www/html/phpMyAdmin/;
        try_files $uri $uri/ /index.php;

        location ~ ^/phpMyAdmin/(.+\.php)$ {
            alias /var/www/html/phpMyAdmin;
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            fastcgi_param SCRIPT_FILENAME /var/www/html/phpMyAdmin/$1;
            include fastcgi_params;
            fastcgi_intercept_errors on;
        }
    }
```

nginxとphp-fpmのサービスを再起動して

```shell-session
# systemctl restart nginx
# systemctl restart php-fpm
```

phpMyAdminにアクセスしてみる

https://tk2-999-99999.vs.sakura.ne.jp/phpMyAdmin/

![スクリーンショット 2020-10-12 19.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/70a28867-08c9-9742-da73-6feb26636a2e.png)

# BASIC認証をかける

phpMyAdminで簡単にデータベースの中身が除けてしまうのは問題なので、BASIC認証をかけます。
[nginxでBASIC認証をかけてみる](https://qiita.com/You_name_is_YU/items/e8db11eaa10067556e52)を参考に

```config:/etc/nginx/conf.d/default.conf
    # phpMyAdmin用の設定を追加
    location /phpMyAdmin {
        alias /var/www/html/phpMyAdmin/;
        try_files $uri $uri/ /index.php;

        # 以下２行の設定を追加します。
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;

        location ~ ^/phpMyAdmin/(.+\.php)$ {
            alias /var/www/html/phpMyAdmin;
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            fastcgi_param SCRIPT_FILENAME /var/www/html/phpMyAdmin/$1;
            include fastcgi_params;
            fastcgi_intercept_errors on;
        }
    }
```

```config:default.confの全体像
server {
    server_name  tk2-999-99999.vs.sakura.ne.jp;

    root /var/www/html/codeigniter3/public;
    index index.php index.html index.htm;

    location / {
      # 指定された順序でfileやdirの存在を確認し、最初に見つかったものを返却する。
      # いずれも無かった場合は、最後に指定されたパスに遷移する。
      try_files $uri $uri/ /index.php$is_args$args;
      
      #サイト全体にBASIC認証かけようとしたら、GMOからの結果通知プログラムとか受け取れなくなっちゃったので解除
      #auth_basic "Restricted";
      #auth_basic_user_file /etc/nginx/.htpasswd;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # 1台のサーバーでnginx+php-fpmを動作させる場合、Unixソケットの方が高速に動作する。
        # www.sockの場所は、/etc/nginx/conf.d/php-fpm.confの設定と合わせる。
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO $fastcgi_path_info;
    }

    listen 80;
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/tk2-999-99999.vs.sakura.ne.jp/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/tk2-999-99999.vs.sakura.ne.jp/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    # phpMyAdmin用の設定を追加
    location /phpMyAdmin {
        alias /var/www/html/phpMyAdmin/;
        try_files $uri $uri/ /index.php;

        # 以下２行の設定を追加します。
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;

        location ~ ^/phpMyAdmin/(.+\.php)$ {
            alias /var/www/html/phpMyAdmin;
            fastcgi_pass   unix:/run/php-fpm/www.sock;
            fastcgi_param SCRIPT_FILENAME /var/www/html/phpMyAdmin/$1;
            include fastcgi_params;
            fastcgi_intercept_errors on;
        }
    }
}
```

nginxのサービスを再起動して再度アクセスすると今度はBASIC認証の画面がちゃんと出てきます。

![スクリーンショット 2020-10-12 19.43.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/6f74d253-3b74-96b8-1c48-92477c906312.png)