こんにちは、SRE2課の篠﨑です。
Amazon Linux 2でWordPressを入れる機会がありましたので、「チュートリアル: Amazon Linux 2 での WordPress ブログのホスト 」をやってみたいと思います。
今回は、前述のチュートリアル + RDS + ALB + ドメイン取得 + Route53の設定を行い、HTTPSでWordPressブログを閲覧できるようにしたいと思います。
- 前提条件
- やってみる
- 最後に
前提条件
今回作成するものは下記構成図の通りです。

VPCやサブネット、Route Table、Internet Gateway、NAT Gatewayについてはすでに作成されているものとします。
やってみる
最終的にHTTPSでブログ画面が出せるようになることを目標にやっていきます。
Security Groupの作成
for RDS
グループ名: test-db
インバウンドルール
| Source | Port |
|---|---|
| test-wordpress | 3306 |
アウトバウンドルール
| Destination | Port |
|---|---|
| 0.0.0.0/0 | -1 |
for EC2
グループ名: test-wordpress
インバウンドルール
| Source | Port |
|---|---|
| test-alb | 443 |
| test-alb | 80 |
アウトバウンドルール
| Destination | Port |
|---|---|
| 0.0.0.0/0 | -1 |
for ALB
グループ名: test-alb
インバウンドルール
| Source | Port |
|---|---|
| 0.0.0.0/0 | 443 |
| 0.0.0.0/0 | 80 |
アウトバウンドルール
| Destination | Port |
|---|---|
| 0.0.0.0/0 | -1 |
RDSの作成
設定したパラメータは以下の通りです。
| 設定 | 値 |
|---|---|
| DB エンジン | MySQL |
| バージョン | MySQL 8.0.27 |
| DB インスタンス識別子 | test-db |
| DBインスタンスクラス | db.t2.micro |
| ストレージタイプ | gp2 |
| スケーリング | 有効にしない |
| マルチAZ | なし |
| パブリックアクセス | なし |
| セキュリティグループ | test-rds |
| ポート | 3306 |
その他パラメータについては必要に応じて設定してください。
Amazon Linux 2 (EC2) の作成
| 設定 | 値 |
|---|---|
| OS | Amazon Linux 2 |
| インスタンスタイプ | t2.micro |
| IAM ロール | AmazonSSMManagedInstanceCore (AWS Managed Policy) が付いたロール |
| ストレージタイプ | gp2 |
| ボリュームサイズ | 8GiB |
| セキュリティグループ | test-wordpress |
ALBの作成
Target Group (test-tg)
| 設定 | 値 |
|---|---|
| ターゲットタイプ | インスタンス |
| プロトコル | HTTP |
| ポート | 80 |
| プロトコルバージョン | HTTP1 |
| ヘルスチェックプロトコル | HTTP |
| ヘルスチェックパス | / |
ALB
| 設定 | 値 |
|---|---|
| ロードバランサータイプ | Application Load Balancer |
| スキーム | インターネット向け |
| IPアドレスタイプ | IPv4 |
| サブネット | パブリックサブネット |
| ターゲットグループ | test-tg |
インストール作業等
今回は、SSMのセッションマネージャーから接続して行います。
こちらはチュートリアル: Amazon Linux 2 での WordPress ブログのホストを参考にしています。
初めにチュートリアル: Amazon Linux 2 に LAMP ウェブサーバーをインストールするの設定を行っていきます。
LAMPウェブサーバーをインストール
チュートリアルの通りに進めていきます。
yumのアップデート、必要なサービスのインストールを先に行います。
sudo yum update -y sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 # Apache, Maria DBのインストール sudo yum install -y httpd mariadb-server
Apache、MariaDBのスタート、自動起動
sudo systemctl start httpd sudo systemctl enable httpd
EC2コンソールからALBのDNS名を取得し、ブラウザから検索します。

Apacheのページが出れば成功です。

