AWS(EC2 + RDS) でLaravel環境構築

![スクリーンショット 2021-08-21 11.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/9d5b0f0f-ac4f-587f-c72e-f25e51314eec.png)
AWS EC2のインスタンス作成〜Laravelのマイグレーション実行までの備忘録です。

実行環境
MACOS

#EC2インスタンスの作成

##リージョン選択
画面右上のリージョンを選択します。

今回は「東京リージョン」を選択します。
詳しい違いは以下のサイトが参考になりました。
https://www.t3a.jp/blog/infrastructure/aws-best-region/

簡単にいうと、
スピード重視：東京、大阪
金額重視：バージニアなど
を選ぶとよいです。

![スクリーンショット 2021-08-21 10.04.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/2926d35c-4e83-83a0-0199-3412c74b2f90.png)

##マシンイメージ（AMI)選択
AMIとは、インスタンスを作成するのに必要なOSやサーバー情報のテンプレートのことです。
Linux,Windows,macOSなどを選択できます。

今回は、無料枠で使える「Amazon Linux」を選択します。
![スクリーンショット 2021-08-21 10.20.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/38ed1089-0ffb-d696-dfc1-a8732ec8b43c.png)

##インスタンスタイプ選択
ここではCPUやメモリを選択します。
無料枠で使える「t2.micro」を選択します。

![スクリーンショット 2021-08-21 10.21.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/63215a85-ae31-83c1-29ab-f2b2e27f925c.png)

##インスタンスの詳細の設定
ここは特に変更不要です。

![スクリーンショット 2021-08-21 10.21.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/08cb2985-f949-83cf-7f82-67bbb7639ec6.png)

##ストレージの追加
ここは特に変更不要です。
![スクリーンショット 2021-08-21 10.25.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/c88b1b15-0feb-6887-fc0d-c619950679dd.png)

##タグの追加
管理しやすいようにインスタンスにタグをつけます。

![スクリーンショット 2021-08-21 10.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/017ce5ae-28b2-9488-edca-06cddc257a25.png)

##セキュリティグループの設定
ここではファイアウォールの設定を行います。
「ルールの追加」をクリックし、HTTP、HTTPSを追加します。
セキュリティグループ名を任意の名前に変更します。

![スクリーンショット 2021-08-21 10.28.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/b194638d-c175-3332-8192-41f208f0c559.png)

##インスタンス作成の確認
設定を確認してください。
渓谷メッセージが出ますが、今回はブラウザで表示確認をしたいため、無視してよいです。
「起動」をクリックします。

![スクリーンショット 2021-08-21 10.35.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/57b1ea38-2ddd-0542-d734-d22fb8853d0d.png)

##キーペアの作成
「起動」をクリック後、SSH接続を行うためのキーペアの作成ができます。
「新しいキーペアの作成」を選択し、
暗号化方法として、RSAとED25519が選択できます。ED25519の方が強固で速いそうです。
キーペア名を入力したら、「キーペアのダウンロード」をクリックします。
ダウンロードしたら大事に保管してください。

##ステータス確認
作成ステータスが確認できます。
少し時間が経ったら画面を更新すると、ステータスが「running」になります。

##インスタンスに接続

実行中のインスタンスにチェックを入れ、右上の「接続」をクリックします。

![スクリーンショット 2021-08-21 10.54.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/bcc1cee1-4f6b-1d6d-bbbb-e4158a2a72c8.png)

「SSHクライアント」タブを選択します。

![スクリーンショット 2021-08-22 16.01.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/19fe857f-3369-f1ff-12f4-209920806272.png)

MAC環境であればターミナル、WindowsならTelaTermなどから、
pemファイルがあるディレクトリに移動し、以下を実行します。
（編集されるのを防ぐため）

```
chmod 400 <なんとか.pem>
```
次に以下のコマンドでインスタンスに接続します。

```
ssh -i ""<なんとか.pem> <インスタンス名>
```
以下が聞かれたらyes

```
Are you sure you want to continue connecting (yes/no)? yes
```

これでSSH接続完了です。

![スクリーンショット 2021-08-21 11.01.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/4b950c56-8243-0d16-5ee8-1ef375b2289e.png)


#RDSデータベースの作成

mysqlのデータベースを作成していきます。
「データベースを作成」をクリック

![スクリーンショット 2021-08-21 11.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/ee1dad2f-6ed9-cf28-132d-215a2538c566.png)

