はじめに
EC2、RDS用いたWordpressサイト構築のメモになります。
最終的にはALB経由でのオリジナルドメインアクセスを行います。
ネットワーク周り作成
VPC作成、IGW作成
・VPC作成、IGW作成後アタッチ
サブネット作成
・VPC内にパブリックサブネットx2、プライベートサブネットx2をそれぞれ別リージョンに作成
ルートテーブル作成
パブリックサブネット2つに関連づけたルートテーブル作成、デフォルトルートをIGWに向ける。
セキュリティグループ作成
Web用SG:インバウンドに対し、SSH(22番)をフルオープン
DB用SG:インバウンドに対し、MYSQL(Aurora)の3306番をソースにWeb用SGを指定
ALB用SG:インバウンドに対し、HTTP(80番)をフルオープン
EC2作成
AmazonLinux2をパブリックのリージョンaに作成。パブリックIP自動割り当て有効
SGは事前に作成したWeb用SGを指定。
Apache、MySQLインストール
作成したEC2にて以下実施
#パッケージアップデート
sudo yum update -y
#Apacheインストール
sudo yum -y install httpd
#Apacheサービス確認、起動
sudo systemctl status httpd.service
sudo systemctl start httpd.service
sudo systemctl status httpd.service
#サービス自動起動設定確認
sudo systemctl enable httpd.service
#サービス自動起動にする。(enableと出ればOK)
sudo systemctl is-enabled httpd.service
#MySQLインストール
sudo yum -y install mysql
EIP
EIPを取得、EC2にアタッチ。EIPでアクセスし、Apacheのデフォルトページの表示を確認
オリジナルドメイン設定
やる事
通常お名前.comでドメイン取得した場合の問い合わせ順序は以下
- ユーザーがブラウザにドメイン名(例:example.com)を入力。
- TLD(.com)のオーソリティDNSサーバに問い合わせ。
- ドメイン名(example.com)の情報を管理しているオーソリティDNSサーバのアドレスをリゾルバに伝える。 お名前.comが管理している場合はお名前.com提供のネームサーバのアドレスが返される。
- リゾルバは、そのネームサーバ(お名前.comが提供するDNSサーバ)に直接問い合わせを行い、ドメイン名に対応するIPアドレスを取得。
- リゾルバは取得したIPアドレスをブラウザに返し、ブラウザはそのIPアドレスのサーバにアクセス。
これに対し、AWSが管理するDNSサーバで最終的にIPを管理させたいので、 お名前.comのサイトに問い合わせた際に回答するお名前.com提供のDNSサーバを、AWSのDNSサーバに変更する。
オリジナルドメイン取得
お名前.comなどのサービスでドメインを取得
Route53でホストゾーン作成
ホストゾーン作成
NSとSOAレコードがデフォで作成される。
現時点でdigコマンドで調べると、お名前.comのネームサーバが返ってくる
$ dig murabo.net NS +short
dns1.onamae.com.
dns2.onamae.com.
NSレコードの値のアドレスをお名前.comのネームサーバ欄に転記
Aレコードを作成。IPアドレスはEC2の固定IPを指定
しばらくするとAレコードの値が返ってくる
$ dig murabo.net NS +short
ns-146.awsdns-18.com.
ns-1754.awsdns-27.co.uk.
ns-871.awsdns-44.net.
ns-1292.awsdns-33.org.
オリジナルドメインでアクセス可能になる。
RDS作成
事前準備
・プライベートサブネット2つを対象にしたサブネットグループ作成
・パラメータグループ作成(DBファミリーはmysql8.0)
・オプショングループ作成(エンジンはmysql、バージョンは8.0)
RDS作成
エンジン:MySQL
バージョン:8.0.34
可用性:シングル
最初のデータベース名:無し
VPC、サブネット、SG、パラメータグループ、オプショングループ:事前に準備したもの
他諸々は任意
EC2から接続
以下で接続可能。
$ mysql -h <RDSエンドポイント名> -u <ユーザ名> -p
Enter password: <パスワード>
接続する
$ mysql -h stg-rds-wp.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.34 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
WordPress構築
データベース作成
以下コマンドでデータベース作成
MySQL [(none)]> CREATE DATABASE <データベース名> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
今回のデータベース名はwp_db
#データベース作成
MySQL [(none)]> CREATE DATABASE wp_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
#確認
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wp_db |
+--------------------+
5 rows in set (0.00 sec)
MySQL [(none)]>
ユーザ作成、権限付与
以下コマンドで作成、権限付与
#ユーザ作成
MySQL [(none)]> CREATE USER '<ユーザ名>'@'%' IDENTIFIED BY '<パスワード>';
#権限付与
MySQL [(none)]> GRANT ALL ON <データベース名>.* TO '<ユーザ名>'@'%';
#反映
MySQL [(none)]> FLUSH PRIVILEGES;
やってみる。
#ユーザ作成
MySQL [(none)]> CREATE USER 'wp_user'@'%' IDENTIFIED BY 'wp_user_password';
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]>
#権限付与
MySQL [(none)]> GRANT ALL ON wp_db.* TO 'wp_user'@'%';
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]>
#反映
MySQL [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]>
作成したユーザで接続する
$ mysql -h stg-rds-wp.cideiipkgauo.ap-northeast-1.rds.amazonaws.com -u wp_user -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.34 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
WordPressインストール
amazon-linux-extras
ツールを使用して、PHP 7.2 とその依存関係をインストール
#amazon-linux-extras ツールを使用して、PHP 7.2 とその依存関係をインストール
$ sudo amazon-linux-extras install -y php7.2
#PHPライブラリインストール
$ sudo yum install -y php php-mbstring
#最新のWordPressファイルをダウンロードして解凍
$ cd ~
$ wget https://ja.wordpress.org/latest-ja.tar.gz
$ tar xzvf latest-ja.tar.gz
#解凍したファイルをApacheの見える場所へコピー
$ cd wordpress/
$ sudo cp -r * /var/www/html/
#権限を変更
$ sudo chown apache:apache /var/www/html/ -R
#サービスを再起動
$ sudo systemctl restart httpd.service
WordPress設定
オリジナルドメインにアクセスすると、以下URLに遷移し、WordPressの管理画面が表示される
http://<オリジナルドメイン名>/wp-admin/setup-config.php
データベース名:DB用に作成したデータベース名
ユーザ名、パスワード:DB用に作成したユーザ名とパス
ホスト名:RDSのエンドポイント名
テーブル接頭語:そのまま
送信をクリックしたら、インストール実行をクリック!
以下記載してインストールをクリック
・サイトのタイトル:任意
・ユーザ名:ログイン用。新規に定義する。接続用ユーザとは別
・パスワード:任意に設定
・メールアドレス:自分のアドレスを入力
・検索エンジンでの表示:任意。どちらでも
成功したらこの画面
ログインをクリックするとログイン用URLに遷移するので設定した情報でログイン
URL:http://<オリジナルドメイン名>/wp-login.php
ダッシュボードに遷移した。
Webサーバ冗長化
AMIからWebサーバをもう一台起動
現在稼働しているWebサーバのAMIを取得。それを基にもう一台のWebサーバを起動する
パブリックIPは自動取得とする。
ALB作成
ターゲットグループを作成の上、ALBを作成。SGは事前に作成したものを利用。
ターゲットにはWebサーバ2台を含める。
ターゲットのステータスが正常になったらELBのDNS名でのアクセスが可能。
Route53を編集
AレコードがWeb1号機のEIPになっているので、これをALBのDNS名に変更する。
これでALBのDNS名とオリジナルドメインが紐づく構成となった。
WebサーバのSG変更
EC2のIPへも直接アクセス可能な状態になっており、セキュリティ面でも負荷分散の機能的にもよろしくないので、EC2へのHTTPアクセスはELB経由のみとする設定。
EC2のHTTPアクセスのソースをALBのSGに変更する。