AWS EC2上にPHPサイトを立ち上げて、独自ドメインでアクセスできるようにするまでの全手順

# はじめに
AWSにまったく触れたことがない人、サーバーを立てたことがない人を対象とした記事です。
AWSのEC2にPHPファイルを置いて、独自ドメインでWebサイトを公開するまでの手順をまとめました。AWSのアカウント取得は以下の記事を参照してください。
[AWSのS3上に静的なWebサイトを公開して、「Hello World」を表示するまでの全手順](https://qiita.com/harufuji/items/b3ebb4ac059587e6168f)

### AWSとは
AWSとは、Amazon Web Serviceの略で、Amazon社が提供する世界最大のクラウドサービスの名称です。
クラウドサービスとは、ネットワーク上にあるさまざまなサービスを必要に応じて利用するシステム形態のことです。

### EC2とは
amazon elastic compute cloudの略で、Amazonが提供する仮想サーバーサービスの名称です。PHPを動かすことができるレンタルサーバーサービスがEC2です。Elasticは「しなやかな」という意味です。

# 全体の流れ
**1. [サーバーを作る](#サーバーを作る)**
**2. [SSHでサーバーに接続する](#sshでサーバーに接続する)**
**3. [Webサーバーをインストールする](#webサーバーをインストールする)**
**4. [PHPをインストールする](#phpをインストールする)**
**5. [ファイルをサーバーに転送する](#ファイルをサーバーに転送する)**
**6. [データベースをインストールする](#データベースをインストールする)**
**7. [データベースを作る](#データベースとユーザーを作る)**
**8. [独自ドメインでアクセスできるようにする](#独自ドメインでアクセスできるようにする)**
**9. [httpsでアクセスできるようにする](#httpsでアクセスできるようにする)** （更新中）

# サーバーを作る
EC2は最初、サーバーがないため、自分でサーバーを作る必要があります。EC2上に作った仮想サーバーを**インスタンス**といいます。ここで、インスタンスを作成します。

### ECダッシュボードを開く
AWSのコンソールにログインします。検索ボックスに「EC2」と入力し、EC2のダッシュボードを検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/fa9979c5-ac84-3d15-2633-525184709c03.png)

### リージョンを選ぶ
EC2のダッシュボードを開きます。右上の[リージョン](https://consulting-glossary.com/item.php?name=Region)を「東京」に変更します。地理的に近いリージョンの方が、Webページの表示速度が速いので、日本向けのWebページは東京を使うことがほとんどです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/af43ba95-6f16-c374-b971-aad55917601f.png)

### インスタンスを作る
「インスタンス」をクリック->「インスタンスを作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/52431c7d-cd9a-772c-96ae-a2e8181af366.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/e84a21db-d1ee-aeb7-9114-5735bf48baa2.png)

### AMIを選ぶ
**AMI**とは、Amazon Machine Imageの略で、初期設定が済んだ[ディスクイメージ](https://consulting-glossary.com/item.php?name=Disk%20image)を意味しています。
AMIを使用することで、あらかじめソフトがインストールされたサーバーを簡単につくることができます。
AWSでは、OSはLinuxがよく使われています。今回は、広く使用されている「Amazon Linux 2 AMI」というAMIを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/fa14922c-8f45-d795-8cc1-e52b86000c08.png)

### インスタンスタイプを選ぶ
無料の「t2.macro」を選び、「次のステップ：インスタンスの詳細の設定」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/4fe5aae2-b8f5-9604-31fb-860706bd4204.png)

### インスタンスの詳細の設定
デフォルトの設定のまま、「次のステップ：ストレージの追加」をクリックします。
「ネットワーク」の項目は[VPC](https://consulting-glossary.com/item.php?name=VPC)を選びます。「vpc-XXXX(デフォルト)」を選択します。XXXXの部分はランダムな値が自動で生成されます。
「[サブネット](https://consulting-glossary.com/item.php?name=Subnet)」の項目は、今回はひとつのインスタンスしか使わないため、「優先順位なし」を選びます。
「自動割り当てパブリックIP」項目は、[パブリックIP](https://consulting-glossary.com/item.php?name=Public%20IP)を設定します。「サブネット設定を使用(有効)」を選ぶと、上記で設定したサブネットがパブリックIPのデフォルト値になります。「サブネット設定を使用(有効)」を選ぶことがほとんどです。
「次のステップ：ストレージの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/cb5a6c11-8a4d-3115-f4a1-95d3aa1a0a0b.png)

### ストレージの追加
デフォルトの設定のまま、「次のステップ：タグの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/aa419610-1758-7721-e92a-1e5f5314da1a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/ec3ab07f-5745-b888-5e59-189de5a2d9b3.png)


### タグの追加
「クリックしてNameタグを追加します」をクリックして、インスタンスの名称を入力します。「次のステップ：セキュリティグループの設定」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/30ab485e-c0ca-15a9-296b-0f560b075d21.png)

### セキュリティグループの設定
セキュリティグループ名、説明に任意のテキストを入力します。警告メッセージは、「どこからでもアクセスできるがよいか」というものです。今回は個人情報を含まない一般的なサイトなため、問題ありません。
「ルールの追加」をクリックし、HTTP、HTTPSを追加します。これで、HTTPSのサイトを作ることができます。
「確認と作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/b5e1fe4f-1079-ca46-1498-37771aaf4fb9.png)
「起動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/30412afd-528d-0811-be43-2453a7a4a4ca.png)

### キーペアの作成
インスタンスにログインするためにログインするときの公開キーと秘密キーを設定します。公開キーと秘密キーの組み合わせをキーペアといいます。「キーペアのダウンロード」をクリックします。ダウンロードしたmyserverkey.pemファイルはインスタンスに[SSH](https://consulting-glossary.com/item.php?name=SSH)でログインするときに必要になります。
「インスタンスの作成」をクリックします。数分待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/48fe2535-b70a-63ec-6aa8-a7823edcd449.png)
「インスタンスの表示」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/a2cb2cd9-b921-cd42-2695-722724425a25.png)
「インスタンスの状態」が「running」になっていれば実行中です。
「パブリックDNS(IPv4)」、「IPv4パブリックIP」はSSHで接続する場合に使用するので、メモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/ae0d843d-e0d3-c7fa-db22-872365fcc8a8.png)

# SSHでサーバーに接続する

インスタンスに繋ぐには[SSH](https://consulting-glossary.com/item.php?name=SSH)を使います。
SSHを使うには、[SSHクライアント](https://consulting-glossary.com/item.php?name=SSH%20Client)が必要です。

### SSHクライアント「Tera Term」をインストールする
WindowsにはSSHクライアントがインストールされていないため、SSHクライアントをインストールします。今回は、国産のオープンソースSSHクライアントである「Tera Term」を使います。ユーザーが非常に多く、さまざまな場所で使われています。

Tera Termダウンロードサイト
https://ja.osdn.net/projects/ttssh2/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/07893d13-1f5b-e018-3a9d-a02309867e67.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/ed11fdfc-507a-d166-9c71-714989a8384d.png)
ダウンロードしたexeファイルをダブルクリックし、インストールします。「コンポーネントの選択」では、標準インストールを選びます。

### Tera Termを使ってインスタンスに接続する
デスクトップに作成されたTera Termのアイコンをダブルクリックして起動します。
TCP/IPのホストには先ほどメモしておいたAWSのパブリックDNS(IPv4)か、IPv4パブリックIPを入力し、OKボタンをクリックします。セキュリティ警告画面に遷移し、「続行」をクリックします。
SSH認証画面のユーザ名に「ec2-user」と入力します。先ほどダウンロードしたキーペアファイルを指定し、OKボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/194890b9-ba12-d35f-b796-927e570b121b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/19f469ff-ab0b-79ff-b2aa-92116ce8bed9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/08b88605-ec0a-4596-f7e0-14d25f7854ae.png)

SSHに接続できました。もし、画面が真っ暗な場合は、Tera Termを再起動してください。

# Webサーバーをインストールする
[Webサーバ](https://consulting-glossary.com/item.php?name=Web%20server)である[Apache](https://consulting-glossary.com/item.php?name=Apache)をインストールします。

### 管理者権限に切り替える
Tera Termに最初に接続したときのユーザは先ほど入力した「ec2-user」です。ec2-userは管理者権限がないため、Apacheをインストールできません。**sudo -i**と入力して、管理者権限であるrootに切り替えます。sudoコマンドとは、管理者権限でプログラムを実行するコマンドです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/009ef660-c2b9-2052-d3ec-e1a36a996f93.png)
**exit**と入力し、Enterを押すと、ec2-userに戻ります。
さらに**exit**を入力すると、SSHの接続が切れます。
ec2-userで捜査しているときは「$」が表示され、rootユーザのときは「#」が表示されます。

### Apacheをインストールする
rootユーザに切り替え、**yum install httpd**と入力して、Apacheをインストールします。「httpd」はApacheのソフト名です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/6d2630b7-44d6-0ffe-8f7a-43dc04c62239.png)
インストールしてよいか聞かれるので、**y**を入力して、Enterを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/b56f9dd8-4fc9-71b5-2bde-60fb0e051d22.png)

### Apacheを起動する
**systemctl start httpd**と入力して、Apacheを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/df610e13-1a2a-df55-e85d-6c70f8a06d16.png)
Enterを押しても何も画面に変化はありません。**systemctl status httpd**と入力し、「active」と表示されれば、起動できています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/ed3a9612-018c-3b6c-cd3f-2bfbc35ddb34.png)

### ブラウザから接続してみる
ブラウザにパブリックIPアドレスを入力し、Webサーバとして稼働していることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/bdd0d353-c72c-d59e-fe5e-81643ee0d7fe.png)

