【初心者向け】だんだん強くなるWordPressサイト構築 Lv2
はじめに
こんにちは! 川名(政)です。
前回はVPCの作成やEC2インスタンスの作成など実施しましたが、今回はサーバ内で作業を行います。WordPressのインストールまで進めますので、お付き合いよろしくお願いいたします!
概要
- 構成の確認
- Elastic IPアドレスの割り当て(踏み台サーバ,Webサーバ)
- 踏み台サーバへの接続
- Webサーバへの接続
- Apacheのインストール(Webサーバ)
- PHPのインストール(Webサーバ)
- データベース用サーバへの接続
- MySQLのインストール(データベース用サーバ)
- 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サーバ証明書のインストールを実施したいと思います。
よろしくお願いいたします!
Discussion