🍕

とりあえずWordPressをAWS EC2で動かす

2022/05/16に公開

始めに

AWS EC2上にWordPressをインストールして動かします。

DBもEC2上にMariaDBをインストールして動かします。

WordPress × AWS EC2で構築してみたい方は参考に見てみてください。

0. 構成図

1. VPC作成

とりあえずVPCを作成する。

①VPC作成

VPC > VPCを作成 > 名前タグ&CIDR設定 > VPCを作成

※名前タグは識別しやすいため設定しておくと良い

※IPv4 CIDRは以下の形で基本は問題なく使えるが規模感によって変更してもよい。[10.0.0.0/16]

2. サブネットの作成

物理的に隔離、セキュリティ上の問題対策のためVPCのみで構築することは実際あまりなくサブネットで区切って運用する必要がある。

①サブネットの作成

VPC > サブネット > サブネットを作成 > VPC選択 > サブネット名&CIDR設定 > サブネットを作成

※サブネット名は識別しやすくするため設定しておくと良い

※10.0.0.0/16でVPC領域を取っているため/24でサブネットを256分割する

3. インターネットゲートウェイ(IGW)を作成 & VPCのアタッチ

サブネットがインターネットと接続するためにインターネットゲートウェイを作成する。

①インターネットゲートウェイの作成

VPC > インターネットゲートウェイ > インターネットゲートウェイの作成 > 名前タグ設定 > インターネットゲートウェイの作成

②VPCにアタッチ

作成したインターネットゲートウェイにチェック > アクション > VPCにアタッチ > VPC選択 > イターネットゲートウェイのアタッチ

4. デフォルトゲートウェイをインターネットに向けて設定

パブリックサブネット(10.0.0.0/16)をインターネットに接続したいげ、上記手順のままだと10.0.0.0/16以外のパケットは破棄されてしまう。(ルートテーブルを確認してみてください)

そのためルートテーブルにインターネットゲートウェイに転送する設定を追加します。

※転送先が設定されていない時のデフォルトの転送先を設定する。このデフォルトの転送先をデフォルトゲートウェイと呼ぶ。

①ルートテーブルの作成

VPC > ルートテーブル > ルートテーブルを作成 > 名前&VPC設定 > ルートテーブルを作成

②ルートテーブルをサブネットに割り当て

VPC > ルートテーブル > ルートテーブルを選択 > サブネットの関連付けタブ > サブネットの関連付けを編集 > 割り当てたいサブネットを選択 > 保存

③デフォルトゲートウェイをインターネットゲートウェイに設定

VPC > ルートテーブル > ルートテーブルを選択 > ルートタブ > ルートを編集 > ルートを追加 > 送信先:0.0.0.0/0 ターゲット:igw-xxxxxxx に設定 > 変更を保存

4. EC2 仮想サーバーの構築

上記手順で作成したVPC領域に仮想サーバーをEC2を使用して構築します。

①EC2仮想サーバーの作成

EC2 > インスタンスを作成(起動) > Amazon Linux 2 AMIを選択 > インスタンスタイプをt2.microを選択 > キーペアの作成 > VPC, サブネットを作成したものを選択 > パブリックIPの自動割り当てを有効にする > ネットワークインターフェイスのプライマリIPに10.0.1.10を追加 > セキュリティグループ名を任意に変更 > インスタンスを作成(起動)

5. SSHで仮想サーバーへ接続

EC2インスタンス作成時にダウンロードしたキーペアファイルを”~/.ssh/{KEYPARE}”に保存する。

WindowsはTeraTerm等のソフト、Macはsshコマンドを使用して接続してみてください。

MACの場合以下コマンドで接続

ssh -i {key.pem} ec2-user@12.122.122.122

※接続方法については、インスタンスを選択して、アクション > 接続 > SSHクライアント を選択すると接続方法が提示されていますので確認してみてください。

6. Web Serverソフトをインストール

上記で作成した仮想サーバーへSSH接続をした状態で以下手順を進める。

①Apacheをインストールする

// -y: 全てyesにして処理を進める
sudo yum -y install httpd

②Apacheを起動する

// start:起動 stop:停止 restart:再起動
sudo systemctl start httpd.service

// インスタンスの起動時にApacheも自動で起動されるよう設定
sudo systemctl enable httpd.service

③確認

// Apacheが動いているか確認
ps -ax
ps -ax | grep httpd

// 自動起動の設定が有効か確認(enableになっているか)
sudo systemctl list-unit-files -t service

// http:80番で待ち受けているか確認(SSL:443ではないですがデフォルトは80番ですので...)
sudo lsof -i -n -P

