[AWS]WordPressの構築方法

**2020年2月2日現在の内容です。**

構成イメージ
<img width="1137" alt="スクリーンショット 2020-02-02 12.51.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/866db07a-4e28-f796-66e8-653b1b2e3643.png">

## 用語説明
### プロトコル
コンピュータ同士がネットワークを利用して通信するために決められた約束事

メーカーやOSが異なるコンピュータ同士が通信を行うためには同じ仕様でやりとりする必要がある
　　　　　　↓
同じプロトコルを使用する決まりを作ることで、様々なコンピュータ同士が通信できる

例：HTTP,TCP,UDP,IP,SMTP,IPX

### TCP/IP
TCP・IPを中心として、インターネットを構築する上で必要なプロトコル郡の総称
インターネットを運用するために開発された

- アプリケーションプロトコル：HTTP,SMTP,FTP
- トランスポートプロトコル：TCP,UDP
- 経路制御プロトコル：RIP,OSPF,BGP
- インターネットプロトコル：IP,ICMP,ARP

#### TCP/IP階層モデル
インターネットでコンピュータ同士が通信する一連の処理を4階層で表現したもの
通信に必要な機能全体を整理している

| 階層 | 役割 | プロトコル例 |
|:-:|:-:|:-:|
| アプリケーション層 | アプリケーション同士が会話する | HTTP,DNS,SSH,SMTP |
| トランスポート層 | データの転送を制御する<br>(アプリケーション間のコネクションの確立・切断を担う) | TCP,UDP |
| ネットワーク層 | IPアドレスを管理し、経路選択する<br>(最終的な宛先のコンピュータにパケットを届ける) | IP,ICMP,ARP |
| ネットワークインターフェース層 | 直接接続された機器同士で通信する | Ethernet,PPP |

### HTTP

- Hyper Text Transfer Protocolの略
- インターネットでHTMLなどのコンテンツの送受信に用いられる通信の約束事
- クライアントがHTTPリクエストを送信し、それに対してサーバーがHTTPレスポンスを返す

### TCP

- Transmission Control Protocolの略
- 信頼性のある通信を提供
- 信頼性を保つために、送信するパケットの順序制御や再送制御を行う
- 信頼性のある通信を実現する必要がある場合に使用する

### UDP

- User Datagram Protocolの略
- 信頼性のない通信を提供
- 送信するだけで、パケットが届く保証はしない
- 高速性やリアルタイム性を重視する通信で使用する(電話,動画...)

### IP

- Internet Protocolの略
- ネットワーク上で通信を行う宛先を識別する(IPアドレス)
- 宛先IPアドレスのコンピュータまでパケットを届ける(ルーティング)
- 各ネットワークインタフェースの最大転送単位より小さくなるようにパケットを分割して送信し、終点コンピュータで再構築する

## WordPress用のDB作成
ターミナルからEC2へSSHログイン
`ssh -i test-ssh-key.pem ec2-user@18.179.167.73`
MySQLへログイン

```
[ec2-user@ip-10-0-10-10 ~]$ mysql -h test-web.czelx3q0xopr.ap-northeast-1.rds.amazonaws.com -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.16 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)]>
```

データベースの作成

```
MySQL [(none)]> CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.00 sec)
```

データベースが作成されていることを確認

```
MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
```

WordPeess用のユーザーの作成

```
MySQL [(none)]> CREATE USER 'test'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
```

作成したユーザーにDBを操作するための権限を付与

```
MySQL [(none)]> GRANT ALL ON test.* TO 'test'@'%';
Query OK, 0 rows affected (0.00 sec)
```

権限の付与を反映

```
MySQL [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
```

ユーザーの作成及び権限が付与されていることを確認

```
MySQL [(none)]> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| test             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| rdsadmin         | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
```

作成したユーザーでMySQLにログインできることを確認

```
MySQL [(none)]> exit
Bye
[ec2-user@ip-10-0-10-10 ~]$ mysql -h test-web.czelx3q0xopr.ap-northeast-1.rds.amazonaws.com -u test -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 8.0.16 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のインストール
**EC2にSSHログインしておく**
WordPressに必要なライブラリをインストール
`sudo amazon-linux-extras install -y php7.2`
(sudo yum install ではphp5.4がインストールされ、WordPressに必要なphpのバージョンに満たないため使用しない)

`sudo yum install -y php php-mbstring`

WordPressのダウンロード
`wget https://ja.wordpress.org/latest-ja.tar.gz`

WordPressがダウンロードされていることを確認

```
[ec2-user@ip-10-0-10-10 ~]$ ls
latest-ja.tar.gz
```

ダウンロードファイルを解凍
`tar xzvf latest-ja.tar.gz`

ダウンロードファイルが解凍されていることを確認

```
[ec2-user@ip-10-0-10-10 ~]$ ls
latest-ja.tar.gz  wordpress
```

WordPressをApacheが参照できる場所へ移動

```
[ec2-user@ip-10-0-10-10 ~]$ cd wordpress/
[ec2-user@ip-10-0-10-10 wordpress]$ sudo cp -r * /var/www/html/
```

WordPressをApacheが参照できるように権限を変更

```
[ec2-user@ip-10-0-10-10 wordpress]$ sudo chown apache:apache /var/www/html/ -R
```

Apacheに設定を反映

```
[ec2-user@ip-10-0-10-10 wordpress]$ sudo systemctl restart httpd.service
```

## WordPressの設定
Webサーバーにアクセスし、「さぁ、始めましょう！」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 20.56.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/5f9209ff-93d4-a38b-4bea-65b2056b0bf0.png">

以下の通り設定し、「送信」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 21.00.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/d181975e-8c10-ec05-52f5-30df5a78bcf7.png">

「インストール実行」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 21.02.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/16377c39-b601-6ae2-cfbc-9f46ee51d37d.png">

以下の通り設定し、「WordPressをインストール」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 21.06.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/a9e4c8d0-7fe6-4d61-5668-c96c9b8500da.png">

WordPressの設定が完了したことを確認
<img width="1680" alt="スクリーンショット 2020-02-01 21.09.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/a213e211-e211-dda4-87f7-18a4cf2c99cf.png">

ドメイン名でWordPressのページが表示されることを確認
<img width="1680" alt="スクリーンショット 2020-02-01 21.11.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/29f2c4ed-8837-f740-abc5-a05f5c5a951e.png">


## 参考
[AWS：ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得](https://www.udemy.com/course/aws-and-infra/)