Amazon オーディブル2ヶ月無料キャンペーン中 5/9まで

【AWS】EC2とRDSでwordpressをセットアップする

11 min

AWSでEC2とRDSでwordpressをセットアップしてみたので記事にする!の第4回です。この記事ではEC2とRDSでWordPressをセットアップするまでを紹介していきます。

この記事はこんな人にオススメ

  • RDSを使ってWordPress用のデータベースを作成したい方
  • EC2からRDSに接続しデータベースを作成したい方
  • WordPress用にEC2にPHPをインストールしたい方

このサイト(ブログ)はConoHa WINGで運用しています。国内最速、超安定、稼働率99.99%以上、ということだけあってConoHa WINGにまったく不満もなくむしろ動作もキビキビ速いし、コンソールもまずまず使いやすく快適で満足しかないです。ConoHa WINGの詳細はこちらです。

本シリーズの記事はAWSのEC2とRDSを使ってwordpressをセットアップし、バックアップにはS3を活用します。自由度や柔軟性は圧倒的にAWSが高い反面、セキュリティの対策や日々のメンテナンスも必要になってきます。つまりネットーワークやセキュリティ、AWSの勉強にはもってこい!ってことです。

それとは逆に、コンテンツ制作やクリエイティブ面に注力したい場合は、ネットワークやセキュリティ、サーバ構築、メンテナンスなどがほぼ必要のないConoHa WINGがオススメです。

国内最速しかも安い:ConoHa WING

さて、下記は前回までの記事と今回の記事の位置づけです。

第1回では
コンソール操作でEC2とRDSを準備する方法を紹介しました。
まだAWSアカウントを作成されていない方や、インスタンスをまだ立ち上げていない方は、まず下の記事からご覧ください。

第2回では
EC2にSSHで安全にアクセスする方法を紹介しました。
下の記事からご覧ください。

第3回では、
Apacheで最低限やっておくべきSSL/TLSの設定を紹介していきます。
下の記事からご覧ください。

そして第4回のこの記事では、
初心者に向けてわかりやすくEC2とRDSでWordPressをセットアップするまでを紹介していきます。

この記事でわかること

  • RDSを使ったWordPress用のデータベース作成方法
  • EC2からRDSに接続しデータベースを作成する方法
  • WordPressに必要なPHPのインストール方法

全体像

  1. STEP

    【AWS】コンソール操作でEC2とRDSを準備する

  2. STEP

    【AWS】EC2にSSHで安全にアクセスする

  3. STEP

    【AWS】Apacheで最低限やっておくべきSSL/TLSの設定

  4. STEP

    【AWS】EC2とRDSでwordpressをセットアップする

  5. STEP

    【AWS】S3にwordpressをバックアップする

Amazonの読み放題・聴き放題

kindle unlimited 読み放題
200万冊以上が読み放題

Audible
12万以上の対象作品が聴き放題

Amazon オーディブル:2ヶ月無料キャンペーン中(5/9まで)→ 詳しくはこちら

前回までのおさらい

AWSのアカウントを登録し、EC2インスタンス作成、Elastic IPの割り当てと関連づけを行い、固定IPにしました。そしてRDSコンソールからデータベースの作成を行いました。

ローカル環境から立ち上げたEC2インスタンスへSSH接続し、Apacheをインストールしローカル環境からブラウザでSSL接続できることまでやりました。

今回は、RDSコンソールから作成したデータベースに対して、EC2インスタンスから接続しSQLでWordPress用のデータベースをつくっていきます。

今回のEC2とRDSの構成(シンプルです)
今回のEC2とRDSの構成(シンプルです)

ネットワーク、セキュリティや各種チューニング、AWSの各サービスの詳細は奥が深すぎるので今回は触れませんが、AWSではじめるインフラ構築入門 安全で堅牢な本番環境のつくり方」はオススメの書籍です。

そもそもAWSのRDSとは?

ちなみにRDSはリレーションデータベースサービス(Relation Database Service)の略です