# PHPをインストールする
**sudo -i**と入力して、rootユーザに切り替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/6bb7f222-0d1f-6ad6-d924-6dbdb729fdd8.png)

**yum install php**と入力して、Enterを押します。インストールしてよいか聞かれるので、**y**を入力し、Enterを押します。これでPHPがダウンロードできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/bc0098ba-993c-d3cc-0dc1-303c1074099f.png)

**php -v**と入力し、PHPがインストールされているかを確認します。
バージョンが表示されれば、問題なくPHPがインストールされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/24725525-d77b-9268-4e05-be4b73d5d8cf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/6aa0f342-ce15-040e-7a4c-cde0e1888512.png)

### PHPを有効化する
**systemctl restart httpd**と入力して、Apacheを再起動し、PHPを有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/503662a4-43ff-b16a-2883-e77ae103abc6.png)

# ファイルをサーバーに転送する
### PHPファイルを作る
PHPファイルを作ります。今回は「Hello World」を表示するシンプルなPHPファイルを作りました。

```php
<?php
  echo "Hello world";
?>
```

### アクセス権限の付与
作成したPHPファイルを「/var/www/html」のディレクトリに保存します。
デフォルトでは「/var/www/html」へのアクセス権限がないため、**sudo chown -R ec2-user /var/www/html**と入力し、ec2-userに書き込み権限を与えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/7766c148-ab64-4396-44bb-a18dc3a7e8c0.png)