7. 外部からアクセスできるようにセキュリティグループの設定変更

上記手順のまま進めていると、SSH, TCP, PORT22 のみ受け付けているためApacheが80番で待機していてもブロックされてしまいインスタンスまで到達できません。

現状EC2インスタンスのパブリックIPをブラウザで入力してアクセスできない状態です。

そのため、80番ポートを許可してインスタンスまで到達させる必要があります。

①セキュリティグループの編集

EC2 > セキュリティグループ > 対象のセキュリティグループ > インバウンドルールを編集 > ルールを追加(タイプポート: カスタムTCP, 範囲: 80, ソース: 0.0.0.0/0) > ルールを保存

②接続確認

EC2インスタンスのパブリックIPをブラウザで入力すると以下のようなApacheのデフォルト画面が表示されることを確認してください。

8. DNSサーバーを構成する

AWS VPCの名前解決をするオプションを使用して対応します。

①DNSサーバを構成

VPC > 対象のVPCを選択 > アクション > DNSホスト名の編集 > DNSホスト名の有効化を有効にする > 保存

②確認

VPC内に作成したEC2インスタンスのパブリックDNS、プライベートDNSを確認するとドメインが表示されています。

そのアドレスでブラウザからアクセスしても同じようにApacheのデフォルト画面が表示されることを確認してください。

※独自ドメインを使用したい場合はRoute53や、お名前ドッドコム、エックスドメイン等を使用してドメインを取得して設定する必要があります。

9. プライベートサブネットの作成

インターネットから隔離したプライベートサブネットを作成してセキュリティを高める。

DBサーバーなどを配置してインターネットから直接アクセスされないようにする。

①プライベートサブネットの作成

VPC > サブネット > サブネットを作成 > VPC選択, サブネット名, AZ, CIDR(10.0.2.0/24)を設定 > サブネットを作成

※AZはパブリックサブネットのAZを参考に同一か異なるAZを指定するかを選定する。今回は同一AZを設定しました。

※プライベートサブネットはインターネットに接続しないためルートテーブルはデフォルトで問題ない。

10. プライベートサブネットにDBサーバー用のインスタンスを生成

EC2インスタンスをプライベートサブネットに構築してMariaDBと通信させるためにセキュリティグループを設定する必要があります。

①DBサーバーの構築

EC2 > インスタンスを作成(起動) > Amazon Linux 2 AMIを選択 > インスタンスタイプをt2.microを選択 > キーペアは前回作成したものを選択 > VPC, プライベートサブネットを作成したものを選択 > パブリックIPの自動割り当てを無効にする > ネットワークインターフェイスのプライマリIPに10.0.2.10を追加 > セキュリティグループはデフォルトでSSHのみ許可しているので追加 > タイプ:MYSQL/Aurora ソース:任意の場所 PORT:3306 > インスタンスを作成(起動)

11. Webサーバーを踏み台サーバーとしてプライベートサブネットに作成したDBサーバーへSSH接続できるように設定

プライベートサブネットにDBサーバー用のEC2インスタンスを生成しましたが、インターネット接続をしていないためSSH接続することができません。(セキュリティグループでSSHを許可していますがインターネットとの接続はしていないため実質ローカルからのSSHのみ許可している状態)WebサーバーへSSH接続したようにキーペア(.pem)ファイルをWebサーバーにアップロードして、WebサーバーからDBサーバーへSSH接続できるように設定する。

①キーペア(.pem)ファイルをWebサーバーへアップロード

scp -i {key-pare}.pem {key-pare}.pem ec2-user@ec2-17-122-122-122.ap-northeast-1.compute.amazonaws.com:~/

②アップロードした秘密鍵のパーミッション400へ変更(WebServerにログインした状態)

chmod 400 {key-pare}.pem

③DBサーバー(プライベートサブネット)へSSH接続する

ssh -i {key-pare.pem} ec2-user@10.0.2.10

12. NATを構築してプライベートサブネットからインターネット接続を許可する

プライベートサブネットはローカル以外の通信を許可していません。そのため必要なソフトウェアをインターネット上からインストールすることもできないためNATを構築してプライベートサブネット→インターネットの通信を許可する。(NATは反対のインターネット→プライベートサブネットの通信を許可しない)

NATの構築にはEC2よりNAT機能付きのNATインスタンスを生成する方法と、NATゲートウェイを作成する方法がありますが今回はNATゲートウェイを使用して構築します。

※※※※※※

NATゲートウェイは作成して置くだけでお金がかかります。

停止もできませんので、不要なタイミングで削除する必要があります。

※※※※※※

①NATゲートウェイの作成

