Amazon Linux 2でWordPressブログのホストチュートリアルをやってみた - サーバーワークスエンジニアブログ

Amazon Linux 2でWordPressブログのホストチュートリアルをやってみた

記事タイトルとURLをコピーする

こんにちは、SRE2課の篠﨑です。

Amazon Linux 2でWordPressを入れる機会がありましたので、「チュートリアル: Amazon Linux 2 での WordPress ブログのホスト 」をやってみたいと思います。

今回は、前述のチュートリアル + RDS + ALB + ドメイン取得 + Route53の設定を行い、HTTPSでWordPressブログを閲覧できるようにしたいと思います。

前提条件

今回作成するものは下記構成図の通りです。

f:id:swx-shinozaki:20220225175244p:plain
構成図

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名を取得し、ブラウザから検索します。

f:id:swx-shinozaki:20220224153113p:plain

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

f:id:swx-shinozaki:20220224153229p:plain

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のインストール画面に到達することを確認します。

f:id:swx-shinozaki:20220225103521p:plain

ユーザー名、メールアドレスなどを記載します。

パスワードはログインで使用するので、メモしておきましょう。

作成後、作成したユーザーでログインします。

f:id:swx-shinozaki:20220225103732p:plain

ダッシュボードが出れば完成です。

ドメイン取得

今回は、freenomからドメインを取得します。 登録して、フリーのドメインを取得してください。

Freenom - 誰でも利用できる名前

こちらのページから取得したいドメインを検索します

Freenom - A Name for Everyone

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でレイアウトが崩れてしまうのはあるあるのようですね、、

参考になれば幸いです。

篠﨑 勇輔(書いた記事を見る)

クラウドインテグレーション部 SA1課