### PHPファイルをサーバーに転送する
Tera Termを使って、さきほど作ったPHPファイルをサーバーにアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/f0d794e9-8c8e-1dee-bd0e-63992123618b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/91060ccf-e4aa-402c-efc3-d37ee024f258.png)

PHPで作ったWebサイトが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/b098ba90-dcff-3063-3c5e-4398dc62235d.png)

# データベースをインストールする
Amazon Linux 2では、MariaDBというデータベースが採用されてるため、MariaDBをインストールします。MariaDBはMySQLと完全な互換性を持ったデータベースで、phpMyAdminも使うことができます。
MariaDBはすべての機能を無料で使えるため、MySQLの代わりに使われることが増えています。

### MariaDBをインストールする
**yum install mariadb mariadb-server**と入力して、MariaDBをインストールします。インストールするか聞かれるので、**y**を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/947de608-9c1c-a927-5a9f-b7566a392480.png)

# MariaDBを起動する
**systemctl start mariadb**と入力して、MariaDBを初期化し、起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/8bf15540-be9e-6922-44f7-97e61538d7b2.png)

**systemctl status mariadb**と入力して、「active」と表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/985c52ab-937a-5ee0-dc0e-0a2049dcc5fa.png)

# データベースとユーザーを作る
MariaDBは、SQLコマンドで操作します。

### 管理者権限でログインする
**mysql -u root -p**と入力して、rootユーザーでログインします。
パスワードは設定されていないため、何も入力せずに、Enterを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/120db461-14be-f6c3-0abb-7db4899e0017.png)

