AWSでWebサイトを作りますか。

AWSのEC2でWordPressを使ってサイトを作った備忘録。変な所でハマったので。
EC2上にAmazon Linux AMI乗っけてその上でApache起動させてそこにWordPress乗せるという回りくどいことをやっているのであんまり参考にならないかも……。

#AWSへの登録

[AWS公式](https://aws.amazon.com/jp/)の「まずは無料で登録」から。日本語だからわかりやすい。

使えるクレジットカードが必要なのは要注意。
AU WalletはMastercardなはずなんだけどダメでした。

#EC2インスタンスの作成

認証が終わったら、左上の「サービス」をクリック。
使うことの出来るサービス一覧がずらりと並んでます。
その中で左上の「EC2」を選択。
![170617.PNG](https://qiita-image-store.s3.amazonaws.com/0/128059/dd4f4b77-c74c-5f95-4029-3cdd4e48dab4.png)

青い「インスタンスの作成」ボタンを押すとインスタンスが作成できる……のだが、その前に自分が今どこのリージョンを使っているのかを確認する。
これは右上、自分の名前の横に書いてある。
![170617-1.PNG](https://qiita-image-store.s3.amazonaws.com/0/128059/d9f6cd6d-9cb5-1078-b2d4-6c0f6074dfec.png)
自分の場合はバージニア北部ですね。

AWSでは、作成したインスタンスは「（アカウント名）が（リージョン名）に作ったインスタンス」ではなく「**（リージョン名）に保管されている（アカウント名）が作ったインスタンス**」みたいな感じで管理されているみたいです。
なので、インスタンスを作ってから右上を弄ってリージョンを変えると**見た目上作成したインスタンスが消えます**。
あくまで見た目上なので、当然リージョンを移動すればまた見えるようになります。よいこのみなさんはわたしみたいに「き、消えた！？」と焦らないようにしてください。
逆に、インスタンスが消えた！？と思ったらまずは自分のいるリージョンを確認しましょう。

（[この時参考にしたブログ](http://dotnsf.blog.jp/archives/2290370.html)）

リージョンを確認したらインスタンスを作っていきます。
とは言っても、画面に表示されるものを読みながらやっていけばできます。
自分は[このあたり](https://www.skyarch.net/blog/?p=883)を参考にしつつやりました。

この時、下の青いボタンを押すとその後の設定をすっ飛ばしてインスタンスを作ってくれます。
親切なんだか不親切なんだかわからん……。

~~自分はここでAMIにAmazon Linux AMIを入れてしまいましたが、実はここで直にWordPressが選べるみたいです。左メニューの「AWS Marketplace」をクリックしてから検索窓に「WordPress」と入れて検索してみてね！~~

最後に公開鍵と秘密鍵のキーペアを作成します。プルダウンから「新しいキーペアの作成」を選び、適当な名前を付けてDL。これは後で必要になるので、どこに保存したか忘れないようにしておきましょう。

#セキュリティグループ

無事にインスタンスが作成出来たらインスタンスの管理画面になります。
インスタンスの状態が「Running」になったら（大体一分位？）、SSH接続に必要なセキュリティグループの設定をします。
インスタンスを選択して「説明」タブを見ると、今使っているセキュリティグループがわかります。
これをクリックするとセキュリティグループの設定へ飛べます。

![170617-2.PNG](https://qiita-image-store.s3.amazonaws.com/0/128059/ee4af111-cb5c-783a-4fa7-c52a9730e301.png)

セキュリティグループの設定ページで「インバウンド」タブを選択するとこんな感じ。
最初は「HTTP」しか無いと思うので、「編集」→「ルールの追加」でSSHを作ってやりましょう。
![170617-3.PNG](https://qiita-image-store.s3.amazonaws.com/0/128059/9a16dddd-704f-a181-f5b3-6b58262d4b41.png)

本当はソースをちゃんと指定してあげたほうがいいんですが、使ってる回線が可変IPなので……。
固定IPを持っているよいこのみなさんはちゃんと指定しましょうね。

#SSH接続

さっき作った秘密鍵を[PuTTYごった煮版](http://yebisuya.dip.jp/Software/PuTTY/)内のPuTTYgenから「読込」してやってPuTTY用の秘密鍵ファイルを作ります。
「全てのファイル(\*.\*)」で探すのを忘れずに。じゃないと見えません。
そして.ppk形式で保存。パスワードはかけておいたほうが良いでしょう。

PuTTYの設定は下記の通り。

| フィールド       |       値 | 
|:-----------------:|:------------------:|
| セッション>ホスト名             |              ec2-user@(パブリック DNS (IPv4)) |
| セッション>ポート          |            22 |
| セッション>接続タイプ             |             SSH |
| 接続>SSH>認証>認証のためのプライベートキーファイル            |              （上で作った.ppkファイル）|

セッション一覧で適当な名前をつけて「保存」したら「開く」で接続を始めます。
初回はダイアログが出ますが「OK」でスルー。
秘密鍵のパスワードの入力を求められたら入力。
AMIの起動画面が出たら成功です。

この辺の話は[公式のガイドページ](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html)が詳しいです。

#Apacheのインストール


インストール。

```
# sudo yum -y install httpd
```


起動。

```
# sudo service httpd start
```

わーいらくちーん。
この時点でブラウザからhttp://(パブリック DNS (IPv4))を見てみるとテストページが見れます。

#WordPressのインストール
まずはWordPressに必要なPHPとMySQLをインストール。

```
# yum install httpd mysql-server php php-mysql wget
```

/etc/php.iniを弄ってタイムゾーンの設定をしときます。

```
# vi /etc/php.ini
 ; Defines the default timezone used by the date functions
 ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
 date.timezone = "Asia/Tokyo"
```

[ここ](https://webkaru.net/linux/mysql-wordpress/)を参考にしつつMySQLの設定。
このページに沿ってやるとwpという名前のデータベースとwpという名前のユーザが出来上がっています。

WordPress本体を落としてきて解凍。
さらにApacheがWordPressを読み込めるようにしておく。

```
# cd /tmp
# wget http://ja.wordpress.org/wordpress-4.8-ja.tar.gz
# tar zxvf wordpress-3.5.1-ja.tar.gz 
# cp -r wordpress /var/www/
# chown -R apache.apache /var/www/wordpress
```

/etc/httpd/conf/httpd.confを弄って、

- DocumentRootをWordPressにし、
- DocumentRootのディレクトリに対して.htaccessによる上書きを許可しておく。

```
# vi /etc/httpd/conf/httpd.conf
 DocumentRoot "/var/www/wordpress"
 （中略）
 <Directory "/var/www/wordpress">　←ここをちゃんとDocumentRootと同じにしておく
     AllowOverride All
```

WordPressの設定ファイルを作る。
予めサンプルファイルが用意されているので、それをコピーして……

```
# cd /var/www/wordpress
# sudo cp wp-config-sample.php wp-config.php
```

書き換え。

```
# vi wp-config.php

 // データベース情報を設定します。
 define('DB_NAME', 'wp');
 define('DB_USER', 'wp');
 define('DB_PASSWORD', 'password');
 define('DB_HOST', 'localhost');
 define('DB_CHARSET', 'utf8');

 // 「put your unique phrase here」を 適当な文字列に置き換えます。
 define('AUTH_KEY',         'put your unique phrase here');
 define('SECURE_AUTH_KEY',  'put your unique phrase here');
 define('LOGGED_IN_KEY',    'put your unique phrase here');
 define('NONCE_KEY',        'put your unique phrase here');
 define('AUTH_SALT',        'put your unique phrase here');
 define('SECURE_AUTH_SALT', 'put your unique phrase here');
 define('LOGGED_IN_SALT',   'put your unique phrase here');
 define('NONCE_SALT',       'put your unique phrase here');
```

自分はここでPuTTYの文字コードをUTF-8にしていなかったため、**viでwp-config.phpを開いた瞬間に画面を文字化けしたものが覆うという大惨事**になってしまいました。
その時にwp-config.phpが壊れてしまったようで、ファイルの上半分が消失するという事態に……。
バックアップって大事だね！（もう一度`cp wp-config-sample.php wp-config.php`しながら）

ここで再びhttp://(パブリック DNS (IPv4))を覗いてみるとWordPressの初期設定画面が開きます。
もしも「データベース接続確立エラー」と出るならwp-config.phpのデータベース情報のどこかが間違ってます。
もしもwp-config.phpの中身が表示されているようならSyntax Errorです。直しましょ。

#独自ドメイン設定
サイト自体は完成したので次はドメインとパブリックDNSを紐付けてやります。

[これ](http://qiita.com/mochizukikotaro/items/eb4a8d6cd3b184eaf42a)を参考にしてElastic IPを作成、ついでRoute53を設定。Whoisが更新されたのを確認してからドメインをブラウザに入れてみると……。

**動かない。何故だ。**

正確に言うと、動いてはいるっぽいけどサイトのテキストしか表示されない。
その状態で色々弄っていたら、あることに気づく。

**管理画面に遷移しようとすると新たに設定したElastic IPではなく以前のパブリックDNSが出る。**

ちょっと調べてみたら[こんなページ](http://promamo.com/?p=3026)が。
なるほど、DBには前のパブリックDNSしか登録されてないからこうなるのね。
変えてやったら無事動きましたー！よかったー。

さて、あとはサイト本体を作るだけだ……。