WordPressを構築する場合、通常はサーバを準備しそのサーバにデータベースをインストールしWordPressを利用します。1台のサーバにWEBサーバとデータベースをセットアップするパターン、WEBサーバとデータサーバを1台ずつに分けて2台で構築するパターン、それぞれ冗長化させて4台(2×2台)で構築するパターンなど、たくさんのケースがあります。

いずれのパターンでも通常、データベースを用意するにはサーバを準備する必要があるわけですが、AWSのRDSはデータベースのためのサーバが不要で、設定も簡単ですぐに利用することができます。

他にもメリットとして高速であり安価でありセキュリティも高く、自動でバックアップも作成され、更に拡張性もあります。

デメリットとしては、データベースサーバがないのでログインできませんので、若干ブラックボックス感がなくもないですがそれもあくまでサーバと比べての話しなのでメリットの方が大きいと思います。

サーバによるWordPressのデータベース構築や運用を経験した上でRDSを使う、というのが勉強や経験としても良いと思います。

RDSにWordPress用のデータベースを作成する

mysql clientをインストールする

それではやっていきます。まずEC2インスタンスへSSHで接続します。EC2インスタンス上で下記のコマンドを実行し、RDSへ接続するためにmysql clientをインストールします。(実際には下記のようにmariadb.x86_64mariadb-libs.x86_64 がインストールされます)


sudo yum install mysql
Running transaction
 インストール中    : 1:mariadb-libs-5.5.68-1.amzn2.x86_64            1/2 
 インストール中    : 1:mariadb-5.5.68-1.amzn2.x86_64                 2/2 
 検証中          : 1:mariadb-libs-5.5.68-1.amzn2.x86_64            1/2 
 検証中          : 1:mariadb-5.5.68-1.amzn2.x86_64                 2/2 

インストール:
  mariadb.x86_64 1:5.5.68-1.amzn2                                               

依存性関連をインストールしました:
  mariadb-libs.x86_64 1:5.5.68-1.amzn2                                          

完了しました!

インストールされたこととバージョンを確認します。


sudo yum list installed | grep maria
mariadb.x86_64                        1:5.5.68-1.amzn2               @amzn2-core
mariadb-libs.x86_64                   1:5.5.68-1.amzn2               @amzn2-core
mysql --version
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1

RDSへ接続する

エンドポイントの確認

RDSへ接続するために、RDSのコンソールからエンドポイントを確認します。エンドポイントとはRDS自身のホスト名で、EC2インスタンスからこのエンドポイントを指定して接続する必要があります。

  1. STEP

    RDSコンソールへアクセス

  2. STEP

    左のメニューからデータベースをクリック

  3. STEP

    データベース一覧から該当のデータベース(wordpress用)をクリック

  4. STEP

    接続とセキュリティタブ内にエンドポイントが表示されています

    xxxxxxxxxxxxxxxxx.rds.amazonaws.comという文字列です。

    エンドポイントはコピーしておきます。

EC2インスタンスからRDSへ接続する

EC2インスタンスから下記のコマンドでRDSへ接続します。

【基本】mysqlコマンドの書式(EC2から実行するmysqlコマンド書式)
mysql --user=<USER> --password=<PASSWORD> --host=<ENDPOINT>
【短縮】mysqlコマンドの書式(EC2から実行するmysqlコマンド書式)
mysql -u <USER> -p<PASSWORD> -h <ENDPOINT>

-pの後にパスワードを指定する場合、半角スペースは不要です

項目説明
<USER>RDSでデータベースを作成した際のマスターユーザー名
<PASSWORD>RDSでデータベースを作成した際のマスターパスワード
<ENDPOINT>RDSコンソールで確認したエンドポイント(ホスト名)
ひとこと

-pの後にパスワードを書かなくてもコマンド実行後にパスワードが求められます。

また、<ENDPOINT>は.zshrc等で環境変数に設定することで毎回の入力は不要にできます。

export MYSQL_HOST=xxxxxxxxxxxxxxxxxxxx.rds.amazonaws.com

ではEC2インスタンスから実際に接続してみます。<user>、<password>、<endpoint>は実際のものに置き換えて実行してください。


