AWS初心者は必ず読むべき！必見！AWSの基本⑥EC2にてWordPress構築構築

# この記事の続き

https://qiita.com/Hashimoto-Noriaki/items/8531a9c2f4fd9497c626



# この記事の概要
WebサーバーにWordPressをインストールし、WordPressからデータベースへ接続します。
ドメイン名にブラウザからアクセスするとWordPressから表示されるようになります。

# WordPressのためのデータベース作成
ドメイン名でWordPressにアクセスできるようにしていきます。

#### RDSインスタンスの中にWordPress用のデータベース作成
まずはEC2でSSHでログインしていきます。
MySQLに接続します。

```
# MySQL実行　　　
# 　MySQLは環境によって変わることがあるので上のコマンドで動くとは限りません。

[ec2-user@ip-10-0-7-161 ~]$mysql -h aws-infra-web.cssrje6zwv8w.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 1106
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
```
####  上のデータと紐付けたMySQLのユーザーを作成
```
# データベース作成
 MySQL [(none)]> CREATE DATABASE aws_infra DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.04 sec)

MySQL [(none)]> show databases; #データベース一覧
+--------------------+
| Database           |
+--------------------+
| aws_infra          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.02 sec)
```

#### WordPress用のユーザーに権限を与える

```
# WordPress用のユーザー作成
MySQL [(none)]> CREATE USER 'aws-infra'@'%' IDENTIFIED BY 'aws-study';
Query OK, 0 rows affected (0.03 sec)

#　@以降は接続元のホスト %は接続元のホスト　　　IDENTIFIED は接続時のパスワードでここではaws-studyにします。
# 今作成したユーザーにデータベースを操作できる権限を与える
MySQL [(none)]> GRANT ALL ON aws_infra.* TO 'aws-infra'@'%';
Query OK, 0 rows affected (0.01 sec)

#MySQLに反映
MySQL [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

# ユーザーが作成されたか確認
MySQL [(none)]> SELECT user , host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| aws-infra        | %         |
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| rdsadmin         | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

MySQL [(none)]> exit #MySQLを抜ける
Bye
```

###  MySQLに入り直す
これでデータベースが作成されたか確認します。

```
[ec2-user@ip-10-0-7-161 ~]$ mysql -h aws-infra-web.cssrje6zwv8w.ap-northeast-1.rds.amazonaws.com -u aws-infra -p
Enter password:  #さっき決めたやつ
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1120
Server version: 8.0.28 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の補足
MySQLの画面がいっぱいになってきたら下のコマンドで画面をきれいにします。
```
MySQL [(none)]> \! clear
```

# WordPressのインストール
まずがSSHでWebサーバーにログインします。

#### ライブラリのインストール

```
[ec2-user@ip-10-0-7-161 ~]$ sudo amazon-linux-extras install -y php7.2
Topic php7.2 has end-of-support date of 2020-11-30
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json

# 省略
 64  firefox                  available    [ =stable ]
 65  lustre                   available    [ =stable ]
* Extra topic has reached end of support.
[ec2-user@ip-10-0-7-161 ~]$  sudo yum install -y php php-mbstring
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
依存性の解決をしています
#省略
依存性関連をインストールしました:
  oniguruma.x86_64 0:5.9.6-1.amzn2.0.4                                                            

完了しました!
```

#### WordPressのダウンロード
WordPressのダウンロードをしていきます。

```
[ec2-user@ip-10-0-7-161 ~]$ wget https://ja.wordpress.org/latest-ja.tar.gz　　#wgetコマンドはURLを指定してファイルをダウンロードするコマンド
#省略
[ec2-user@ip-10-0-7-161 ~]$ ls
latest-ja.tar.gz  #ファイルがダウンロードされました。
[ec2-user@ip-10-0-7-161 ~]$ tar xzvf latest-ja.tar.gz　#tarコマンドは複数のファイルをまとめたり解凍　xは解凍　zはgzipを使う　vは圧縮解凍を表示　fが圧縮ファイル名を表示
# 省略
wordpress/wp-signup.php
wordpress/wp-links-opml.php
[ec2-user@ip-10-0-7-161 ~]$ ls
latest-ja.tar.gz  wordpress  #wordpressが入りました。

```

#### WordPressのプログラムをApacheから見える場所に配置

```
[ec2-user@ip-10-0-7-161 ~]$ cd wordpress/
[ec2-user@ip-10-0-7-161 wordpress]$ sudo cp -r * /var/www/html/ # cpはコピー　 -r*は全てのファイルかディレクトリを指定する　　/var/www/html/はコピー先
```
#### WordPressファイルの所有者　・グループ変更

```
[ec2-user@ip-10-0-7-161 wordpress]$ sudo chown apache:apache /var/www/html/ -R
# chownはファイルの所有者や所有グループを変更　
# apache:apacheはファイルの所有者と所有しているグループをapacheに変更
# /var/www/html/ -Rは　/var/www/html/以下の全てのファイルを変更
```
これでApacheからWordpressのファイルを参照できるようになりました。


#### Apacheの再起動
この設定を反映させていきます。
```
[ec2-user@ip-10-0-7-161 wordpress]$ sudo systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           └─php-fpm.conf
   Active: active (running) since 火 2022-09-13 05:36:02 UTC; 39min ago　
     Docs: man:httpd.service(8)
