Laravel Docker AWS EC2デプロイ①

この記事では、laravelで開発したポートフォリオのAWS EC2へのデプロイについて紹介していきます！
記事が長くなりそうなので、細かい説明とは省いてなるべく実行手順のみ記載していくようにします！

##ポートフォリオ使用技術
フロントエンド：HTML5、CSS、bootstrap4.5.0、Tailwindcss2.2.15
バックエンド：PHP7.4.15、Laravel8.34.0、Jetstream1.0、Livewire
インフラ：Docker20.10.2、nginx1.18、MySQL8.0.23/phpMyAdmin、Apache2.4.38、AWS S3

##デプロイ環境
デプロイ先：AWS EC2
サーバー：nginx（Apacheの場合も記載しました。)

##1.AWS EC2 インスタンス作成
1.[AWS](https://aws.amazon.com/jp/free/?trk=ps_a134p000003yhoPAAQ&trkCampaign=acq_paid_search_brand&sc_channel=ps&sc_campaign=acquisition_JP&sc_publisher=google&sc_category=core-main&sc_country=JP&sc_geo=JP&sc_outcome=devadopt&sc_detail=aws&sc_content=Brand_Core_aws_e&sc_matchtype=e&sc_segment=487544183164&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Core-Main|Core|JP|EN|Text|dx&ef_id=Cj0KCQiA-qGNBhD3ARIsAO_o7ylN-WxcYmU47JwMJWIpdADeUydCNFl1OFwpvWsSlFH9H8CAzQJss74aAgX0EALw_wcB:G:s&s_kwcid=AL!4422!3!487544183164!e!!g!!aws&gclid=Cj0KCQiA-qGNBhD3ARIsAO_o7ylN-WxcYmU47JwMJWIpdADeUydCNFl1OFwpvWsSlFH9H8CAzQJss74aAgX0EALw_wcB&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all）)からログインしてEC2画面にアクセス。
2.画面右上のリージョンを「東京」に。
3.「インスタンスを起動」をクリック。
![スクリーンショット 2021-12-02 21.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/2848d05a-62e9-15be-a8cf-960e6a21cad2.png)

4.「AWS Linux2」を選択。
![スクリーンショット 2021-12-02 21.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/4b1c7555-fa30-592c-fdc0-cd75f395114d.png)
5.無料枠の「t2.micro」を選択。→次のステップでステップ5まで移動。
※ステップ3、4はデフォルトのまま。
![スクリーンショット 2021-12-02 21.58.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/b0388376-9850-6543-4c5e-d9a5104a3f00.png)
6.「タグを追加」→「キー」と「値」を入力。
![スクリーンショット 2021-12-02 22.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/b396675c-0032-7d15-6c30-0ca7c497a7ff.png)
7.「ルールの追加」→「HTTP」と「HTTPS」を追加→「確認と作成」
![スクリーンショット 2021-12-02 23.07.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/5a79274a-49f1-3a2c-eafb-f2ac3eca388e.png)

8.「起動」
![スクリーンショット 2021-12-02 22.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/a0824bc7-547e-254d-8fce-d5b5dae89ca9.png)
9.「新しいキーペアの作成」→「キーペア名」入力→「キーペアのダウンロード」でローカルに保存→「インスタンスを作成」
![スクリーンショット 2021-12-02 22.09.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/c9e9c108-8917-c91c-8aa8-5199e1e848fb.png)
10.作成されたインスタンスにチェック→接続
![スクリーンショット 2021-12-02 22.14.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/09e51bfb-305d-bea9-f961-ef7c330d611b.png)


![スクリーンショット 2021-12-02 22.13.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/5f26c93d-0d65-ff16-fede-9116e1c11a28.png)

11.10の接続情報を元にターミナルからリモート接続を実施。

```
$ cd #ターミナルをスタート地点へ

$ mkdir ~/.ssh　　　#.sshディレクトリを作成

$ mv Downloads/sample-key.pem .ssh/ #mvコマンドで、「キー.pem」を.sshディレクトリに移動

$ cd .ssh/ #.sshにディレクトリ移動

.ssh $ ls #pemファイルが存在するか確認。「sample-key.pem」が存在すればOK

.ssh $ chmod 400 sample-key.pem #キーファイル（○○○.pem）のパーミッションを変更

.ssh $ ssh -i "sample-key.pem" ec2-user@ec2-??-??-???-???.ap-northeast-1.compute.amazonaws.com #ログイン（AWS 接続画面記載のコードをコピペ）

Last login: Thu Dec  2 06:14:35 2021 from p3014131-ipoe.ipoe.ocn.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```
##nginxをセットアップ
今回はnginxをセットアップしますが、Apache2を使用したい方はApache2のインストールを参考にしてください。

###Apache2の場合

```
[ec2-user@ip-172-31-45-44 ~]$ sudo yum update #パッケージアップデート
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                      | 3.7 kB  00:00:00     
No packages marked for update
#「No packages marked for update」は、アップデートするパッケージがないということなのでこのままでOK。

$ sudo yum install apache2
```

※初めに選択したAMIがAWS Linux2の場合、aptコマンドが使用できない為、apt→yumに変更してコマンド実行。

###nginxの場合

```
#EC2インスタンスは、nginxのyum intstallが有効になっていない為、有効化。
[ec2-user@ip-172-31-45-44 ~]$ sudo amazon-linux-extras enable nginx1

[ec2-user@ip-172-31-45-44 ~]$ sudo yum -y install nginx #インストール

[ec2-user@ip-172-31-45-44 ~]$ nginx -v #バージョン確認

[ec2-user@ip-172-31-45-44 ~]$ sudo systemctl enable nginx #nginx自動起動化

[ec2-user@ip-172-31-45-44 ~]$ sudo systemctl start nginx.service #起動

[ec2-user@ip-172-31-45-44 ~]$ sudo systemctl status nginx.service #起動確認
```

##続く
AWSインスタンス一覧画面→作成したインスタンスにチェック→画面下のインスタンス情報内のパブリックIPv4アドレスからアクセス→サーバーの初期画面が表示されればインスタンスの作成とサーバーのセットアップが完了です！
![スクリーンショット 2021-12-02 22.57.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601015/e6b60787-3f0c-f163-a58b-3842eaf11424.png)

とりあえずここまでお疲れ様でした！
まだ初めの段階ですが、エラーに引っかかってしまうとこれだけの作業でも時間が過ぎてしまいますよね。。
記事が長くなってしまう為、続きはパート2で紹介していきます！

https://qiita.com/yyy752/items/601646d3683869521f9b


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

https://qiita.com/gyu_outputs/items/f0ab345402362e43db80

https://qiita.com/Hide-Zaemon/items/f4a0599b7c8cb3559ca0