無料枠で作成します。
＊ここで設定したパスワードを忘れないように

![スクリーンショット 2021-08-21 11.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/dff34d35-d58e-3342-b085-955572bd1a11.png)


・標準作成
・mysqlを選択

![スクリーンショット 2021-08-21 11.04.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/cff94baf-a19a-61e4-f0bf-b685522af19b.png)

・データベース名（後からでも作れる）
・他はデフォルト

![スクリーンショット 2021-08-21 11.08.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/9df10c0c-0242-babd-f5a8-192f2d8a2b30.png)

VPNも一緒に作成
（初めて作る場合はVPCセキュリティグループは新規作成）

![スクリーンショット 2021-08-21 11.07.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/1c1f0fc8-4906-ca70-2623-306d6198fef6.png)

最後に「データベースの作成」をクリックします。
しばらくしたら、利用可能になります。

##セキュリティグループを設定
作成したRDSインスタンスのセキュリティグループをEC2作成時に設定したセキュリティグループと同じにします。![スクリーンショット 2021-08-22 17.20.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620908/f6e9710f-4dd4-1bde-a378-d99e55996c8d.png)

以上でRDSの設定は完了です。
EC2に接続し、以下コマンド実行で確認

```
mysql -h <DBインスタンス> -P 3306 -u admin -p
```

#EC2の準備

次に以下のコマンドでインスタンスに接続します。

```
ssh -i ""<なんとか.pem> <インスタンス名>
```

パッケージのアップデートをします。

```
sudo yum update -y
```
MySQL、Git、Apache、cURLをインストールします。

```
sudo yum -y install mysql git httpd curl
```

Apacheを起動してみます。
＊エラーが出たらservice httpd configtestでどこがおかしいか確認してください。

```
sudo systemctl start httpd
```

#Laravelの起動

GitHubにソースを上げておいてください。
EC2に接続し、Gitのユーザー名とメールアドレスを設定

```
git config --global user.name "hoge"
git config --global user.email hoge@hoge.co.jp
```

PHPをインストールします。
（バージョンは任意）

```
sudo amazon-linux-extras install -y php7.3
```

コンポーザーをインストールし、パスを通します。

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

プロジェクトのディレクトリを作成します。
今回は/var/www

権限を変更します。
```
sudo chown ec2-user:ec2-user /var/www
```

プロジェクトのディレクトリに移動し、git cloneします。

```
git clone なんとか.git
```
Composerのパッケージをインストールするために必要なライブラリをインストールします。

```
sudo yum install -y php-xml
```

composerをインストールします。

```
composer install
```

php-mbstringがないエラーが出た場合はインストール
`yum -y install php-mbstring`

他のエラーが出たら取り合えず以下のコマンドを試す。
`composer update`

それ以外はちゃんと調べる。

Apacheにプロジェクトのパスを通します。

```
sudo vi /etc/httpd/conf/httpd.conf
```
以下の部分を修正します。

```
DocumentRoot "/var/www/<プロジェクトディレクトリ>/public"
```

以下コードを追加

```apache
<Directory /var/www/<プロジェクトディレクトリ>/public>
 AllowOverride All
</Directory>
```

以下のコマンドで再起動します

```
sudo service httpd restart
```

.envファイルを作成します。

```
cp .env.example .env
```

（設定例）

```
APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=false  ←trueだと設定情報漏れるので注意
APP_URL=http://localhost
```

APP_KEYを生成します。

```
php artisan key:generate
```

`Application key set successfully.`が表示されれば成功

権限の付与

```
chmod -R 777 storage
chmod -R 777 bootstrap/cache
```

EC2のパブリック IPv4 DNSで画面が表示されるか確認してください。
表示されない場合は以下確認
・https,http
・`config:chache`、`config:clear`、`route:clear`コマンド

デフォルトのルートが残っていると`route:clear`でエラーが出ます。

```php
Route::get('/', function () {
    return view('welcome');
});
```
は次のように変えるとよいです。

```php
Route::view('/', 'welcome');
```

最後にDB設定をします。
.envを編集します。

```
DB_CONNECTION=mysql
DB_HOST=<RDSインスタンス>
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=admin
DB_PASSWORD=password
```

マイグレーションを実行

```
php artisan migrate
```

以上、で環境構築終了です。
お疲れ様でした。

#参考文献
https://noumenon-th.net/programming/2020/04/10/ec2-rds-laravel/