WordPress基本構成パターン2-Webサーバー1台、DBサーバー1台

こんにちは。hacknoteのjunya.kです。

この記事はAWS初心者向けAWS環境のWordPress基本パターン8つ作ってみたのパターン2の作成方法を紹介する記事です。
そのまま真似をすれば誰でもAWSを使ってWordPressの入ったタイトル通りの構成のサーバーを建てる事ができます。

WordPressの構築

Webサーバー側サーバーのインスタンス作成

インスタンスの作成についてはこの記事と同様の作業を行うので、こちらも参考にしてください。

1.Amazon Linux 2でインスタンスを作成します。
上記の記事を参考に作成してください。
後に別サーバーのMySQLに外部からアクセスするので、手順6:セキュリティグループの設定において、タイプとしてMYSQL/Auroraを選択し、3306番ポートを開けておきましょう。ソースは任意の場所にしておきます。 

2.ssh接続し、サーバー構築を行います。具体的には以下の記事を参考にすれば大丈夫です。
EC2でwebサーバーを構築する方法
実行するコマンドのみ列挙しておきます。

$ ssh -i [公開鍵].pem ec2-user@[IPアドレス]
[ec2-user@ ~]$ sudo su -
[root@ ~]# amazon-linux-extras install php7.2
[root@ ~]# yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm -y
[root@ ~]# yum-config-manager --disable mysql80-community
[root@ ~]# yum-config-manager --enable mysql57-community
[root@ ~]# yum install -y httpd php mysql-community-server
[root@ ~]# systemctl start httpd mysqld
[root@ ~]# systemctl enable mysqld httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

これによって最新のLAMP環境(Apache,MySQL,PHP)が構築されます。
なお、この時点でサーバー側サーバーにMySQLを用意するのは、データベース側サーバーのMySQLデータベースにアクセスするためのユーザ設定を作成するためです。

3.Wordpressをインストールします。
参考:EC2にWordPressをインストールする
日本語版WordPressを取得して解凍します。

[root@ ~]# cd /var/www/html/
[root@ html]# wget https://ja.wordpress.org/latest-ja.tar.gz
[root@ html]# tar -xzvf latest-ja.tar.gz
[root@ html]# rm latest-ja.tar.gz

ドキュメントルートの参照先をここに変更します。

[root@ html]# vim /etc/httpd/conf/httpd.conf 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html/wordpress"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


3.MySQLにおいて、WordPress用のデータベースを作成します。
後々DB側サーバーのDBを使うので、このDBは不要になりますが、作業を簡単にするために作っておきます。
上の記事を参考にデータベースを作成してください。

4.WordPressの初期設定をする。
ブラウザでIPアドレス直下のWordPressにアクセスし、3で作成したDBの情報を入力し、設定を終えてください。サイト情報の登録まで終えたらWebサーバー側サーバーの設定は終了です。

データベース側サーバーのインスタンス作成

1.Webサーバー側と同様にLAMP環境を作成します。Webサーバー側の手順に沿って2まで終わらせてください。
なお、ここでHTTPやHTTPSのアクセスをローカルのみに設定することによってDB側サーバーのセキュリティを高く保つことができます。

2.外部からのアクセスを受け付けるためのMySQLDBを作成します。
ログから初期パスを確認します。

[root@ ~]# cat /var/log/mysqld.log | grep 'localhost'
2018-08-07T01:47:41.008720Z 1 [Note] A temporary password is generated for root@localhost:[ここがパスワード]

こちらでログインし、rootのパスワードを変更した後WordPress用のユーザ(wpa001)とDB(wpa001)を作成します。

[root@ ~]# mysql -uroot -p
Enter password: [初期パスワードを入力]
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Defaultp@ssw0rd';
mysql> create database wpa001;
mysql> create user wpa001@localhost identified by 'Hogehoge@1234';
mysql> grant all on wpa001.* to wpa001@localhost identified by 'Hogehoge@1234';
mysql> flush privileges;

今のこの状態であれば、各DBへのアクセスはローカルホストのみに制限されているはずです。アクセスできるIPアドレスをWebサーバー側サーバーのみに設定して外部からのアクセスを許可します。

mysql> select user, host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| wpa001        | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpa001.* TO wpa001@'[Webサーバー側IPアドレス]' IDENTIFIED BY '[パスワード]' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select user, host from mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| wpa001        | [IPアドレス] |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
| wpa001        | localhost |
+---------------+-----------+
5 rows in set (0.00 sec)

これで指定されたホストからwpa001というユーザがwp001というDBに接続できるようになりました。ほかのホストからのアクセスは受け付けません。

以上でデータベース側のインスタンスは作成完了です。

WordPressがデータベース側のDBにアクセスできるように設定する

1.まずはWebサーバー側からDBにアクセスできるのか確かめます。

[root@ ~]# mysql -h [DB側サーバーのIPアドレス] -u wpa001 -p -P 3306
Enter password:[データベース側のDB(wpa001)で設定したパスワード]
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

以上のように表示されたらOKです。アクセスできました。

2.WordPressの設定をします。wp-config.phpに参照するデータベースの情報があるので、ここを編集します。

[root@ ~]# vim /var/www/html/wordpress/wp-config.php
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ** MySQL 設定 - この情報はホスティング先から入手してください。 ** //
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wpa001');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'wpa001');

/** MySQL データベースのパスワード */
/**define('DB_PASSWORD', '[元のパスワード]');*/
define('DB_PASSWORD','[DB側DB(wpa001)に設定したパスワード]');

/** MySQL のホスト名 */
/**define('DB_HOST', 'localhost');*/
define('DB_HOST', '[DB側サーバーのIPアドレス]');
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

これでWebサーバー側からWordPressにアクセスするとDB側のwpa001というDBにアクセスできることになります。