mysql --user=<user> --password=<password> --host=<endpoint>
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 5192
Server version: 8.0.30 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

RDSに接続できました。RDSではSQLで操作します。試しにshow databases;してデータベースを確認してみましょう。exitctrl + Dでログアウトします。


show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
exit

最低限覚えたいSQL文

RDSにWordPress用データベースを作成する前に、予備知識として最低限覚えたSQL文を紹介します。

show文

データベースの一覧を表示する。


show databases;

そのデータベースのテーブル一覧を表示する。


use [データベース名]
show tables;

そのテーブルのカラム(フィールド)一覧を表示する。


show columns from [テーブル名];

create database文

データベースを作成する。(「tes_db」というデータベースを作成)


create database test_db;

ちなみに、データベースの削除は下記となります。


drop database test_db;

create user文

新しいユーザーを作成する。(「test_user」というユーザーを作成)


create user test_user;

ちなみに、ユーザーの削除は下記となります。


drop user test_db;

select文

select文はテーブルからレコードを取得するためのSQL文です。

下記はmysqlデータベースのuserテーブルから、userカラムとhostカラムを取得するSQL文です。


select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| rdsadmin         | localhost |
+------------------+-----------+
4 rows in set (0.01 sec)


最初に買うSQLの本として「いちばんやさしい SQL 入門教室」がオススメです。

RDSにWordPress用データベースを作成する

それでは、上記の「最低限覚えたSQL文」をざっと覚えたら実際にRDSにWordPress用のデータベーズを作成していきます。

  1. STEP

    EC2からRDSへ接続

    
    mysql -u <user> -p<password> -h <endpoint>
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5192
    Server version: 8.0.30 Source distribution
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    
  2. STEP

    WordPress用データベースの作成

    ここではデータベース名をwordpress_dbとしています。

    
    create database wordpress_db;
    
    

以上でRDSにwordpress用のデータベースが作成されました。この後はEC2インスタンス側でPHPのインストールや、WordPressを設定をしていきます。

Amazonの読み放題・聴き放題

kindle unlimited 読み放題
200万冊以上が読み放題

Audible
12万以上の対象作品が聴き放題

Amazon オーディブル:2ヶ月無料キャンペーン中(5/9まで)→ 詳しくはこちら

EC2インスタンスにPHPをインストール

最初に買うPHPの本として最近発売された「確かな力が身につくPHP「超」入門 第2版」もオススメです。

今回インストールするphpのバージョンは少し古いですがphp7.4をインストールします。EC2のAmazon Linuxで簡単にインストールできるためです。継続的な本番環境ではphp7.4だけでなく最新版のphp8.1を検討するのが良いと思います。

php7.4からphp8.2へのアップデートを以下の記事で紹介しています。ぜひご覧ください。

php7.4のインストール


sudo amazon-linux-extras install php7.4 -y

WordPressに必要なphp関連のインストール


sudo yum install php php-gd php-mysqlnd php-xmlrpc -y
sudo yum install php-mbstring php-xml -y
sudo yum install php-intl -y

phpとapacheの再起動


sudo systemctl restart php-fpm.service
sudo systemctl restart httpd

php.iniの設定

php.iniの編集

最低限必要なphp.iniの設定を行います。設定ファイルは/etc/php.iniです。


sudo vi /etc/php.ini

post_max_size = 250M
upload_max_filesize = 200M

expose_php = Off
memory_limit = 256M
date.timezone = Asia/Tokyo
mbstring.language = Japanese

最低限必要なphp.iniの簡単な説明です。その他の設定や詳細はPHPの公式サイトなど確認してください。

項目設定値説明
post_max_size250MPOSTデータの最大サイズ。「upload_max_filesize」より大きくする。
upload_max_filesize200Mアップロードされるファイルの最大サイズ。「post_max_size」より小さくする。
expose_phpOffOnの場合、PHP のバージョンがHTTP ヘッダに含まれる (X-Powered-By: PHP/5.3.7 など)。
memory_limit256MPHPスクリプトの使用可能メモリ最大値
date.timezoneAsia/Tokyo全ての日付/時刻関数で使用されるデフォルトのタイムゾーン。
mbstring.languageJapanesembstring で使用される言語設定(NLS)のデフォルト値。