### 管理者権限（rootユーザー）のパスワードを設定する。
**update mysql.user set password=password('新しいパスワード') where user ='root' ; flush privileges;**と入力し、rootユーザーのパスワードを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/79adde60-2be8-8528-185d-857cf3eb80e9.png)

### データベースを作る
**create database 新しいデータベースの名前;**と入力し、データベースを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/b642d036-18b3-be86-9122-3bba883cb6a9.png)

### rootユーザーに権限を付与する
**grant all privileges on 上記で作ったデータベースの名前.* to 'root'@'localhost' ; FLUSH PRIVILEGES;**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/8208cd42-af84-6daa-e375-c10204818b3b.png)

**show databases;**と入力して、データベースが作られたことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/96f44048-9b62-d7dc-8933-0d1dc6bab457.png)

**exit**と入力して、SQLモードを終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/d60b74d9-9f7d-dd7c-e329-93eabc4bd3c4.png)

### ApacheとMariaDBを自動起動するよう設定を変える
現状、EC2インスタンスを起動すると、ApacheとMariaDBを手動で起動する必要があります。**systemctl enable httpd**、**systemctl enable mariadb**と入力します。これで、EC2インスタンスを再起動時に、自動でApacheとMariaDBを起動するようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/de742eae-9cdb-f2ed-23f8-3d6fc0eb98e8.png)

# 独自ドメインでアクセスできるようにする

### 独自ドメインを設定する流れ
www.example.com のような独自ドメイン名でアクセスできるようにするには以下を行う必要があります。

**1. ドメインを取得する**
AWSのAmazon Route 53という機能で独自ドメインを取得します。
Route 53を使ってドメインを取得すると、ドメインの連絡先情報のプライバシー保護が有効化されているので安心です。WHOIS情報に個人情報は表示されません。

**2. 固定IPアドレスを割り当てる**
EC2インスタンスのパブリックIPアドレスは、ずっと同じであることが保証されていないため、変わってしまう可能性があります。Elastic IPという機能を使って、パブリックIPアドレスを固定化します。
Elastic IPは1ヶ月で3～4ドルかかるため、Elastic IPアドレスは使わなくなったら解放します。ただし、一度解放すると、二度と同じIPアドレスでアクセスできなくなります。Webサイトを再開する可能性がある場合は解放しないようにします。

**3. ドメインを関連付ける**
固定IPアドレスと独自ドメインを関連付けます。

### ドメインを取得する
Amazon Route 53というDNS（ドメインネームサービス）を用いて、独自ドメインを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/d7f0329b-a38b-8085-5c5b-ffecb8d3f15e.png)
「Domain registration」をクリックします。取得したいドメインの名称を入力し、カートに入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/128eed58-eb36-523a-0e77-8039ab3a31be.png)
年数を入力し、「続行」をクリックします。登録者の連絡先を入力し、「続行」をクリックします。個人の場合、プライバシーの保護は「有効化」を選びます。メール認証が終わればドメイン申請は完了です。

### 固定のIPアドレスを割り当てる
EC2インスタンスのElastic IP機能を使って、固定のIPアドレスを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/e52006ca-c9c5-462c-7b51-1f4d4d55b893.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/df213b17-8547-c9f5-64ee-335637c1fa38.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/51e9d434-7638-8284-be63-19b9d26fb72f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/e1d1495b-dbdb-ef48-3980-a5bf9bda78f6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/863f5b08-d356-a898-5ea5-e2d3819d8555.png)

### Aレコードを設定する
DNSサーバーで、IPアドレスとドメインを結びつける項目をAレコードといいいます。
Route 53を開き、ホストゾーンを選択します。さきほど取得したドメインを選択して、「レコードセットに移動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/7e5147d0-1f3b-fb77-e9e3-a7787f82940b.png)

「レコードセットの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/d1ebf6c8-57d6-3684-cb2a-1709cbbe00e5.png)

名前はブランク、タイプは「A-IPv4 アドレス」、値はさきほどメモしたElastic IPアドレスを入力し、「作成」をクリックします。10分ほど待てば、独自ドメインにアクセスできるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/31c9f214-5e95-6458-8387-05581b3495ce.png)

http://www.example.com/ や　http://www.example.com/ でアクセスできるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/662e4a17-0645-b5e9-e995-34e8c8ba98f6.png)


# #httpsでアクセスできるようにする
（更新中）