数学やプログラミングや映画など

新米SEがwebと数学と映画についてつらつら書きたいブログです。

AWSでWordPressによるWebサイトを構築する話

概要

AWSに登録したので、無料枠の範囲でWordPressを使ってWebサイトを構築しようと思って書いた記事です。

EC2 + RDS で構築します。

 

前提

AWSのアカウントが登録済みあること。

2017年4月時点の情報であり、AWSの仕様は今後変化する可能性は十分あります。

 

EC2インスタンスを作成する

まずコンソールにログインし、EC2をクリックしてEC2の管理画面に遷移します。

f:id:nknshmsk:20170402172131p:plain


インスタンスを作成ボタンをクリックし、インスタンス作成画面に移ります。

f:id:nknshmsk:20170402172127p:plain



今回の記事ではOSは無料枠の対象である Amazon Linux を選択して確認と作成ボタンをクリックします。

f:id:nknshmsk:20170402172213p:plain



確認画面の内容がこれでよい事を確認し、作成ボタンをクリックします。

f:id:nknshmsk:20170402172236p:plain




キーペアの作成画面が表示されるので、

[新しいキーペアの作成 ] を選択し、キーペア名を指定して 鍵ファイル(.pem形式) をダウンロードします。

このファイルは、作成したインスタンスにログインするための情報となるので、大事に保管しましょう。

f:id:nknshmsk:20170402172259p:plain




 [インスタンスの作成] ボタンをクリックすると、インスタンス作成中の画面に遷移するので[インスタンスの表示] ボタンをクリックします。

f:id:nknshmsk:20170402172346p:plain




しばらく経過後に、作成したインスタンスが running の状態になっていることが分かります。

また、グローバルIPアドレス 「54.245.145.33」 が作成完了時点ですでに振られています。

このIPアドレスは永続的なものではなく、インスタンス再起動の度に変更されてしまうものですので、固定のIPアドレスが欲しい場合はEIPというものを割り振ってあげる必要があります。

今回の記事では趣旨と外れてしまうので省略します。

最後にインスタンスを識別するために名前を振ってあげます。
インスタンス一覧の画面でインスタンスのName欄にマウスオーバーすると鉛筆のマークが出てくるので、そこをクリックことで名前の設定ができます。
今回は wp-test という名前を付けました。

ここまででインスタンスの作成が完了しました。

ほんの1,2分でサーバが作成できました、簡単ですね!

 

作成したインスタンスSSHクライアントでログインする

ここまでで作成したインスタンスにログインしてみます。

今回作成したインスタンスのOSは AmazonLinux なので、SSHでログインします。

また、SSHのクライアントはなんでも良いのですが、今回はPuTTYを使います。

PuTTYでは .pem 形式のファイルはサポートされていないので、PuTTYgenというソフトウェアを利用して .pem のファイルを .ppk ファイルに変換して、それをプライベートキーとしたSSHログインをします。

なお、他のSSHクライアントでは .pem をプライベートキーとしてログインすれば良い想定ですので、.pemファイルを変換する過程は省略します。

 

接続先IPアドレスは、作成完了時に確認したアドレス 54.245.145.33 にします。

f:id:nknshmsk:20170402172604p:plain



そして、プライベートキーファイルとして先ほど変換した .ppk ファイルを指定します。

f:id:nknshmsk:20170402172615p:plain



そして接続をするとログインユーザを聞かれるので、EC2インスタンスのデフォルトユーザである 「ec2-user」を指定するとログインができます。

f:id:nknshmsk:20170402172632p:plain

ミドルウェアをインストール・設定する

ログインができるようになりましたので、WordPressに必要なミドルウェアをインストールしていきます。

まず、基本的にパッケージは最新バージョンに保つ方が好ましいと考えるため、デフォルトでインストールされているパッケージのアップデートをします。
併せて今回必要な以下のミドルウェアをインストールします。

なお、Apacheは、PHP7をyumでインストールすると、関連パッケージとして一緒にインストールされます。

[ec2-user@ip-172-31-8-42 ~]$ sudo yum update
(略)
[ec2-user@ip-172-31-8-42 ~]$ sudo yum install php70
(略)
[ec2-user@ip-172-31-8-42 ~]$ sudo yum install php70-pdo
(略)
[ec2-user@ip-172-31-8-42 ~]$ sudo yum install php70-mysqlnd
(略)
[ec2-user@ip-172-31-8-42 ~]$ sudo yum install php70-mbstring
(略)
[ec2-user@ip-172-31-8-42 ~]$ sudo yum install mysql
(略)

