【メモ】AWS EC2でLaravel初期画面表示するまでRDSも

#概要

今回はAWSの無料アカウントでサーバを用意してLaravelの初期画面を表示します。
先日教えて頂いたので手順のみ残しておくために書きました。
AWSは無料枠内での利用です。

DBに関しては記事末にRDSの設定方法も用意しています
(MySQL)

##参考にしたページ

[メイン](https://qiita.com/atto/items/e1effd28c212c3829cb0)
[webサーバー](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html)
[swap memory](https://evisu0414.com/engineer/engineer010/)
[RDS] (https://qiita.com/na0AaooQ/items/7c69a88c80f1efb4cad3)
[RDS phpMyAdmin](https://hacknote.jp/archives/40002/)

## AWS EC2でwebサーバを立てる
### アカウントの登録

[AWSアカウント作成画面](https://portal.aws.amazon.com/billing/signup?sc_icampaign=acq_jp_h_nav_cta_201809_b&sc_ichannel=ha&sc_icontent=awssm-1354&sc_iplace=cta&trk=ha_awssm-1354_acq_jp_h_nav_cta_201809_b&redirect_url=https%3A%2F%2Faws.amazon.com%2Fregistration-confirmation&language=ja_jp#/start) にアクセスすると以下の画面になります。
それぞれの項目を入力して「続行」してください。

※パスワードはパスワード生成サイト等で強固なものを用意することをお勧めします。
![繧ｹ繧ｯ繝ｪ繝ｼ繝ｳ繧ｷ繝ｧ繝・ヨ 2019-03-17 16.17.25_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/9adc793b-2e76-481b-bc4c-a250a453dd18.jpeg)

### 連絡先入力

次の画面も任意の情報を入力していきます。
会社で使う場合はプロフェッショナル、個人で使う場合はパーソナルです。
**住所の辺りは日本語ダメなのでローマ字表記で書きましょう**。

![スクリーンショット (45)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/d775448d-72f1-d741-721f-fcd69980b10a.jpeg)

### 支払い情報入力 ~ コンソールにサインイン

- 支払情報を入力します
- 本人確認を携帯等で済ませます
- ベーシックプランを選択します
- 右上のコンソールにサインイン
- 登録したメールと
無料枠を使いますが、カードの登録が必要です。
無料枠以外の使い方をしなければ基本的には大丈夫です。


![スクリーンショット (46)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/89cb861b-0a9b-737e-728e-74a6ccd88943.jpeg)

### EC2の利用設定(インスタンス生成)


**--画面右上のオハイオを「アジアパシフィック(東京)」に変更しておく**。
![スクリーンショット (47)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/eadcd736-bf4a-bc69-d451-e5638812dfed.jpeg)

**その後左上の「サービス」を開き、EC2を選択します**


![スクリーンショット (48)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/a4c5e2be-729b-beee-a4a0-809ae8b05030.jpeg)

**--インスタンスの生成を押す**

![スクリーンショット (49)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/abc85289-e156-6051-fb02-30767642ab3c.jpeg)

**--Amazon Linux AMIを選択**

![スクリーンショット (50)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/9edb578f-4cd6-728f-0baf-cb32804e30b1.jpeg)

**--無料枠が選択されているので右下の「次のステップ」を押す**

![スクリーンショット (51)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/41376b5c-3f9d-ec06-ed53-cad23c2d4067.jpeg)

**--「終了保護の有効化」にチェックを入れ「次のステップ」**

![スクリーンショット (52)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/ec93b4b9-0723-b8bf-5561-7ec72a6019b3.jpeg)


**--ストレージのサイズを任意で変更(無料なら30まで)**

![スクリーンショット (53)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/ae875b1d-2944-1dab-69e1-b70dc288aa5f.jpeg)

**--[Name]タグを追加して[次のステップ]**

![スクリーンショット (55)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/8e578938-eade-4b17-fddb-c44e1332d7d6.jpeg)

**--[タイプ: HTTP]のルールを追加して「確認と作成」**

![スクリーンショット (56)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/d7c60768-26c9-8258-7b6c-96c109141081.jpeg)


**--設定内容を確認して右下の「起動」を押す**

![スクリーンショット (57)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/7552414e-eb01-0a9f-57d9-6baff6d329dc.jpeg)

**--新しいキーペアを作成しダウンロード後、「インスタンスの作成」**

![スクリーンショット (59)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/0b85f904-202d-0818-58d7-0d27441f7b27.jpeg)

**--「インスタンスの表示」を押す**

出てきた画面で生成されたインスタンスを確認します

![スクリーンショット (60)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/5650fb28-e5c2-4afc-5701-88d25e7b57c2.jpeg)



### Elastic IPをインスタンスに割り当てる
先ほど作ったインスタンスにパブリックのIPを割り当てます。


**--サイドバーから「Elastic IP」を選択**

写真の通りにボタンを推し進めてください


![スクリーンショット (66)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/dceb3119-6542-1874-bf5a-efa7417c4e08.jpeg)
![スクリーンショット (61)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/5cc21c61-657f-775c-8eff-9fb11f6c2b7a.jpeg)
![スクリーンショット (62)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/bf4729a2-7304-b25b-aefe-00a8e68c65c0.jpeg)
![スクリーンショット (63)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/6ca14f9c-c635-b00c-59ee-0f7d1d44053c.jpeg)
![スクリーンショット (64)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/5fff266c-d616-eb76-9e27-5bdc9f882091.jpeg)
![スクリーンショット (65)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/bb3a8617-beed-0239-bf1a-9daa4dfe0e84.jpeg)

これで作成したインスタンスにネット経由でアクセスできるようになりました。


## laravelが使えるようにする

###LAMP環境を整える

#### LAMPサーバー

ssh接続します。
先ほど作ってダウンロードしたキーペアを使ってサーバに入ります。
ec2-userという名前で入ってます

windowsの場合は`putty`や`tera term`でssh接続してください

【macのターミナル】
```
$ssh -i /User/{あなたの名前}/Downloads/{あなたの鍵名}.pem ec2-user@{インスタンスのipアドレス}
```
例）

```
ssh -i /Users/takashi/Downloads/myserver.pem ec2-user@3.115.181.26
```

インスタンスに入れたら、ソフトウェアの更新を行います。

```
sudo yum update -y
```

その後、webサーバ(Apache)、PHP(7,
.0)、MySQL(56?)を入れていきます。

```
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
```

インストールしたApacheを起動します

```
sudo service httpd start
```

インスタンスが起動されたりしたあと、自動でApacheも起動するようにします

```
sudo chkconfig httpd on
```

httpdが有効になっているか確かめます

```
chkconfig --list httpd
```
結果の2,3,4,5が(on)
>2:on 3:on 4:on 5:on

となっていれば大丈夫です


次に、ファイル権限をいじります

①ec2-userをapacheグループに追加

```
sudo usermod -a -G apache ec2-user
```

②`/var/www`とそのコンテンツのグループ所有権をapacheグループに変更

```
sudo chown -R ec2-user:apache /var/www
```
③グループ書き込み許可を追加し、これからできるサブディレクトリにグループIDを適用するために、`/var/www`とサブディレクトリのパーミッションを変更します。

```
sudo chmod 2775 /var/www
```
```
find /var/www -type d -exec sudo chmod 2775 {} \;
```

④グループ書き込みを許可するために、`/var/www`とそのサブディレクトリのファイル許可を変更します

```
find /var/www -type f -exec sudo chmod 0664 {} \;
```

⑤LAMP webサーバーのテストを行います。以下を実行した後、ブラウザから`{インスタンスのIPアドレス}/phpinfo.php`にアクセスしてみてください

```
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
```

このような画面が表示されればうまくいっています

![スクリーンショット (67).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/1edb514d-8af4-3d2d-ef5b-efd9442beda2.png)

確認が済んだら`phpinfo.php`は削除しておきます

```
rm /var/www/html/phpinfo.php
```

#### DBサーバーのセキュリティ

①MySQLサーバの起動

```
sudo service mysqld start
```

②mysql_secure_installationの実行

最初にパスワードを聞かれますが未設定なのでそのままエンターを押し、
その後「y」を入力して新しいパスワードを2回いれます。

その後に続くやり取りは、すべて「y」で進んで構わないです。


```
sudo mysql_secure_installation
```
③webサーバと同じく、起動と同時にMySQLサーバを起動させるようにします

```
sudo chkconfig mysqld on
```

#### phpMyAdminをインストールする

①必要な依存ファイルをインストール

```
sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
```
②apacheの再起動

```
sudo service httpd restart
```

③`/var/www/html`に移動

```
cd /var/www/html
```

④このドキュメントルートにphpMyAdminのパッケージをダウンロードします

```
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
```

⑤phpMyAdminファイルを作ってそこにパッケージを展開します

```
mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
```
⑥`phpMyAdmin-latest-all-languages.tar.gz`を削除します

```
rm phpMyAdmin-latest-all-languages.tar.gz
```

⑦ブラウザで`phpMyAdmin`が開くか確認する

`インスタンスのIPアドレス/phpMyAdmin`にアクセス


![スクリーンショット (72)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/f712d797-5b47-214d-a220-61af88f94aa7.jpeg)

これでphpMyAdminを入れられました


### Laravelプロジェクトを作成する

#### composerをinstallしたりとか

```
curl -sS https://getcomposer.org/installer | sudo php
```
```
sudo cp composer.phar /usr/local/bin/composer
```
```
sudo ln -s /usr/local/bin/composer /usr/bin/composer
```


#### SWAPメモリの確保
そのままLaravelプロジェクトをインストールすると固まったりすることも
あるそうなので回避策

```
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
```
```
sudo /sbin/mkswap /var/swap.1
```
```
sudo /sbin/swapon /var/swap.1
```
```
free
```

この後、`Swap`の欄に数字があればOKです

今後OSの再起動の際に自動的に同じ処理をするように設定しておきます

```
sudo cp -p /etc/fstab /etc/fstab_yyyymmdd
```

```
vi /etc/fstab
```

開いたエディタで以下を追加
```
/swap_ext1    swap    swap    defaults    0 0
```

これで大丈夫です

![スクリーンショット (68)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/29441e65-1024-42c3-72b8-867a1c9708f4.jpeg)


#### Laravel プロジェクト作成

ようやくLaravelを入れます。

```
cd /var/www
```

```
composer create-project --prefer-dist laravel/laravel {プロジェクト名}
```

ドキュメントルート変えたりします
`viエディタ`使います

以下を実行すると、、

```
sudo vi /etc/httpd/conf.d/custom.conf
```
こんな画面になります。
![スクリーンショット (71)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/44e67d47-563a-aeff-d07d-750e0f8eda3a.jpeg)

**キーボードの`i`を押すと左下に[INSERT]の文字が出てます。すると、入力できるようになります**

![スクリーンショット (70)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/a5ce0440-87a1-0a79-6720-d93c339d0f87.jpeg)

入力できるようになったら、以下のように入力してください

```
Alias /{プロジェクト名} /var/www/{プロジェクト名}/public

# .htaccess 有効化
<Directory /var/www/{プロジェクト名}/public>
    AllowOverride All
</Directory>
```

その後`Esc`キーを押し、`:wq`と入力してEnter押すとエディタから出られます


設定を変えたのでwebサーバを再起動します

```
sudo service httpd restart
```

権限を変更していきます

```
sudo chmod -R 777 /var/www/{プロジェクト名}/storage
```
```
sudo chmod -R 775 /var/www/{プロジェクト名}/bootstrap/cache
```

`{インスタンスのIPアドレス}/{プロジェクト名}`をブラウザで開いて
Laravelの初期画面が表示されていれば全て完了です

![スクリーンショット (73)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/541590e2-1afb-3d52-5330-8352427b6a30.jpeg)



## AWS RDS

### セキュリティグループ

- EC2の画面左から「セキュリティグループ」を押す

![スクリーンショット (87)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/3e826549-9216-4ef5-a577-5bfad866ba5b.jpeg)

- 新しいセキュリティグループを作成します

RDSに接続させることができるセキュリティグループを後ほど入力するので、上でEC2を作った時にできたセキュリティグループのIDをコピーしておき、その後「セキュリティグループの作成」を押します。

![スクリーンショット (90)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/3439f877-c095-ff87-9f1b-11d1d5f1628f.jpeg)

- 以下を設定後「作成」を押します

①「ルールの追加」を押す
②「ソース」の部分に先ほどコピーしておいたEC2のセキュリティグループIDを張り付ける
③「タイプ」を「MYSQL/Aurora」を選択
④「セキュリティグループ名」「説明」を入れて「VPC」でデフォルトを選択

--> 「作成」

![スクリーンショット (91)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/35b5022b-9a4b-2c1a-8f7b-d92384e29bc5.jpeg)


これでセキュリティグループに関しては完了です

### サブネットグループ

- 「サービス」の「RDS」の左の「サブネットグループ」を選択し「DBサブネットグループの作成」を押す

![スクリーンショット (92)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/fc6095e7-a4f7-84e6-7bbe-4641f71c7d14.jpeg)


- 「名前」「説明」「VPC」を入力・選択します

![スクリーンショット (93)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/bdc28275-80ff-1113-e854-d5e459880a97.jpeg)

- アベイラビリティゾーンを2通り選択して両方に「サブネット」を追加します

**「このサブネットグループのサブネット」が2つ設定されていることを確認し「作成」を押す**


![スクリーンショット (97)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/f6dde07c-2218-315c-0f96-bf2870aebec1.jpeg)


以上で「サブネット」の設定は完了です。


### パラメータグループ

- 「RDS」のパラメータグループを選択、「パラメータグループの作成」を押す

![スクリーンショット (95)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/4726bbe7-6ca1-31f4-e5fa-2c176d8cf08e.jpeg)

- 画像のようにそれぞれの項目を選択し、「作成」を押す

![スクリーンショット (96)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/d3e7efdd-3693-014c-51a8-b7c210b3055e.jpeg)

これでパラメータグループは完了です

### RDSインスタンス作成

- RDSの項目の「データベースの作成」

**※以下の画像の上部の「元のインターフェースに切り替える」を選択しています**


「データベースの作成」を押すと以下の画面が表示されるので「MySQL」を選択し「次へ」を押します

![スクリーンショット (99)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/00e30a2c-60bf-5497-a459-1d219556033c.jpeg)

- 画像のように無料枠のものを選択

**※以下説明がない部分はデフォルトで進めて頂いて大丈夫です**

![スクリーンショット (102)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/bec7d8a0-5896-408d-c728-14cd6ee3d194.jpeg)


- 以下のように進める

①上のパラメータグループで設定したMySQLのバージョンに合わせて設定

②無料枠指定にチェックを入れる

③「DBインスタンス識別子」「マスターユーザの名前」「マスターパスワード」をそれぞれ入力し「次へ」を押す

![スクリーンショット (103)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/eced53b7-f08f-55e3-4af4-a70c9a7a2072.jpeg)

![スクリーンショット (105)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/98b97811-98a4-eca6-03e5-bec942ff4d7b.jpeg)

- サブネットグループ、セキュリティグループ

「サブネットグループ」「セキュリティグループ」を先ほど設定したものに選択しておく

![スクリーンショット (107)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/33fb647d-be9b-72ac-4f27-8f838ce3cb7c.jpeg)

- パラメータグループを選択

![スクリーンショット (108)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/9a0f387a-ca40-b67c-aabe-4f1e1aecea39.jpeg)

- 削除保護の有効化にチェックを入れておく

![スクリーンショット (115)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/1e7ea9df-f226-3b20-8171-953cf25e8d69.jpeg)


これで「データベースの作成」を押すとしばらく待ち、作成完了を待つ

### RDS phpMyAdminからアクセスする

次に今作ったRDSにphpMyAdminからアクセスできるようにします

#### EC2インスタンスにssh接続します

windowsの場合は`putty`や`tera term`でssh接続してください

【macのターミナル】

```
$ssh -i /User/{あなたの名前}/Downloads/{あなたの鍵名}.pem ec2-user@{インスタンスのipアドレス}
```
#### phpMyAdminの設定変更

```
cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php
```

```
sudo vi /var/www/html/phpMyAdmin/config.inc.php
```

これでエディタに入るので
`$cfg['Servers'][$i]['host'] = 'localhost';`
の部分を
`$cfg['Servers'][$i]['host'] = '【エンドポイント】';`
に変更してください

**※エディタの操作は記事上部を参考にしてください**

エンドポイントは以下で確認できます

- RDS の「データベース」を選択すると画像のような画面が表示されるので丸が付いたリンクをクリック

![スクリーンショット (116)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/8c6892af-2b18-7214-8a47-e19615b70bda.jpeg)

- 画像の部分にエンドポイントがあります

 ![スクリーンショット (117)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/508788/efed082c-6e1c-9eb2-d7ae-515fb64c9481.jpeg)


これでphpMyAdminの設定は完了です

`phpMyAdmin`の画面でRDSインスタンス作成の際の「マスターユーザ名」「マスターパスワード」を入れて`phpMyAdmin`の中に入ることができたら完了です