# 省略
Hint: Some lines were ellipsized, use -l to show in full.
```
　runningとあるので起動しています。
起動していない場合は以下のコマンドを使います。
```
[ec2-user@ip-10-0-7-161 wordpress]$ sudo systemctl start httpd.service
```
Apacheの再起動は以下のコマンドです。
```
[ec2-user@ip-10-0-7-161 wordpress]$ sudo systemctl restart httpd.service
```
startがrestartに変わっただけですね。

起動状態を確認します。
```
[ec2-user@ip-10-0-7-161 wordpress]$ sudo systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           └─php-fpm.conf
   Active: active (running) since 火 2022-09-13 06:25:54 UTC; 1min 14s ago
     Docs: man:httpd.service(8)
# 省略
Hint: Some lines were ellipsized, use -l to show in full.
[ec2-user@ip-10-0-7-161 wordpress]$
```
runningになっていますので起動しています。

# WordPressの設定
WordPressの設定をしていきます。

#### ドメイン名にアクセスしてWordPressの設定
ドメイン名でブラウザにアクセスします。するとこのようなWordPressの設定画面になります。
![スクリーンショット 2022-09-13 15.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/8fe3a8df-fc8c-8751-6008-96f689e3e28b.png)

***さあ始めましょう***のボタンをクリックしましょう。すると下の画像になります。
その時データベースのホスト名はRDSの接続先を入力します。
RDSの接続先はRDSの中のデータベースの中で今回連携するデータベースの***エンドポイント***です。
![スクリーンショット 2022-09-13 15.42.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5a31ef94-768e-1f82-046e-3ceee9b86f6e.png)

![スクリーンショット 2022-09-13 15.56.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d1577db2-f488-5cee-babc-c73ae499ce81.png)
送信をするとインストールされたことがわかります。
インストール実行をクリックします。

![スクリーンショット 2022-09-13 16.03.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/4956b36c-5b22-b8c0-45c3-e9d183f6c282.png)
WordPressをインストールしていきます。
インストールできたらWordPressにログインしていきます。
このような画面になります。

![スクリーンショット 2022-09-13 16.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/4cbfd3bb-f587-a5d3-9123-38f2c3481b02.png)


ドメイン名から入ると以下のようなサイトにいきます。

![スクリーンショット 2022-09-13 16.29.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/8b6ae4ca-1511-5ce0-e3d2-5d73eabbf793.png)


### WordPress(Webサイト)のサイトはどのように表示されるのか
そのためにはネットワークのことも知っていなければいけないです。

# TCP/IPについて
コンピューター同士のネットワークの***通信の中ではTCP/IPプロトコルに基づいて通信***がされています。

### プロトコル
```プロトコル```とはコンピューター同士が通信するための決まりごとです。
メーカーやOSが違うコンピューター同士で通信するため、
同じプロトコルを使う決まりがあるからいろいろなコンピューター同士で
通信ができます。

ex)
HTTP,TCP,IP,UDPなど

## TCP/IPとは
TCP・IPを中心とした、インターネットを構築する上で必要なプロトコル群の総称です。
インターネットを運用するために開発されたみたいです。
階層モデルで4階層で表現したものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5df0da5d-4c1a-f9a8-f792-2d06c597812e.png)

> 引用　https://www.itmanage.co.jp/column/tcp-ip-protocol/

・アプリケーション層はアプリケーション同士で会話します。
ex) HTTP,DNS,SSH,SMTP

・トランスポート層はデータの転送を防御します。
ex) TCP UDP

・IPアドレスを管理し、経路選択します。
ex) IP ICMP ARP

・ネットワーク　インターフェース層は直接接続された機器同士で通信します。
ex) Ethernet PPP

# HTTPとは
HTTPはTCP/IPの中で大事なプロトコルで、アプリケーション層に該当します。
インターネットネットなどでHTMLなどのコンテンツの送受信に使われる通信の
約束ごとです。クライアントがHTTPリクエストを送り、
サーバーがレスポンスで返す流れです。



# TCPとUDPとは
トランスポート層のプロトコルです。
トランスポート層はアプリケーションの間でコネクションの確立、切断をします。
どのアプリケーションと通信するかを指定する(ポート番号)役割があります。

●```TCP```
***通信を制御するプロトコル***で、データの到達確認や、コネクション管理をします。
通信相手との間で通信を始める準備をしてから通信をします。

●```UDP```
***コネクションレスな通信***です。
アプリケーションから送信要求があったらデータをそのまま
ネットワークに流します。
動画、電話など即時性が必要な通信です。

#### ヘッダーのフォーマット
UDPは送信元ポート番号と宛先ポート番号が大事みたいです。
TCPは送信元ポート番号と宛先ポート番号、シーケンス番号、確認応答番号が大事みたいです。


# IPとは
***ネットワーク層のプロトコル***です。
ネットワーク層は最終的な宛先をパケットに届ける重要な役割を担っています。
●役割①IPアドレス
IPアドレス、終点コンピューターまでのパケット配送(ルーティング)、パケット分割、再構築処理の３つになっています。

●役割②ルーティング
宛先IPアドレスのコンピューターまでパケットを届ける役割を担っています。

●役割③　パケットの分割・再構築
ネットワーク　インターフェース層によって最大転送単位が異なります。


# 資料
https://www.udemy.com/course/aws-and-infra/?aEightID=s00000016735001&AID=190908007224&a8=PlQKLlknX1zBDBaq.wzJncu_p1fqzQucJwA5k1yg05hnX1QlC1QHRJzHrD0GZGuAv56JgVQTvlQKjs00000016735001