💪

【初心者向け】だんだん強くなるWordPressサイト構築 Lv2

2022/08/18に公開

はじめに

こんにちは! 川名(政)です。
前回はVPCの作成やEC2インスタンスの作成など実施しましたが、今回はサーバ内で作業を行います。WordPressのインストールまで進めますので、お付き合いよろしくお願いいたします!

概要

  1. 構成の確認
  2. Elastic IPアドレスの割り当て(踏み台サーバ,Webサーバ)
  3. 踏み台サーバへの接続
  4. Webサーバへの接続
  5. Apacheのインストール(Webサーバ)
  6. PHPのインストール(Webサーバ)
  7. データベース用サーバへの接続
  8. MySQLのインストール(データベース用サーバ)
  9. WordPressのインストール(Webサーバ)

事前準備

  • AWSアカウント作成
  • AdministratorAccessを付与したIAMユーザーの作成
  • 前回までの構成

1. 構成の確認

今回は構成に変更はありません。

構成図 - WordPressサイト Lv2

※構築は大阪リージョン(ap-northeast-3)で行っています

まずは今回の目標であるWordPressの実行する要件を確認してみましょう。

PHP バージョン 7.4 以上。
MySQL バージョン 5.7 以上、または MariaDB バージョン 10.3 以上。
HTTPS 対応

Webサーバソフトも必要なのでApacheも追加します。

Nginx または mod_rewrite モジュールありの Apache

2. Elastic IPアドレスの割り当てと関連付け(踏み台サーバ,Webサーバ)

インターネット上から踏み台サーバへ接続できるようにElastic IPアドレスを割り当て(取得)し、踏み台サーバへ関連付けます。
またWebサーバにもWordPressサイトとしてインターネット上からHTTPアクセスできるようにElastic IPアドレスを関連付けます。

EC2のページでナビゲーションペインの[Elastic IP]を選択し、右上の[Elastic IP アドレスを割り当てる]をクリック。

下記を設定し[割り当て]をクリック。

  • Elastic IP アドレスの設定: [Amazon の IPv4 アドレスプール]を選択
  • タグ: ※任意で設定

Elastic IP アドレスが割り当てられました。続けて右上にある[このElastic IP アドレスを関連付ける]をクリック。

下記を設定し[関連付ける]をクリック。

  • リソースタイプ: 「インスタンス」を選択
  • インスタンス: 踏み台サーバのEC2インスタンスを選択

踏み台サーバのEC2インスタンスにElastic IP アドレスが関連付けられました!

同じ手順でWebサーバのEC2インスタンス用にElastic IPの割り当てと関連付けを行います。

3. 踏み台サーバへの接続

今回はサーバへの接続にRLoginというSSHクライアントソフトウェアを利用します。
また、踏み台サーバ経由でWebサーバやデータベース用サーバへ接続をするためSSHポートフォワーディングという機能の設定をしておきます。

※SSHクライアントソフトの使い方やSSHポートフォワーディング機能については、各情報サイトをご参照ください

踏み台サーバにSSH接続します。接続に成功すると下記のような画面が表示されます。

初回の接続なのでyumパッケージの更新をしておきます。
・yum パッケージの更新

$ sudo yum -y update

・サーバの再起動

$ sudo reboot

踏み台サーバについてはこれだけです。
続けてSSHポートフォワーディング機能でWebサーバへ接続します。

4. Webサーバへの接続

Webサーバへは踏み台サーバ経由で接続するため、踏み台サーバの接続は切断せず新しくWebサーバへの接続を開始します。
接続に成功すると、踏み台サーバと同様に下記のような画面が表示されます。

接続ユーザーの@以降がWebサーバのプライベートIPアドレスになっているはずです。
もし表示されているIPアドレスがWebサーバのものと違っていたら、AWSマネジメントコンソールに戻って確認しましょう。

参考 - EC2インスタンスのプライベートIPアドレス確認

Webサーバもyumパッケージの更新をしておきます。
・yum パッケージの更新

$ sudo yum -y update

・サーバの再起動

$ sudo reboot

作業を進める前にWordPressの実行する要件を再確認しておきます。
Webサーバに必要なものは以下となります。

PHP バージョン 7.4 以上。
Nginx または mod_rewrite モジュールありの Apache
HTTPS 対応

※HTTPS対応については次回実施します

5. Apacheのインストール(Webサーバ)

