[OCI] Computeインスタンス上にphpMyAdminをインストールして、自宅からブラウザ経由でMySQL DBシステムにアクセスしてみた

# はじめに
OCIのMySQL DBシステムは、プライベート・エンドポイントのみを持ち、グローバルIPアドレスを持たないため、パブリック・サブネット上にある仮想マシン経由でアクセスする必要があります。

そこで、パブリック・サブネット上に作成したComputeインスタンスにphpMyAdminをインストールし、自宅からブラウザ経由でMySQL DBシステムにアクセスする環境を構築してみました。

注意：今回の構成ではSSL通信の設定はしておりませんので、機密データを扱う場合には、SSL通信の設定を行う、VPN経由でアクセスするなどを検討してください。


# 0.事前準備

こちらの記事を参考にして、VCNを構成します。

[[OCI] OCIのネットワークを構成する際に手戻りの少ない手順を考えてみる（初心者向け）](https://qiita.com/500InternalServerError/items/ce8aaf7d1c249126d345)

MySQL DBシステムは、こちらの記事のようにVCN内のプライベート・サブネット（Subnet2）に作成し、同じVCN内のパブリック・サブネット（Subnet1）にphpMyAdminを動作させるComputeインスタンス（Oracle Linux 7.8）を作成します。

[[OCI] Computeインスタンス上にNode.jsのWebアプリケーション環境を構成して、MySQL Database ServiceのDBシステムにアクセスしてみた](https://qiita.com/500InternalServerError/items/bf69825cba151789a63f)

また、Computeインスタンスに適用するネットワーク・セキュリティ・グループに、インターネット側からのTCP 80番ポートへのアクセスを許可するセキュリティ・ルールを追加しておきます。
不正アクセスを防ぐため、特定のグローバルIPアドレスからのアクセスを許可することをお勧めします。

# 1.タイムゾーンとロケールの設定
```
sudo timedatectl set-timezone Asia/Tokyo
sudo localectl set-locale LANG=ja_JP.utf8
```

# 2.MySQL Clientのインストール
```
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install -y mysql-community-client
```

# 3.PHP、Apacheのインストール
```
sudo yum install -y oracle-php-release-el7
sudo yum install -y php php-mysqlnd php-json php-gd php-mbstring  php-xml php-intl
```

# 4.Composerのインストール
こちらのページの手順に従って、composerをインストールします。
https://getcomposer.org/download/

```
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php --filename composer
php -r "unlink('composer-setup.php');"
```

# 5.twigのインストール
```
php composer require "twig/twig:^2.0"
```

# 6. ApacheとPHPの連携設定
```
sudo vi /etc/httpd/conf/httpd.conf
```
以下の内容をファイルの末尾に追加して保存します。

```
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
```
# 7.firewalldの設定（HTTP/TCP80を許可）

```
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=public
```
# 8.SELinuxの設定変更

```
sudo setenforce 0
```

# 9.SELinuxの設定ファイルの変更
```
sudo vi /etc/selinux/config

SELINUX=enforcing
の部分を
SELINUX=permissive
に変更します
```

# 10.phpMyAdminのダウンロードと解凍

```
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.zip

unzip phpMyAdmin-5.0.4-all-languages.zip
```
# 11.解凍したディレクトリを/usr/share/phpmyadminに移動

```
sudo mv phpMyAdmin-5.0.4-all-languages /usr/share/phpmyadmin
```
# 12.phoMyAdmin用のtmpディレクトリを作成し、所有者を変更

```
sudo mkdir -p /usr/share/phpmyadmin/tmp/
sudo chown -R apache:apache /usr/share/phpmyadmin/tmp/
```
# 13.phpMyAdminの設定ファイルを作成します。
config.sample.inc.phpをコピーして、phpMyAdminの設定ファイル config.inc.php を作成します。

```
sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
```
# 14.作成したphpMyAdminの設定ファイルを編集します。
```
sudo vi /usr/share/phpmyadmin/config.inc.php
```
この部分を変更します。

```
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
```
接続するMySQL DBシステムのエンドポイントに合わせて、以下のように変更します。

```
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'config';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'mysql1.subnet2.vcn1.oraclevcn.com';
$cfg['Servers'][$i]['user'] = 'admin';
$cfg['Servers'][$i]['password'] = 'Demo#1Demo#1';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;
```
# 15.phpMyAdmin用のApacheの設定ファイルを作成します。
```
sudo vi /etc/httpd/conf.d/phpmyadmin.conf
```
以下の内容を入力して、ファイルを保存します。
"XXX.XXX.XXX.XXX"の部分は、phpMyAdminにアクセスできるグローバルIPアドレスを指定します。
私はプロバイダから自宅のルータに付与されているIPアドレスを指定しました。

```
# Apache configuration for phpMyAdmin
Alias /phpMyAdmin /usr/share/phpmyadmin/ 
Alias /phpmyadmin /usr/share/phpmyadmin/ 
 
<Directory /usr/share/phpmyadmin/> 
  AddDefaultCharset UTF-8 
  #許可するグローバルIPアドレスを指定
  Require ip xxx.xxx.xxx.xxx 
</Directory>
```

# 16.Apacheの起動
systemctlコマンドで、Apacheを起動します。

```
sudo systemctl start httpd.service
```
# 17.Apacheの自動起動設定
systemctlコマンドで、OS起動時にApacheが自動的に起動するように設定します。

```
sudo systemctl enable httpd.service
```
# 18.ブラウザでphpMyAdminにアクセス
以上でphpMyAdminのインストールと設定が完了したので、ブラウザ経由でアクセスしてみます。
phpMyAdminをインストールしたComputeインスタンスのグローバルIPアドレスの後ろに"/phpmyadmin/"を
付けてアクセスします。

```
http://<ComputeインスタンスのグローバルIPアドレス>/phpmyadmin/
```
![スクリーンショット 2020-10-30 23.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/ee60f5a1-64f5-06d1-2616-b05c4896b8b9.png)
無事、phpMyAdminのログインページが表示されましたので、MySQL DBシステムの管理者ユーザ（今回はadmin）でログインしてみます。
![スクリーンショット 2020-10-30 23.14.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/e77eeac9-e8a0-378a-4147-55bdd8ef8a69.png)
無事ログインできました。

多言語対応版をインストールしたので、言語設定（上の画面のLanguageの部分）を変えれば、日本語表示になります。
![スクリーンショット 2020-10-30 23.15.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/784824/dcaa148c-d5e3-d2a0-9afb-12d69f3df7cb.png)

これで、ターミナルを立ち上げなくても、ブラウザがあれば自宅からMySQL DBシステムにアクセスできるようになりました。

# まとめ
今回は最新版のphpMyAdmin 5.0.4をComputeインスタンス上のOracle Linux 7.8にインストールし、MySQL DBシステムにアクセスしてみました。
かなり昔にphpMyAdminを使っていましたが、新しいバージョンも見た目はあまり変わりませんね。
細かいところはまだ触っていないのでわかりませんが、久しぶりに色々触ってみたいと思います。