次にWordPressをインストールし、 /var/www/www.wp-test.jp として設置します。

[ec2-user@ip-172-31-8-42 ~]$ wget https://ja.wordpress.org/latest-ja.tar.gz
--2017-04-02 05:47:21--  https://ja.wordpress.org/latest-ja.tar.gz
Resolving ja.wordpress.org (ja.wordpress.org)... 66.155.40.250, 66.155.40.249
Connecting to ja.wordpress.org (ja.wordpress.org)|66.155.40.250|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8481247 (8.1M) [application/octet-stream]
Saving to: ?latest-ja.tar.gz?

latest-ja.tar.gz              100%[=================================================>]   8.09M  15.5MB/s    in 0.5s

2017-04-02 05:47:21 (15.5 MB/s) - ?latest-ja.tar.gz? saved [8481247/8481247]
[ec2-user@ip-172-31-8-42 ~]$ cd /var/www/
[ec2-user@ip-172-31-8-42 ~]$ sudo tar -xzvf ~/latest-ja.tar.gz 
(略)
[ec2-user@ip-172-31-8-42 www]$ ls
cgi-bin  error  html  icons  noindex  wordpress
[ec2-user@ip-172-31-8-42 www]$ sudo mv wordpress www.wp-test.jp

必要なもののインストールができたので、HTTPリクエストが来た時に www.wp-test.jp 以下を返すようApacheの設定をして、起動します。
なお、今回はインターネットに公開する予定はないのでセキュリティ周りの設定は今度します。

[ec2-user@ip-172-31-8-42 www]$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
[ec2-user@ip-172-31-8-42 www]$ sudo vi /etc/httpd/conf/httpd.conf
[ec2-user@ip-172-31-8-42 www]$ diff /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
119c119
< DocumentRoot "/var/www/www.wp-test.jp"
---
> DocumentRoot "/var/www/html"
126c126
<     # Allow open access
---
>     # Allow open access:
131c131
< <Directory "/var/www/www.wp-test.jp">
---
> <Directory "/var/www/html">
[ec2-user@ip-172-31-8-42 www]$ sudo /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]

RDS を作成する

ここまででEC2インスタンスの最低限の設定ができたので、次はWordPressのデータが格納されるデータベースの作成をします。
EC2インスタンスMySQLサーバをインストールしてそれを使ってもよいのですが、AWSにはRDSというデータベースのサービスがありますのでそれを使います。



まず、AWSコンソールからRDSの管理画面に遷移します。

f:id:nknshmsk:20170402172708p:plain



RDSの起動をクリックします。

f:id:nknshmsk:20170402172717p:plain



DBエンジンの選択画面に遷移するので、今回は無料枠の中で使用することができるMySQLを使用します。

f:id:nknshmsk:20170402172727p:plain



安定高速なものも選べますが(有料)どうですか?と聞かれますが、今回は無料枠の範囲でと決めているので 開発/テスト 用を選択。

f:id:nknshmsk:20170402172737p:plain



詳細設定の画面に遷移するので、まず 無料枠の範囲で使えるオプションのみ表示 のチェックを入れます。
そして、MySQLのバージョンを現在の時点での最新バージョンに設定し、以下の項目を設定します。

  • DB インスタンス識別子 : 今回作成するRDSに対して一意に振られる名前
  • マスターユーザの名前 : WordPress以外に使用する予定は無いので、wordpressユーザを作成
  • スターパスワード : wordpressユーザのパスワードを指定、後で使うので
  • パスワードの確認 : 忘れないようにね!

f:id:nknshmsk:20170402172753p:plain

ネットワークやセキュリティ、その他の設定に移ります。



まずVPCについてですが、これはAWS上に作成できる仮想ネットワークです。
EC2インスタンスは デフォルト vpc に属しているため、RDSも同じネットワークに属させます。

次にセキュリティグループですが、これは通信の許可を設定することが出来ます。
今回はDBへ接続のための通信のみ許可するグループを新しく作成します。

最後にデータベースの名前ですが、WordPress用のデータベースなので、wordpressと名前を付けます。

その他の設定に関してはデフォルトの状態で DBインスタンスの作成 をクリックします。

f:id:nknshmsk:20170402172821p:plain



その後作成中画面に遷移します。
また、インスタンス一覧の画面に遷移するとステータスが作成中のインスタンスがありますがしばらく待つとインスタンスが起動してきます。