以下の流れでApacheのインストールと必要な設定を行います。
※コマンド実行結果は必要な箇所のみ抜粋しています

・Apache のインストール

$ sudo yum -y install httpd
Installed:
  httpd.x86_64 0:2.4.54-1.amzn2                                                                                                                                         
Dependency Installed:
  apr.x86_64 0:1.7.0-9.amzn2                     apr-util.x86_64 0:1.6.1-5.amzn2.0.2       apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2       generic-logos-httpd.noarch 0:18.0.0-4.amzn2      
  httpd-filesystem.noarch 0:2.4.54-1.amzn2       httpd-tools.x86_64 0:2.4.54-1.amzn2       mailcap.noarch 0:2.1.41-2.amzn2               mod_http2.x86_64 0:1.15.19-1.amzn2.0.1 
  
Complete!

・Apache のバージョン確認

$ httpd -v
Server version: Apache/2.4.54 ()

Apache公式サイトを確認すると現時点では最新バージョンになっています。

・Apache の起動

$ sudo systemctl start httpd

・Apache の自動起動設定

$ sudo systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

・Apache の自動起動設定の確認

$ systemctl is-enabled httpd
enabled

・Apache の状態を確認

$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) 

・mod_rewrite モジュールがロードされているか確認

$ httpd -t -D DUMP_MODULES | grep rewrite_module
rewrite_module (shared)

mod_rewriteがロード済みであることを確認できました。

補足ですがconf.modules.d配下の00-base.confにmod_rewrite.soを読み込む記述があり、
httpd.conf内の記述でconf.modules.d配下の設定ファイルを読み込んでいます。

$ less /etc/httpd/conf.modules.d/00-base.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so

$ ls -l /etc/httpd/modules/ | grep mod_rewrite.so
-rwxr-xr-x 1 root root  68976 mod_rewrite.so