VPC > NATゲートウェイ > NATゲートウェイを作成 > 名前, サブネットにパブリックサブネットを選択, EIPを設定 > NATゲートウェイを作成

②ルートテーブルを更新

VPC > サブネット > プライベートサブネットを選択 > ルートの編集 > 送信先:0.0.0.0/0 ターゲット:nat-xxxxを選択

※プライベートサブネットはローカルへのアクセスしか許可していなかったが、デフォルトゲートウェイにNATゲートウェイを割り当てることにより、経路のわからないパケットをNATに転送している。そのためNAT経由で外部接続が可能になる。

③確認

// html形式のデータが色々返ってきたらOK
curl https://aws.amazon.com/jp/

13. DBサーバーにMariaDBをインストールしてデータベースの作成

プライベートサブネットのDBサーバーにMariaDBをインストールする。(NATのおかげでインストール可能)WordPressはMySQL, MariaDBが対応しており、Amazon Linux2にはMariaDBがパッケージとして含まれているのでMariaDBを使用する。

①MariaDBのインストール(DBサーバー)

※amazon-linux-extrasについてはphp install時にほんの少し。解説。

// 最新版のmaridbを検索
sudo amazon-linux-extras list | grep mariadb

// インストール(yum repository に追加)
sudo amazon-linux-extras install mariadb10.5

②MariaDBの起動(DBサーバー)

sudo systemctl start mariadb

③MariaDB設定

// rootユーザーのパスワード設定
mysqladmin -u root password
New password: 設定
Confirm new password: 確認用

// rootユーザーでMariaDBへ接続
mysql -u root -p
Enter password: 設定したパスワードを入力

// DataBaseの作成(DATABASE名をwordpressにする)
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

// ユーザーの作成(PASS:wordpresspass123)
grant all on wordpress.* to wordpress@"%" identified by 'wordpresspass123';

// 権限の反映
flush privileges;

// ユーザーの確認
select user, host from mysql.user;

// 自動起動するように設定
sudo systemctl enable mariadb
sudo systemctl enable httpd.service

14. WebサーバーへWordPressのインストール

DBサーバーはインストール完了したのでパブリックサブネット内のWebサーバーへWordPressをインストールします。amazon-linux-extrasを使用します。OSの安定性を担保しつつ、最新バージョンのソフトウェアを利用可能にしてくれるツール。install {middleware}でyum repositoryに追加される。(yum repolist allで確認)

以下公式より

①最新版PHPをインストール(Webサーバー)

// listでトピック一覧を表示してphpのインストール可能なバージョンの確認
sudo amazon-linux-extras list | grep php

// 最新バージョンのphpをyum repositoryへ追加(8.0)
sudo amazon-linux-extras install php8.0

// php MariaDBライブラリをインストール
sudo yum -y install php php-mbstring

②WebサーバーからDBサーバーへのアクセス可否のチェック(Webサーバー)

// MariaDBコマンドのインストール
sudo amazon-linux-extras install mariadb10.5

// DBへwordpressユーザーで接続(password:wordpresspass123)
mysql -h 10.0.2.10 -u wordpress -p

// 接続できることを確認したら閉じる
exit

③WordPressのダウンロード(Webサーバー)

yumでインストールできないので以下サイトよりソースファイルをダウンロードする。

ブログから大規模サイトまで作れる CMS - WordPress.org 日本語

cd ~
wget https://ja.wordpress.org/latest-ja.tar.gz

// 展開する
tar xzvf latest-ja.tar.gz

// wordpressフォルダが作られるので移動
cd wordpress

// Apacheのドキュメントルートへ配置する
sudo cp -r * /var/www/html/

// 指定ディレクトリ以下のファイルの所有者/グループをapache/apacheへ変更
sudo chown apache:apache /var/www/html/ -R

15. WordPressを設定する

WordPressのインストールまで完了しているので設定を進めます。

①Apacheの起動

// 既に起動している場合はrestartで再起動する
sudo systemctl start httpd

②パブリックIPまたはドメインよりアクセスすると以下画像のような初期設定画面が表示されるため、「さあ、始めましょう!」をクリックする

③以下画像のように設定項目を入力する。ユーザー名、パスワードなど各々任意で入力している場合は合わせて変更してください。入力完了後に「送信」ボタンをクリックしてください。

※うまくいかなかった場合、DBサーバーが動いているか、ユーザー名・パスワードが正しいか確認してください。

④以下画像の必要な情報を入力してください。

⑤以上でWordPressのインストールも完了です。あとはダッシュボードで色々いじってみてください。

※再注意:NATゲートウェイは不要ですので、削除することを忘れないように。

Discussion