こんにちは、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でレイアウトが崩れてしまうのはあるあるのようですね、、
参考になれば幸いです。
篠﨑 勇輔(書いた記事を見る)
クラウドインテグレーション部 SA1課