$ less /etc/httpd/conf/httpd.conf
...(省略)
Include conf.modules.d/*.conf

これでApacheのインストール作業が完了しました。
次はPHPのインストールを行います。

6. PHPのインストール(Webサーバ)

「PHP バージョン 7.4 以上」が必要なため、yumリポジトリのPHPバージョンを確認します。
※コマンド実行結果は必要な箇所のみ抜粋しています

$ yum list php
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Available Packages
php.x86_64                                                         5.4.16-46.amzn2.0.2 

yumリポジトリのPHPパッケージはバージョンが「5.4.16」で要件を満たしていません。
amazon-linux-extrasリポジトリを確認してみます。

・amazon-linux-extrasリポジトリを確認

$ amazon-linux-extras list | grep php
 42  php7.4                   available    [ =stable ]
 51  php8.0                   available    [ =stable ]

PHP8.0があるのでamazon-linux-extrasリポジトリからインストールします。

・amazon-linux-extrasリポジトリのPHP8.0を有効化

$ sudo amazon-linux-extras enable php8.0
 51  php8.0=latest            enabled      [ =stable ]

Now you can install:
 # yum clean metadata
 # yum install php-cli php-pdo php-fpm php-mysqlnd

リポジトリのPHP8.0がavailable(利用可能)からenabled(有効)になりインストール可能になりました。

・amazon-linux-extrasリポジトリからPHP8.0をインストール

$ sudo amazon-linux-extras install php8.0
Installed:
 php-cli.x86_64 0:8.0.20-1.amzn2      php-fpm.x86_64 0:8.0.20-1.amzn2      php-mysqlnd.x86_64 0:8.0.20-1.amzn2      php-pdo.x86_64 0:8.0.20-1.amzn2     

Dependency Installed:
 libzip.x86_64 0:1.3.2-1.amzn2.0.1                                          php-common.x86_64 0:8.0.20-1.amzn2                                         

Complete!

・PHP のバージョン確認

$ php --version
PHP 8.0.20 (cli) (built: Jun 23 2022 20:34:07) ( NTS )

PHP8.0のインストールが完了しました!

7. データベース用サーバへの接続

次はデータベース用サーバへ接続します。踏み台サーバからSSHポートフォワーディングで接続します。
※コマンド実行結果は必要な箇所のみ抜粋しています

サーバへ接続後はyumパッケージの更新をしておきます。
・yum パッケージの更新

$ sudo yum -y update

・サーバの再起動

$ sudo reboot

8. MySQLのインストール(データベース用サーバ)

WordPressに必要なMySQLバージョンは5.7以上となります。

MySQL バージョン 5.7 以上、または MariaDB バージョン 10.3 以上。

※コマンド実行結果は必要な箇所のみ抜粋しています

・yumリポジトリのMySQLを確認

$ yum list mysql
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Error: No matching Packages to list

MySQLのパッケージは無いようです。
amazon-linux-extrasリポジトリも確認してみます。

$ amazon-linux-extras list | grep mysql
(※候補なし)

amazon-linux-extrasリポジトリにも無いため、MySQL Yumリポジトリからインストールします。

今回はMySQLバージョン8.0のRed Hat Enterprise Linux 7向けを選択します。

・MySQL Yumリポジトリの追加

$ sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
Installed:
  mysql80-community-release.noarch 0:el7-6                                                                                                               
Complete!

・MySQLのインストール

$ sudo yum -y install mysql-community-server
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022

GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022"

「GPG keyの取得に失敗しました」というエラーが出ました。
MySQL公式サイトのマニュアルによると、MySQLのインストール前にダウンロードしたパッケージが改ざんされていないかの確認が必要なようです。

After downloading the MySQL package that suits your needs and before attempting to install it, make sure that it is intact and has not been tampered with.
ニーズに合った MySQL パッケージをダウンロードした後、インストールする前に、パッケージがそのままで、改ざんされていないことを確認します。

マニュアルの関連項目に記載されているコマンドを参考にrpmコマンドでGPG keyをインポートします。

Alternatively, rpm also supports loading the key directly from a URL:
あるいは、rpm は URL から直接キーをロードすることもサポートしています。

・GPG keyのインポート

$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

・MySQLのインストール(再実行)

$ sudo yum -y install mysql-community-server
Installed:
  mysql-community-server.x86_64 0:8.0.30-1.el7                                                                                                           
Dependency Installed:
  mysql-community-client.x86_64 0:8.0.30-1.el7                           mysql-community-client-plugins.x86_64 0:8.0.30-1.el7                           
  mysql-community-common.x86_64 0:8.0.30-1.el7                           mysql-community-icu-data-files.x86_64 0:8.0.30-1.el7                           
  mysql-community-libs.x86_64 0:8.0.30-1.el7                             ncurses-compat-libs.x86_64 0:6.0-8.20170212.amzn2.1.3                          

Complete!

・MySQLのバージョン情報

$ mysqld --version
/usr/sbin/mysqld  Ver 8.0.30 for Linux on x86_64 (MySQL Community Server - GPL)

・MySQL Serverの起動

$ sudo systemctl start mysqld

・MySQL Serverの状態確認

$ systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running)

・MySQL Serverの自動起動設定

$ sudo systemctl enable mysqld

・MySQL Serverの自動起動設定の確認

$ systemctl is-enabled mysqld
enabled

・MySQLの初期パスワードの確認

$ sudo grep 'temporary password' /var/log/mysqld.log
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <MySQLの初期パスワードが表示されます>

・MySQLのセットアップ

$ mysql_secure_installation
Securing the MySQL server deployment.

Enter password for user root: <MySQLの初期rootパスワードを入力>

The existing password for the user account root has expired. Please set a new password.

New password: <新しいMySQLのrootパスワードを入力>

Re-enter new password:  <新しいMySQLのrootパスワードを再入力>

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 

・MySQLへ接続

$ mysql -u root -p
Enter password: ※MySQL rootパスワードを入力

・MySQLにWordPress用のデータベース作成

mysql> CREATE DATABASE `wordpress-db`;
Query OK, 1 row affected (0.01 sec)

データベース名: wordpress-db

・MySQLにWordPress用のユーザー作成

mysql> CREATE USER wordpress@'%' IDENTIFIED BY '<ユーザー用パスワード>';
Query OK, 0 rows affected (0.01 sec)

今回は以下の情報でMySQLのユーザーを作成しています。
ユーザー名: wordpress
ホスト名: % ※任意のホスト

・作成したユーザーの確認

mysql> SELECT user,host FROM mysql.user;
+------------------+------------+
| user             | host       |
+------------------+------------+
| wordpress        | %          |
| mysql.infoschema | localhost  |
| mysql.session    | localhost  |
| mysql.sys        | localhost  |
| root             | localhost  |
+------------------+------------+

ユーザー「wordpress」が作成されていることが確認できました。

・作成したユーザーにデータベースへのアクセス権限を付与

mysql> GRANT ALL PRIVILEGES ON `wordpress-db`.* TO wordpress@'%';
Query OK, 0 rows affected (0.00 sec)

・変更した権限を反映

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

※ユーザの作成や権限付与には不要なコマンドですが、ユーザの削除をした場合などに必要となるため記載しております

・MySQLからログアウト

mysql> QUIT
Bye

次はWebサーバでWordPressのインストールを行います。

9. WordPressのインストール(Webサーバ)

・Webサーバ用のセキュリティグループ変更(アクセス許可の制限)
Webサーバに自分だけWebブラウザでアクセスできるように変更します。

VPCのページへ移動し、Webサーバ用のセキュリティグループを選択します。
画面下に詳細が表示されるので[インバウンドルール]タブをクリックし、
右側の[インバウンドルールの編集]をクリックします。

タイプが「HTTP」ルールのソースを[マイIP]に変更します。
自動で現在利用している端末のグローバルIPアドレスが入力されます。

念のため確認くんなどでグローバルIPアドレスが一致することを確認し、間違いなければ[ルールを保存]をクリックします。

保存後にWebサーバのセキュリティグループの[インバウンドルール]タブをクリックして、ソースが利用している端末のグローバルIPアドレスになっていれば変更作業は完了です。

・WordPressのインストール
Webサーバへ接続しWordPressのインストールと設定を行います。
※コマンド実行結果は必要な箇所のみ抜粋しています

・WordPress のダウンロード

$ wget https://wordpress.org/latest.tar.gz
100%[===============================================================================================================>] 21,171,263  9.95MB/s   in 2.0s   

2022-08-15 07:34:49 (9.95 MB/s) - ‘latest.tar.gz’ saved [21171263/21171263]

・ダウンロードしたWordPressの展開

$ tar -xzf latest.tar.gz
$ ls -l
total 20680
-rw-rw-r-- 1 ec2-user ec2-user 21171263 Jul 12 16:17 latest.tar.gz
drwxr-xr-x 5 ec2-user ec2-user     4096 Jul 12 16:16 wordpress

・WordPressの設定ファイルのコピー

$ cp wordpress/wp-config-sample.php wordpress/wp-config.php

・WordPressの設定ファイルの編集

$ vi wordpress/wp-config.php

※以下の項目を設定します
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'MySQLデータベース名(wordpress-db)' );

/** MySQL database username */
define( 'DB_USER', 'MySQLユーザー名(wordpress)' );

