#はじめに
AWSのポートフォリオが作りたくて、王道な構成な感じでワードプレスをデプロイしてみたので、手順をメモしておきます。
最終的に作成したい構成はこんな感じです。
#1 ネットワークの設定
まずはVPCでネットワークを構成します。
こんな感じにCIDRを設定して作ってもらえればと思います。
そしたら次にインターネットゲートウェイを作成して、先程作成したVPCにアタッチします。
イメージとしてはこんな感じ。
そしたら新たにルートテーブルを作成して、先程のVPCにアタッチして、パブリックサブネットを関連づけます。そして、ルートテーブルのルートを設定して、パブリックサブネットからの通信全て、インターネットゲートウェイをターゲットとします。
これでネットワーク設定は終わりです。
現状イメージはこんな感じです。
#2 EC2でWebサーバ起動
では先ほど作成したパブリックサブネットにEC2でインスタンスを起動します。
自動割り当てパブリックIPは有効にします。
セキュリティグループはSSHとHTTPを許可しておきます。
SSHの接続もとIPアドレスが限定されていれば、そのIPアドレスからのみ接続を許可する設定にするとグッドです。
また、新たなElastic IPを割り当てて、作成したEC2インスタンスに関連づけておきましょう。
イメージはこんな感じ。
そしたらSSHでEC2インスタンスに接続します。
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-31-42-200 ~]$
[ec2-user@ip-172-31-42-200 ~]$
[ec2-user@ip-172-31-42-200 ~]$
[ec2-user@ip-172-31-42-200 ~]$
[ec2-user@ip-172-31-42-200 ~]$
時間の設定がUTCになっているので、日本時間に設定し直します。
ちなみに下記手順はAmazon Linux限定ですので、他のOSの場合は各自調べて設定してください。
#ZONEをJapanに変更
$ sudo vi /etc/sysconfig/clock
ZONE="Japan"
UTC=true
#ローカルタイムにシンボリックリンクを作成
$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
#設定を反映させるため再起動
$ sudo reboot
#設定が反映されているか確認
$ date
2021年 8月 1日 日曜日 13:08:53 JST
そしたらWebサーバとして使うnginxをインストールします。
#EC2インスタンスのライブラリをアップデート
$ sudo yum update -y
#インストールできるnginxのバージョンを確認
$ amazon-linux-extras list | grep nginx
38 nginx1 available [ =stable ]
#最新のnginxをインストール(上記のものから最新のものを選択)
$ sudo amazon-linux-extras install nginx1 -y
#nginxが自動起動するように設定
$ sudo systemctl enable nginx
#nginxを起動
$ sudo systemctl start nginx
#nginxのステータスを確認
$ sudo systemctl status nginx
Active: active (running)
現在イメージはこんな感じ。
#3 RDSでデータベースサーバ起動
お次はRDSでデータベースを起動していきましょう。
RDSを作成する前に、以下を作成しなければならないので順に作成していきます。
・RDS用VPCセキュリティグループ
・サブネットグループ
まずRDS用のVPCセキュリティグループ作成します。
VPCのサービスに移動して、左ペインからセキュリティグループを選択して、セキュリティグループを作成します。
VPCは今回作成しているVPCです。
インバウンドルールを以下のように設定します。webサーバからのみアクセスができるようにソースは今回作成したEC2インスタンスのセキュリティグループIDを指定します。
そしたらサブネットグループを作成します。サブネットグループを作成するには、別々のアベイラビリティゾーンにサブネットが2つ以上存在してないといけないので、同じVPCの別のアベイラビィティゾーンにもサブネットを作成しておきます。
そしたらサブネットグループを作成します。今回作成したVPCにある2つのプライベートサブネットを選択します。
セキュリティグループとサブネットグループの作成が完了したら、RDSサービスからデータベース作成をして、今回作成したもの選んでいけば、データベースを作成できます。
現在イメージはこんな感じ。
EC2インスタンスからデータベースに接続します。
#MySQLのインストール
$ sudo yum -y install mysql
#EC2インスタンスからデータベースに接続
$ mysql -h データベースのエンドポイント -u admin -p
パスワード:
#データベースの確認
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qii_wp_database |
| sys |
+--------------------+
5 rows in set (0.00 sec)
ワードプレス用のデータベースの作成、ユーザーの作成と権限の設定もやっていきます。
#ワードプレス用データベース作成
create database 任意のデータベース名 default character set utf8 collate utf8_general_ci;
#ワードプレス用ユーザーの作成
MySQL [(none)]> create user '任意のユーザー名'@'%' identified by '任意のパスワード';
Query OK, 0 rows affected (0.01 sec)
#ワードプレス用ユーザーにワードプレス用データベースへの権限を付与
MySQL [(none)]> grant all on 作成したデータベース名.* to '作成したユーザ名'@'%';
Query OK, 0 rows affected (0.01 sec)
#設定を反映
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#4 Wordpressの設定
ワードプレスを動かすにはphpも必要なのでインストールします。
#インストールできるphpのバージョンを確認
$ amazon-linux-extras list | grep php
15 php7.2 available \
17 lamp-mariadb10.2-php7.2 available \
31 php7.3 available \
42 php7.4 available [ =stable ]
51 php8.0 available [ =stable ]
#phpの最新バージョンをインストール(上記のリストから最新のものを選択)
sudo amazon-linux-extras install php8.0 -y
#必要なphpライブラリをインストール
$ sudo yum install php php-mbstring -y
そしたらワードプレスもインストールしましょう。
#ワードプレスをインストール
$ wget https://ja.wordpress.org/latest-ja.tar.gz
#ワードプレスのアーカイブを展開
$ tar xzvf latest-ja.tar.gz
#インストールできたことを確認
$ ll
合計 15456
-rw-rw-r-- 1 ec2-user ec2-user 15819383 7月 26 09:01 latest-ja.tar.gz
drwxr-xr-x 5 ec2-user ec2-user 4096 7月 26 09:00 wordpress
インストールが完了したので、httpアクセスをした時にnginxがワードプレスを表示できるように、適切な位置にワードプレスファイルを配置しましょう。
#wordpresディレクトリに移動
$ cd ~/wordpress
#カレントディレクトリ配下にワードプレスファイル群があることを確認
ls
index.php readme.html wp-admin wp-comments-post.php wp-content wp-includes wp-load.php wp-mail.php wp-signup.php xmlrpc.php
license.txt wp-activate.php wp-blog-header.php wp-config-sample.php wp-cron.php wp-links-opml.php wp-login.php wp-settings.php wp-trackback.php
カレントディレクトリ配下を/usr/share/nginx/htmlに配置
$ sudo cp -r ./* /usr/share/nginx/html
#/usr/share/nginx/html配下のオーナーをapacheに変更
$ sudo chown apache:apache /usr/share/nginx/html/ -R
#nginxを再起動
$ sudo systemctl restart nginx
これでイメージはこんな感じ
ブラウザでインスタンスにアクセスすると、ワードプレスのインストール画面が表示されます。
左下の「さあ、始めましょう」ボタンをクリックすると、データベースの詳細入力画面が表示されます。
データベース名、ユーザ名、パスワードは先ほど作成したものを入力します。
データベースのホスト名は、RDSインスタンスのエンドポイントを入れます。
そしてサイトの必要情報を入力して、インストール実行をすると、ワードプレスのダッシュボード画面に入ることができます。
#5 S3にメディアファイルを保存できるように設定
それでは最後に、ワードプレスのメディアファイルをS3に保存できるようにしましょう。
メディアファイルはワードプレスの記事を書くごとに増えていくので、サーバのストレージを圧迫しがちです。
S3に保存すれば、容量制限がないので、ストレージを拡張する必要がなくなり、大変便利です。
まずはS3バケットを作成します。
設定の際に、パブリックアクセスのブロック設定のチェックを全て外しておきます。
これをやっておかないと、ブログの画像に読者がアクセスできなくなります。
そして、s3バケットの作成が完了しました。
そしたらS3を操作できるIAMユーザーを作成します。
ユーザー名を入力して、プログラムからのアクセスにチェックを入れて、次へを選択します。
既存のポリシーをアタッチから、「S3 Full Access」のポリシーをユーザーにアタッチします。
そしたら、ワードプレスのダッシュボードで、「WP Offload Media Lite for Amazon S3」というプラグインを新規追加して、有効化させます。
ユーザー作成の確認画面はこんな感じです。
ユーザーのアクセスキーIDとシークレットアクセスキーが発行されるので、csvをダウンロードしおきましょう。
そしたらEC2インスタンスで、必要なライブラリをインストールします。
#php-xmlをインストール
$ sudo yum install -y php-xml
#php-gdをインストール
$ sudo yum install -y php-gd
#php-develをインストール
$ sudo yum install php-devel.x86_64
#サーバ再起動
$ sudo reboot
そしたらワードプレスのダッシュボードに戻って、左ペインの設定に「Offload Media Lite」が追加されていることを確認します。
Offload Media Liteをクリックしたら、「Define access keys in wp-config.php」の欄にコードがあるので、それをコピーしてEC2インスタンスの「wp-config.php」に記載します。
アクセスキーIDとシークレットアクセスキーは先ほどダウンロードしたCSVのものを入力しましょう。
$ sudo vi /usr/share/nginx/html/wp-config.php
↓↓↓↓↓↓↓↓↓viの編集画面↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
define( 'WP_DEBUG', false );
define( 'AS3CF_SETTINGS', serialize( array(
'provider' => 'aws',
'access-key-id' => '********************',
'secret-access-key' => '**************************************',
) ) );
/* カスタム値は、この行と「編集が必要なのはここまでです」の行の間に追加してください。 */
そしたらワードプレスの「Offload Media Lite」設定画面に戻って画面をリロードすると、S3バケットを入力する画面が表示されるので、先ほど作成したS3バケットのバケット名を入力して保存します。
また「Offload Media Lite」の設定で「Remove Files From Server」をONにしておきましょう。この設定をすることで、サーバの容量が逼迫しなくなります。
これでワードプレスから画像を投稿すると、S3バケットに保存されます。
ワードプレスで画像をアップロードして、画像のURLを見るとS3に保存され、S3から配信されていることが確認できます。
やっとこさ最初に想定したイメージにたどり着きました!
現状イメージはこんな感じ。
お疲れ様です!
これでワードプレスの構築は以上となります!
次回はAWSの設定をいじって、運用を自動化していきます!
それでは、どうぞよしなに