Apacheの再起動

php.ini編集後はApacheを再起動しphp.iniの設定を反映させます。


sudo systemctl restart httpd

ApacheとPHPの動作確認

ドキュメントルート(/var/www/html/)にPHP動作確認用のテストファイルを作成して確認します。


cd /var/www/html/
sudo vi phptest.php
<?php phpinfo(); ?>

ブラウザでphptest.phpへアクセスし確認します。https://IPアドレス/phptest.phpですね。下図のように表示されていれば動作は正常です。

ApacheとPHPの動作確認
ApacheとPHPの動作確認

確認後はドキュメントルート(/var/www/html/)に設置したPHP動作確認用のテストファイルは削除します。(公開後に意図しない第三者に閲覧されてしまわないように)


cd /var/www/html/
sudo rm phptest.php

ドキュメントルートのパーミッション設定

パーミッション設定

ドキュメントルート(/var/www/html/)のオーナーを「apacheユーザー:apacheグループ」にして、set gidを設定しておきます。


sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod g+s /var/www

ドキュメントルート配下のパーミッションはディレクトリは775、ファイルは664にしておきます。

構築直後で/var/www/htmlに何もファイルがない場合は下のようにchmod 775します。


sudo chmod 775 /var/www/html

/var/www/html配下にディレクトリやファイルなど多くある場合は下のようにfindで対応します。


find /var/www -type d -exec sudo chmod 775 {} \;
find /var/www -type f -exec sudo chmod 664 {} \;

ドキュメントルートにファイルを更新するユーザーを追加する際は下記のようにします。例としてweb-userを作成し/var/www/html/への書き込みをテストしておきます。


sudo useradd web-user
sudo usermod -aG apache web-user


sudo su - web-user
touch /var/www/html/test.html
ls -l /var/www/html/test.html
-rw-rw-r-- 1 web-user apache 0 10月 1 14:18 test.html
rm /var/www/html/test.html

作成したweb-userは必要なければ削除しておきます。


sudo userdel web-user

ApacheのAllowOverrideを設定する

 /etc/httpd/conf/httpd.confでAllowOverrideを設定しておきます。.htaccessは様々な便利な制御が可能で、またWordPressのセキュリティ系のプラグインが.htaccessを利用するので許可しておきます。


sudo vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">内の
AllowOverrideをALLにします。(150行目前後)


EC2インスタンスでWordPressを設定する

最新版の日本語WordPressをダウンロードする

まずは最新版の日本語WordPressをホームディレクトリにダウンロードしunzipします。unzipするとそのディレクトリにwordpressというディレクトリとファイル群が作成されます。


cd
pwd
/home/user_name
wget https://ja.wordpress.org/latest-ja.zip
unzip latest-ja.zip
ls -l
drwxr-xr-x 5 user user     4096  8月 31 21:05 wordpress
-rw-rw-r-- 1 user user 23633505  8月 31 05:07 latest-ja.zip

WordPressをドキュメントルートに配置し設定する

先程unzipしたwordpressディレクトリの中身をドキュメントール(/var/www/html/)配下にコピーします。


cd
ls -l
drwxr-xr-x 5 user user     4096  8月 31 21:05 wordpress
-rw-rw-r-- 1 user user 23633505  8月 31 05:07 latest-ja.zip
cp -r wordpress/* /var/www/html/.

wp-config.phpの設定とセキュリティ対策

ドキュメントルートに配置したWordPressの設定ファイルを編集します。設定ファイルは/var/www/html/wp-config.phpです。wp-config-sample.phpmvして使います。


cd /var/www/html/
sudo mv wp-config-sample.php wp-config.php
sudo vi wp-config.php
/** The name of the database for WordPress */
define( 'DB_NAME', '[WordPress用のデータベース名]' );