f:id:nknshmsk:20170402172832p:plain


EC2からRDSに接続する

EC2 から RDS に接続するためにセキュリティグループを設定する必要があります。

RDSのセキュリティグループのインバウントの許可設定にEC2インスタンスが所属するセキュリティグループからのデータベースへの通信を加えます。



まずEC2インスタンスが所属するセキュリティグループを確認します。
EC2の管理画面から今回作成したEC2インスタンス wp-test を選択することでセキュリティグループを確認することが出来ます。

f:id:nknshmsk:20170402172959p:plain



launch-wizard-3 に属していることが分かりました。
次にEC2管理画面の左ペインからセキュリティグループをクリックして一覧を確認します。

f:id:nknshmsk:20170402173015p:plain



rds-launch-wizard はRDSが所属しているグループで launch-wizard-3 はEC2が所属しているグループです。

rds-launch-wizard をクリックして、編集をクリックします。
そして以下の設定を入力し、保存をクリックします。

  • タイプ : MYSQL/Aurora
  • 送信元 : カスタム / launch-wizard-3

f:id:nknshmsk:20170402173030p:plain



これでEC2からRDSへDB接続のための通信が許可されるようになるので、wordpressユーザでEC2から接続を試してみます。

なお、RDSはエンドポイントと呼ばれる接続先のIPアドレスに代わるものが割り振られているので、それを確認します。

RDSの管理画面 → 確認したいRDSを選択で確認することが出来ます。

f:id:nknshmsk:20170402173042p:plain



エンドポイントが分かったので、EC2にログインして以下のように接続をします。

[ec2-user@ip-172-31-8-42 ~]$ mysql -u wordpress -h wp-test.cbpgcqev4of6.us-west-2.rds.amazonaws.com -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 5.7.16-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


EC2からDBへの接続が出来るようになりました。

自分のPCからインターネット経由でHTTP接続できるようにする

もう終盤です。

WordPressが動作する環境は整ったので、EC2にインターネット経由で接続できるようにします。

デフォルトの状態ではセキュリティグループの設定がSSH接続のみ許可されている状態です。
これに、自分のPCからのHTTP接続を許可する設定を加えます。(公開する場合は全てのIPアドレスからの通信を許可)

EC2の管理画面 → セキュリティグループ に移動し、EC2が所属しているセキュリティグループを選択します。
そして 編集 をクリックして、以下の設定を加えます。

f:id:nknshmsk:20170402173621p:plain



これで自分のPCからEC2へHTTP接続が出来るようになったので、ブラウザにEC2のIPアドレスを入力して接続します。
そうすると、WordPressの仕様で 54.245.145.33/wp-admin/setup-config.php にリダイレクトされます。

f:id:nknshmsk:20170402173651p:plain


ブラウザからWordPressの設定をする

最後の仕上げに入ります。

ブラウザからWordPressの設定画面が表示できるようになったので、WordPressの設定を入れていきます。

WordPressのメッセージに従いながら。以下の項目を入力していきます。

  • データベース名: wordpress
  • ユーザ名: wordpress (RDS作成時に設定したユーザ)
  • パスワード: (RDS作成時に設定したパスワード)
  • データベースのホスト名: wp-test.cbpgcqev4of6.us-west-2.rds.amazonaws.com (RDSのエンドポイント)
  • テーブルの接頭辞: wp_

権限周りの設定をしていなかったので、wp-config.php に書き込めませんでした というメッセージが出ます。
なので、今回はEC2にログインして直接wp-config.phpを作成しましょう。

[ec2-user@ip-172-31-8-42 ~]$ vim /var/www/www.wp-test.jp/wp-config.php
[ec2-user@ip-172-31-8-42 ~]$ sudo chown apache.apache /var/www/www.wp-test.jp/wp-config.php

その後メッセージに従ってサイトのタイトルやメールアドレスなどを設定していけば完了です。

最後にもう一度 54.245.145.33(EC2のIPアドレス) にブラウザからアクセスして正しくサイトが表示されることを確認します。



f:id:nknshmsk:20170402173713p:plain

おわりに

AWSの無料枠を利用して、EC2 + RDSの構成でWordPressを構築しました。

現状では自分のPCから見れるだけのサイトなので、テスト環境としては使えそうです。

外部に公開するには少なくともセキュリティ周りの設定とドメインの取得などが必要ですね。
また今度にします。