WEBサーバとDBサーバを使用してwordpressを構築

#目的
 [wordpress構築手順](https://itexpert.tips/ja/wordpress-ja/ubuntu-linux%e3%81%abnginx%e3%81%a7wordpress%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/#3)とは別のサーバ構成を用いた構築手順になります。
どういうことかというと、
[wordpress構築手順](https://itexpert.tips/ja/wordpress-ja/ubuntu-linux%e3%81%abnginx%e3%81%a7wordpress%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/#3)では、一台のインスタンスにWEBサーバーとDBサーバーの役割をまとめました。
今回の記事では、VMインスタンスを２台用意する。
一つ目のVMインスタンスにWEBサーバーを、二つ目のVMインスタンスにDBサーバーの機能を持たせ、
分離した構成とします。

#手順要旨
・WEBサーバーは、[wordpress構築手順](https://itexpert.tips/ja/wordpress-ja/ubuntu-linux%e3%81%abnginx%e3%81%a7wordpress%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/#3)で作成したVMインスタンスを活用し、
　手を加える。
・新たにインスタンスを一台作成し、DBサーバーの機能を持たせる。
・WEBサーバーからDBサーバーへの接続確認


#構築手順
#WEBサーバ用VMインスタンスに手を加える
```
Wordpress 設定ファイル修正
wp-config.phpを作成して編集
#cd /var/www/html/wordpress
#mv wp-config-sample.php wp-config.php
#vi wp-config.php

下記項目を変更　特に'DB_NAME'と'DB_USER'はDB用VMインスタンスで作成するDBと名称一致させること
define('DB_NAME', 'wordpressstep2');
define('DB_USER', 'wordpressstep2');
define('DB_PASSWORD', 'kamisama123');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
```

#DB用に新規でVMインスタンス作成
```
インスタンス詳細設定内容は下記参照
[wordpress構築手順](https://itexpert.tips/ja/wordpress-ja/ubuntu-linux%e3%81%abnginx%e3%81%a7wordpress%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b/#3)のVMインスタンス作成を参照
```

#MySQL インストール/データベース作成
```
#apt-get update
#apt-get install mysql-server mysql-client
#mysql --version

MySQLサービスコンソールにアクセス
#mysql -u root -p

データベース作成
下記情報で作成(wordpressは自由に変更してください)
•wordpressstep2という名前のデータベースを作成します。
•wordpressstep2という名前のMySQLユーザーアカウントを作成します。
•ワードプレスデータベースをワードプレスのユーザに完全に制御する。

↑をもとに下記コマンド実行
mysql> CREATE DATABASE wordpressstep2 CHARACTER SET UTF8 COLLATE UTF8_BIN;
mysql> CREATE USER 'wordpressstep2'@'%' IDENTIFIED BY 'kamisama123';
mysql> GRANT ALL PRIVILEGES ON wordpressstep2.* TO 'wordpressstep2'@'%';
mysql> FLUSH PRIVILEGES;
mysql> quit;
```
#外部のホストからDB用VMインスタンスに接続するための確認事項
```
確認事項①
作業インスタンス:DB用VMインスタンス
下記コマンドを実行
mysql> select user, host from mysql.user;
実行結果
mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| wordpressstep2   | %         |
| debian-sys-maint | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> quit

ここで確認したいことは、user:wordpresstep2 host:% の行です。
これは、wordpresstep2ユーザならどのホストからでも接続できるということです。

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できない。ガーン
```

```
確認事項②
DBサーバ用インスタンスの設定ファイルで他のアドレスからのアクセスを許可することができる。

MySQL サーバの設定ファイルより bind-address をコメントアウトして接続できる IP アドレスの制限をはずす。
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
 下記行をコメントアウトする
bind-address = 127.0.0.1
下記行を追加
bind-address = 0.0.0.0

変更したら mysql サーバーを再起動しよう。
$ sudo service mysql restart
sudo service mysqld status


WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
結果だめ
```
```
確認事項③
DBサーバのfirewallにポート（3306）の追加し、ポート3306で他のホストからのアクセスを許可

#apt install firewalld
#firewall-cmd --list-ports
実行結果何も登録されていない

ポート（3306）の追加
#firewall-cmd --add-port=3306/tcp --zone=public
#firewall-cmd --list-ports

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できない
```

```
確認事項④
db-wordpressでfirewallにmysqlを使えるように設定する。
状態チェック
firewall-cmd --list-services --zone=public  --permanent
実行結果
dhcpv6-client ssh

mysqlが無いので、追加
# firewall-cmd --add-service=mysql --zone=public --permanent
実行結果
success

リロード
#firewall-cmd --reload

WEBサーバから下記コマンドで接続してみる
# mysql -h DBサーバ用VMインスタンス外部IP -u wordpressstep2 -p
Enter password: 

結果、接続できたーー
```

#Wordpressに接続
```
ブラウザを開き、下記URLに接続
http://(WEBサーバVMインスタンス外部IPアドレス)/wordpress
```