/** Database username */
define( 'DB_USER', '[RDSのマスターユーザー名]' );

/** Database password */
define( 'DB_PASSWORD', '[RDSのマスターパスワード]' );

/** Database hostname */
define( 'DB_HOST', '[エンドポイント]' );

wp-config.phpは上記のようにデータベースのパスワードを記載する設定ファイルであるため、パーミッションを適切に設定し外部からのアクセスを不可にする必要があります。下記の対策をやっておきます。

設定後、/var/www/html/wp-config.phpのパーミッションを400にします。


cd /var/www/html/
sudo chown apache wp-config.php 
sudo chmod 400 wp-config.php

さらに、.htaccesswp-config.phpは外部からアクセス不可能に設定します。


cd /var/www/html/
sudo vi .htaccess
<files wp-config.php>
order allow,deny
deny from all
</files>

WordPressをinstall.phpへアクセスしインストールを完了させる

最後にブラウザからinstall.phpへアクセスし、サイト名の設定やWordPress用のログインユーザーを作成してインストールを完了させます。https://IPアドレス/install.phpです。

インストールが無事に完了するとログイン画面に遷移できます。

インストール後はinstall.phpは削除しておきます。

MFA(多要素認証)を有効にする

AWSで必ずやっておきたい多要素認証の設定方法を紹介します。

AWSではセキュリティ強化のために必ずMFA(多要素認証)を設定しましょう。AWSアカウントのルートユーザーとIAMユーザーでMFAを設定することができます。設定も簡単です。

ざっくりMFAとは?

MFAとは、一般的なログイン認証情報であるユーザー名とパスワードに加えて、もう1つ(1つ以上)の認証要素を加え、ユーザに対してこの2つ以上の認証要素を要求し認証する方法です。

今回は追加の認証要素としてワンタイムパスワード(OTP)を追加します。ワンタイムパスワードは6桁の数字となり、受信方法はSMSやメールといったケースも多いですが、私は1Password8で保存してワンタイムパスワードを管理しています。

2FAとの違いは?

ちなみに、2FAという単語もよく見かけますが2FAとは「2要素認証」です。2FAは2つの要素で認証する方法ですが、MFAは2つ以上の要素を設定し認証する方式です。

それではAWSのMFAを有効にしましょう。

AWSでワンタイムパスワードを追加する手順

以下のAWS公式ドキュメントを参考にMFAを有効にします。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_checking-status.html

  1. STEP

    IAM コンソールにアクセス

    AWS Management Console にサインインし、IAM コンソールにアクセスします。

    IAMコンソール:https://console.aws.amazon.com/iam/

  2. STEP

    セキュリティ認証情報をクリック

    右上のナビゲーションバーでユーザー名を選択し、セキュリティ認証情報をクリックします。

  3. STEP

    MFAが有効か無効かを確認

    MFAが有効でない場合は下の画像のようにアラートが出ています。

  4. STEP

    MFAを割り当てる

    では実際にMFAを割り当て設定します。

  5. STEP

    MFAデバイスを選択

    今回は1Password8でワンタイムパスワードを管理するので「Authenticator app」を選択します。デバイス名にはわかりやすい名前をつけます。(なんでも構いません)

  6. STEP

    デバイスの設定

    QRコードを表示して、1Password8でスキャンします。

    1Password8では、ワンタイムパスワードの項目を追加して下の画像のようにスキャンします。

  7. STEP

    MFAコードを2つ入力しMFAを追加する

    1Password8の追加したワンタイムパスワードの項目に表示された6桁のコードを入力し、最大30秒後に新しいコードが生成されるのでそれを入力します。

    これでMFAを追加することができました。

最後に

最後まで読んでいただきありがとうございます。今回の【AWS】EC2とRDSでwordpressをセットアップする【RDS編】はいかがでしたでしょうか。

次回はAWSのS3にWordPressをバックアップする方法を紹介します。

MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。

初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。

定番おすすめ記事

EC2とRDSでwordpressをセットアップするシリーズです。

カテゴリー:
関連記事