WordPressのインストールと設定
WordPressのパッケージダウンロードを行い、解凍します
cd /home/ssm-user/ wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz
MariaDBを起動し、DBユーザーとDBを作成します
sudo systemctl start mariadb sudo systemctl enable mariadb
DB設定
RDSに接続し、操作します
# 接続 mysql -h test-db.***********.ap-northeast-1.rds.amazonaws.com -P 3306 -u admin -p # DBユーザー作成 CREATE USER 'wordpress-user' IDENTIFIED BY 'your_strong_password'; # DB作成 CREATE DATABASE `wordpress-db`; # DBに対してユーザーの権限を付与 GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"; # 変更を有効にする FLUSH PRIVILEGES; # 作成後、RDSから出ます exit
WordPressの設定
wp-config.phpファイルの編集をします
# wp-config.phpファイルの作成 (コピー) cp wordpress/wp-config-sample.php wordpress/wp-config.php # 編集 vim wordpress/wp-config.php
先ほど、設定したRDS内のDBユーザーやDBなどについて設定します。
以下部分を設定した内容に書き換えてください
define('DB_NAME', 'wordpress-db');
define('DB_USER', 'wordpress-user');
define('DB_PASSWORD', 'your_strong_password');
次にwordpress/内にあるすべてを/var/www/html/に移行します
sudo cp -r wordpress/* /var/www/html/
ファイルの許可設定を修正する
WordPressの機能の中には、Apacheドキュメントルートへの書き込み権限が必要なものがありますので、 権限関係の設定を行います。
# /var/www とそのコンテンツの所有権をapacheユーザーに付与
sudo chown -R apache /var/www
# /var/www とそのコンテンツの所有権をapacheグループに付与
sudo chgrp -R apache /var/www
# /var/wwwとサブディレクトリ、ファイルの書き込み許可設定
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
# Apacheを再起動して新しいグループと許可を有効化
sudo systemctl restart httpd
WordPress内でログイン
ALBのDNS名をブラウザで検索し、WordPressのインストール画面に到達することを確認します。

ユーザー名、メールアドレスなどを記載します。
パスワードはログインで使用するので、メモしておきましょう。
作成後、作成したユーザーでログインします。

ダッシュボードが出れば完成です。
ドメイン取得
今回は、freenomからドメインを取得します。 登録して、フリーのドメインを取得してください。
こちらのページから取得したいドメインを検索します
Route 53の設定
Route 53にドメインの登録をします。
ホストゾーンの作成を行い、取得したドメイン名を記載します。 タイプはパブリックホストゾーンです。
次に、レコードの作成を行います。
| 設定 | 設定値 |
|---|---|
| レコード名 | blog.(取得したドメイン名) |
| レコードタイプ | A |
| 値 | ※{test-albのエイリアス} |
| ルーティングポリシー | シンプルルーティング |
※ ALBのエイリアスはコンソール上「エイリアス」ボタンを押すと検索可能です。
blog.{取得したドメイン名} をブラウザから検索してWordPressの画面が出れば成功です。
HTTPSの設定
証明書の設定
AWSマネジメントコンソールよりCertificate Managerページへ遷移します。
証明書一覧ページより「リクエスト」をクリックし、以下情報を入れます。
| 設定 | 値 |
|---|---|
| 証明書タイプ | パブリック証明書をリクエスト |
| 完全修飾ドメイン名 | {取得したドメイン} |
| 追加するドメイン | *.{取得したドメイン} |
| 検証方法 | DNS検証 |
作成後、「Route 53でレコード作成」をクリックし、対象のドメインを選択し、「レコードを作成」をクリックします。
Route 53コンソールにて対象のホストゾーンにCNAMEレコードが入っていることを確認します。
ALBの設定
対象のALBにリスナーの追加をします。
| 設定 | 値 |
|---|---|
| プロトコル | HTTPS |
| ポート | 443 |
| アクション | 転送 |
| セキュリティポリシー | ELBSecurityPolicy-2016-08 |
| SSL証明書 | ACMから/作成した証明書を選択 |
次に、WordPressダッシュボードから、ブログのリンクを設定します。
「Settings」> 「General」へ遷移し、Site AddressとWordPress Addressを以下のようにします。
https://blog.{取得したドメイン}
このままhttps://{ALBのDNS名またはドメイン名} でアクセスしても崩れたページとなってしまいます。
その対策として、wp-includes/load.phpファイルを編集します。
以下のような文をfunction is_ssl()内に追加し、HTTPSにリダイレクトすることを防ぎます
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}
↓最終的にこんな感じです
function is_ssl() {
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) {
$_SERVER['HTTPS']='on';
}
これでレイアウトもちゃんと見れました!!
最後に
これで一旦WordPressをホストすることができました!
基本的にチュートリアル通りですが、ALBやRDSとの連携、独自ドメインの取得などチュートリアルから少し応用して行ってみました。
調べていてわかったのですが、 最後のHTTPSでレイアウトが崩れてしまうのはあるあるのようですね、、
参考になれば幸いです。
篠﨑 勇輔(書いた記事を見る)
クロスインダストリー本部SA2課