/** MySQL database password */
define( 'DB_PASSWORD', '<MySQLユーザーのパスワード>' );

/** MySQL hostname */
define( 'DB_HOST', '<データベースサーバのプライベートIPアドレス>' );

・WordPressのファイルをApache のドキュメントルートにコピー

$ sudo cp -R wordpress/* /var/www/html/

・WebブラウザでWordPressのインストールスクリプトを起動
WebブラウザでWordPressの「install.php」へアクセスします。
http://<WebサーバのグローバルIPアドレス>/wp-admin/install.php
※WebサーバのグローバルIPアドレスはElastic IP アドレスで取得したIPアドレスです

まず言語選択画面が表示されるので[日本語]を選択し[次へ]をクリック。

次の画面で以下を設定します。

  • サイトのタイトル
  • WordPressユーザー名
  • WordPressユーザーのパスワード
  • メールアドレス
  • 検索エンジンでの表示

設定が完了したら[WordPressをインストール]をクリック。

WordPressのインストールが完了しました!

左下の[ログイン]をクリックして、先ほど設定したWordPressユーザーでWordPressサイトの管理画面にログインしてみます。


WordPressの管理画面へログインできることが確認できました。

・Webサーバ用のセキュリティグループ変更(アクセス許可の制限解除)
WordPressの設定が完了したため、Webサーバ用のセキュリティグループの内容を元に戻します。
手順は本項の始めと同じように[インバウンドルールの編集]を行い、タイプが「HTTP」ルールのソースを[マイIP]から[Anywhere-IPv4(0.0.0.0/0)]に変更します。

[ルールを保存]した後にWebサーバ用のセキュリティグループの[インバウンドルール]タブをクリックして、ソースが「0.0.0.0/0」になっていれば完了です。

さいごに

次回はSSL/TLSサーバ証明書のインストールを実施したいと思います。
よろしくお願いいたします!

MEGAZONE株式会社 Tech Blog

Discussion