githubにあるrailsアプリをAWSにデプロイ

# 記事を書くにあたって
　アルバイト先の塾内システムを構築している学生の記事です。
　なおかつ初投稿ですので、至らない部分が多いと思いますが、よろしくお願い致します。

　今回は、年末年始に試行錯誤したのちに辿り着いたデプロイの流れを紹介します。
　[メインの参考文献1](https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90)の中で、上手くいかなかったことを修正しながら進めていきます。
　流れと同時にコードも紹介しますが、細かい説明は添付の記事を参照ください。
# 0. 環境
Ruby 2.5.1
rails 5.2.4.4
mysql 8.0
Amazon Linux 2
nginx
unicorn
##1. VPCの作成からSSH通信によるEC2インスタンスへのログイン
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90
この文献の作成者様がYouTubeにて[動画](https://www.youtube.com/watch?v=DYoXhTUfm98&list=WL&index=1)をアップしてくれています。

上記の記事の
1. VPCの作成
2. サブネットの作成
3. インターネットゲートウェイの作成
4. ルートテーブルの作成
5. セキュリティグループの作成
6. EC2インスタンスの作成(ここでは**Amazon Linux 2**を選択する)
7. Elastic IPの作成、紐付け
8. SSH通信によるインスタンスへのログイン
を実行する。
***
6.EC2 instance AMI Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-01748a72bed07727c (64 ビット x86) / ami-0f53b51ee1388fd0b (64 ビット Arm)を選択。

# 2. mariadbを削除し、mysqlをインストール
**参考文献2**：https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06

Amazon Linux 2はcentOS7ベースで作られているため、デフォルトでmariadbが入っている。

参考文献2の通り実行する

# 3. EC2インスタンスの環境構築
1.と同じ記事を参考
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

参考文献の通り
・必要なパッケージのインストール
・rbenvのインストール
を済ませたのちにrubyのインストールでは[こちら](https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e)（参考文献3）を元に以下のコードを実行する。

```
$ rbenv install -v 2.5.1
$ rbenv global 2.5.1
$ rbenv rehash
```

バージョンの確認

```
$ ruby -v
```

参考文献1に戻り、
・node.jsのインストール
・railsのインストール
・bundlerのインストール
を行う。

# 4. githubと連携
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

参考文献の通り
・githubと連携
・アプリのclone
を行う。

# 5. master.keyの登録
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

master.keyは機密情報が入ったcredentials.ymlの暗号を解くための鍵ファイル。(ローカルのconfigディレクトリに両方入ってる。詳しくは[こちら](https://techtechmedia.com/team-development-deploy/)(参考文献4)
そのため、gitignoreされておりgit cloneを行っても、本番環境に降りてこない。

アプリのディレクトリに移動し、

```
$ vi config/master.key
```

を実行し、新規にmaster.keyを本番環境に保存する。

**中身はローカルのmaster.keyからコピペする。**

その後、参考文献1の
・credentials.ymlの設定
を行う。

# 6. mysqlのrootパスワードを変更し、設定を行う。
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

mysqlをインストールした際に初期パスワードが設定されている。
それを変え、データベースの設定を行う。


[こちら](https://qiita.com/miriwo/items/c0ba0ff17c329700fc9e)（参考文献5）の通り、rootのパスワードを変更する。

その後、参考文献1の
・mysqlへ接続確認。先ほど設定したパスワードを入力してmysqlに接続できればOK。
・config/database.yml の編集
を行う。

# 7. nginxの設定
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

nginxは以下のコマンドよりインストールする

```
$ sudo amazon-linux-extras install nginx1
```

その後、参考文献1の
・nginxの設定変更(以下のコマンドより)

```
$ sudo vi /etc/nginx/conf.d/ec_site.conf
```

・権限変更
を行う。

# 8. Unicornの設定
**参考文献1**：https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view#1-VPC%E3%81%AE%E4%BD%9C%E6%88%90

参考文献1の通り
・Gemfileに記述
・インストール実行
の後に、文献ではマイグレーションを行っているが、先にデータベースを作成する。

```
$ rake db:create RAILS_ENV=production
```

その後は参考文献1に戻り
・マイグレーションの実行
・assets コンパイル実行
・EC2の再起動
・Nginxの起動
・Unicornの起動
・Unicornの起動の確認
を行う。

1.で登録したelastic IPで検索をかける。

```
http://xxx.xxx.xxx.xxx/
```

git cloneしたアプリが表示されれば、AWSへのデプロイ完了です！

***お疲れ様でした！！！***

# 最後に
参考文献1に頼りまくってデプロイを行いました。

デプロイ後には多くの人が独自ドメインの設定をすると思います。
以下の書籍を参考にするのがおすすめです。
[ゼロからわかるAmazon Web Services超入門 はじめてのクラウド (かんたんIT基礎講座)](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8BAmazon-Web-Services%E8%B6%85%E5%85%A5%E9%96%80-%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89-%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93IT%E5%9F%BA%E7%A4%8E%E8%AC%9B%E5%BA%A7/dp/4297106612/ref=sr_1_15?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=AWS&qid=1611901898&sr=8-15)

非常に参考になりますが、今回の記事のように、そのままそっくり真似てもエラーが出る箇所があります。
今度はそれについて記事を書きたいと思います。（就活に余裕ができたら）

ありがとうございました。

--2020/02/02 追記
S3を用いた静的webサイトのデプロイについても記事を書きました。よろしければご覧ください。
[【AWS】S3 + Cloud9 + CertificateManager + CloudFront + Route53 で静的webサイトを独自ドメインでSSL化して公開](https://qiita.com/hasebetakumi/items/0133a164666fa3579391)