Amazon Linux2023×RDS×NginxでWordPressをインストールしてみた

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

こんにちは、25卒新卒の辻野です。

7月からOJT(On the Job Training)と模擬案件(営業~開発までの実際の案件の流れを1人で担当するもの)が始まり、本格的にAWSに触れる機会が増えてきて入社前よりもAWSに魅力を感じるようになりました。
今回は、模擬案件で躓いたWordPressインストールについて記事で取り上げようと思います。

チュートリアル: AL2023 で WordPress ブログをホストする - Amazon Linux 2023ではApache向けの手順となっているため、本記事ではNginxを使いたい方のためのWordPressのインストール手順を説明します!

前提条件

今回作成するものは以下の構成図の通りです。 最終的にWordPressのインストール画面が表示されるまでの流れを説明していきます。

VPCやサブネット、ルートテーブル、Internet Gateway、NAT Gatewayについてはすでに作成されているものとします。 また、ドメインの取得とRoute53やACMの設定は既に完了しているものとします。

セキュリティグループの作成

ALBセキュリティグループ(scg-test-alb)

インバウンドルール

プロトコル ポート ソース
tcp 443 0.0.0.0/0

アウトバウンドルール

プロトコル ポート 送信先
すべて すべて 0.0.0.0/0

EC2セキュリティグループ(scg-test-ec2)

インバウンドルール

プロトコル ポート ソース
tcp 80 scg-test-alb

アウトバウンドルール

プロトコル ポート 送信先
すべて すべて 0.0.0.0/0

RDSセキュリティグループ(scg-test-rds)

インバウンドルール

プロトコル ポート ソース
tcp 3306 scg-test-ec2

アウトバウンドルール

プロトコル ポート 送信先
すべて すべて 0.0.0.0/0

DBインスタンスの作成

設定
DBエンジン MySQL
エンジンバージョン MySQL 8.4.6
デプロイオプション シングルAZ DB インスタンスデプロイ
DB インスタンス識別子 test-db
マスターユーザー名 admin
DBインスタンスクラス db.t3.micro
ストレージタイプ 汎用 SSD(gp3)
ストレージ割り当て 20GiB
セキュリティグループ scg-test-rds

EC2インスタンスの作成

IAMロールの作成(EC2_SSM_Role)

SSM接続を行うため、事前にIAMロールを作成します。
【参考資料】Session Manager を使用して Amazon EC2 インスタンスに接続 - AWS 規範ガイダンス

設定
信頼されたエンティティタイプ AWSのサービス
ユースケース EC2
許可ポリシー AmazonSSMManagedInstanceCore

EC2インスタンス

設定
OS Amazon Linux2023
インスタンスタイプ t2.micro
セキュリティグループ scg-test-ec2
ストレージタイプ gp3
ボリュームサイズ 8Gib

IAMロールの追加

インスタンス起動後に作成したIAMロールを追加します。

  • アクションセキュリティIAMロールを変更

  • EC2_SSM_RoleIAMロールの更新

ALBの作成

Target Group (tg-test)

設定
ターゲットタイプ インスタンス
プロトコル HTTP
ポート 80
プロトコルバージョン HTTP1
ヘルスチェックプロトコル HTTP
ヘルスチェックパス /

ALB

設定
ロードバランサータイプ Application Load Balancer
スキーム インターネット向け
IPアドレスタイプ IPv4
サブネット パブリックサブネット
セキュリティグループ scg-test-alb
リスナー HTTPS/443
ターゲットグループ tg-test

インストール作業

今回は、SSMのセッションマネージャーから接続して行います。

各種インストール(Nginx/Maria DB/PHP)

# パッケージの最新化
sudo dnf update -y

# Nginxのインストール
sudo dnf -y install nginx

# Maria DBパッケージインストール
sudo dnf install mariadb105 -y

# PHPインストール
sudo dnf install -y php-fpm php-mysqli php-json php php-devel

server箇所の変更

NginxはApachと違い、PHPを実行するためにNginxの設定ファイルを修正する必要があります。
私はApach同様にここの設定を修正をせずに、WordPressをインストールしてしまい上手く表示されず躓いてしまいました。こちらの設定の修正作業をを必ず行いましょう!

# Nginxの設定編集
sudo vim /etc/nginx/nginx.conf

修正前

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

修正後

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location ~ \.php$ {
            root         /usr/share/nginx/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;

        }
    }

Nginxの起動,自動起動設定

sudo systemctl start nginx
sudo systemctl enable nginx

WordPressインストール

cd /home/ssm-user/
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz

wp-includes/load.phpファイル編集

httpsでアクセスしたときにページが崩れるのを防ぐためにfunction is_ssl()内に以下を追加します。

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

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';
        }
        if ( isset( $_SERVER['HTTPS'] ) ) {
                if ( 'on' === strtolower( $_SERVER['HTTPS'] ) ) {
                        return true;
                }

                if ( '1' === (string) $_SERVER['HTTPS'] ) {
                        return true;
                }
        } elseif ( isset( $_SERVER['SERVER_PORT'] ) && ( '443' === (string) $_SERVER['SERVER_PORT'] ) ) {
                return true;
        }

        return false;
}

DB設定

wordpress-userwordpress-dbyour_strong_passwordを任意の値に変更してください。

 # 接続
mysql -h <RDSエンドポイント> -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;

# 終了
exit

WordPressの設定

wp-config.phpファイルの編集をします。

# wp-config.phpファイルの作成 (コピー)
cp wordpress/wp-config-sample.php wordpress/wp-config.php

# 編集
sudo vim wordpress/wp-config.php

先ほどのDB設定で設定した内容に書き換えます。 また、Datebase hostnameはRDSエンドポイントに書き換えます。

define( 'DB_NAME', 'wordpress-db' );

/** Database username */
define( 'DB_USER', 'wordpress-user' );

/** Database password */
define( 'DB_PASSWORD', 'your_strong_password' );

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

/user/share/nginx/htmlへ移動

sudo mv wordpress/* /usr/share/nginx/html/

ファイルの許可設定

# Nginxユーザーとグループに所有権を設定
sudo chown -R nginx:nginx /usr/share/nginx/html

# /usr/share/nginx/htmlとサブディレクトリ、ファイルの書き込み許可設定
sudo chmod 2775 /usr/share/nginx/html
sudo find /usr/share/nginx/html -type d -exec chmod 2755 {} \;
sudo find /usr/share/nginx/html -type f -exec chmod 0644 {} \;

# Nginx再起動
sudo systemctl restart nginx

動作確認

https://<ドメイン名>/wp-login.phpでインストール画面にアクセスできれば成功です!

辻野 美紗(執筆記事の一覧)

2025年度新卒入社。最近の悩みは運動不足