【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法【その4〜Railsアプリの公開編〜】

#AWSにRailsアプリをイチから上げるシリーズ　項目表
|No|タイトル|
|:---|:---|
|その1|[ネットワーク、データベース設定編](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2)|
|その2|[EC2設定編](https://qiita.com/Yuki_Nagaoka/items/5be084c6efe1f797fd94)|
|その3|[サーバー設定、Railsアプリ配置編](https://qiita.com/Yuki_Nagaoka/items/dbb185feb6d4f051c2f2)|
|その4|[Railsアプリの公開編](https://qiita.com/Yuki_Nagaoka/items/1f0b814e52e603613556)|
|その5|[ドメイン設定編](https://qiita.com/Yuki_Nagaoka/items/3020f02d3fd74c8572a0)|
|その6|[http→httpsへSSL化編](https://qiita.com/Yuki_Nagaoka/items/55ed1610cfc1f59398b1)|

#【 第6章 】ロードバランサーを設定する
Elastic Load Balancing を利用してロードバランサーの設定を行います。

##1.ロードバランサーの作成
EC2の画面左の「ロードバランサー」を選択して、詳細ページ左上の「ロードバランサーの作成」を選択してください。
![image44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/25cfbdd3-158e-ce65-8772-3789b49b8735.png)


**ロードバランサーの種類の選択**
「Application Load Balancer」の「作成」を選択
![image52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/86f14c82-e159-01c1-6eed-db2cd2a7483b.png)


**手順 1: ロードバランサーの設定**
以下の通り項目に記載

**基本的な設定**
1 . 名前：「アプリ名-ELB」
2 . スキーム：「インターネット向け」にチェック
3 . IP アドレスタイプ：「ipv4」

**リスナー**
デフォルトのままでOK

**アベイラビリティーゾーン**
1 . VPC：「VPC_for_アプリ名」
2 . アベイラビリティーゾーン：「ap-northeast-1a」「ap-northeast-1c」共にチェック

**タグ**
1 . キー：「Name」
2 . 値：「アプリ名-Webserver」

「次の手順：セキュリティ設定の構成」ボタンを選択する。
![image53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/ec7413bc-d368-9567-3257-b66934ad2f9d.png)


**手順 2: セキュリティ設定の構成**
デフォルトのままでOKです。
「次の手順：セキュリティグループの設定」ボタンを選択する。

**手順 3: セキュリティグループの設定**
以下の通り項目に記載
1 . セキュリティグループの割り当て：「既存のセキュリティグループを選択する」にチェック
2 . 「アプリ名-SecurityGroup」のレコードにチェック
「次の手順：ルーティングの設定」ボタンを選択する。
![image54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/2ea31c85-353d-cdf0-02a2-8d0adb911373.png)


**手順 4: ルーティングの設定**
以下の通り項目に記載

**ターゲットグループ**
1 . ターゲットグループ：「新しいターゲットグループ」
2 . 名前：「アプリ名-Target-Group」　※記入
3 . ターゲットの種類：「インスタンス」にチェック
4 . プロトコル：「HTTP」
5 . ポート：「80」

**ヘルスチェック**
1 . プロトコル：「HTTP」
2 . パス：「/」

**ヘルスチェックの詳細設定**
1 . ポート：「トラフィックポート」
2 . 正常のしきい値：「5」
3 . 非正常のしきい値：「2」
4 . タイムアウト：「5」
5 . 間隔：「10」　※修正
6 . 成功コード：「200」

「次の手順：ターゲットの登録」ボタンを選択する。
![image55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/c8d29426-c0fb-ddb7-ea78-0b96f0446c00.png)


**手順 5: ターゲットの登録**

下部の「インスタンス」欄から、
「アプリ名-instance」にチェックを入れ、
「登録済みに追加」ボタンを選択する

「アプリ名-instance」が上部の「登録済みターゲット」欄に
移動した事を確認

「次の手順：確認」ボタンを選択する。
「作成」ボタンを選択する。
![image56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/95ddcadd-8b74-534f-f973-79ddf33b7746.png)


一覧画面から作成したロードバランサーを確認し、一定時間経過後、状態が「active」なら完了。
![image57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528239/74642f2c-9172-a7c1-404e-98dd7f5c4320.png)


#【 第7章 】Railsアプリの起動

##1.アプリの起動手順

長い長い行程を経て、やっとアプリの起動です。

EC2へSSHでログインし、Railsアプリをプリコンパイルする

```bash:サーバー環境
$ bundle exec rake assets:precompile RAILS_ENV=production
```

Nginxを再起動

```bash:サーバー環境
$ sudo service nginx restart
```

Unicornを起動

```bash:サーバー環境
$ bundle exec unicorn_rails -c /var/www/rails/アプリ名/config/unicorn.conf.rb -D -E production
```

Uniconの起動を確認(プロセスのリストが3行程表示されればOK)

```bash:サーバー環境
$ ps -ef | grep unicorn | grep -v grep
```

ブラウザからIPを叩いてアクセス ※IPアドレスはElastic IP

```bash:ブラウザ
http://IPアドレス/
```

Railsアプリが無事動作すれば成功

###（補足4）`We're sorry, but something went wrong.`と表示
残念ながらアプリが作動しなかった場合は、以下のコマンドを試してログを確認してみてください。

```bash:サーバー環境(/var/www/rails/アプリ名/)
$ cd log
$ tail -n 30 production.log
```

エラーの記載があれば、デプロイは出来ているがアプリ内でエラーが発生しています。
エラーの記載が無ければ、デプロイが出来ていない可能性があります。

-----


これにてAWSへのRailsアプリのデプロイが完了です！！
いやぁ〜長かった！
お疲れ様でした！！

とりあえずアプリの公開は出来ましたが、URLが数字のままだと微妙ですね。
次はRoute53を使用して公開したアプリのURLにドメインを適用していく手順を記載します。
ただし、ここまでは1年無料を利用できましたが、Route53もドメインも有料になるので、それでも良い人は次のページもみてください！

[その5〜ドメイン設定編〜](https://qiita.com/Yuki_Nagaoka/items/3020f02d3fd74c8572a0)

#参考
・ [世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce)
・ [RailsアプリをAWSにイチからデプロイするまでの手順メモ](https://www.codeofduty.me/2018/01/31/railsapp-aws-deploy/)
・ [RailsアプリをAWSでデプロイする②(各種設定編)](https://techdeeper.jp/articles/8)

初心者でも構築することが出来ました、丁寧なご説明本当にありがとうございます
※当記事では一部バージョンの変更や手順の省略を行っております

また、[世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで](https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce)は、各処理がどの様な役割を担っているか、ネットワークの解説付きなので、デプロイ出来た方も一読する事を強くオススメします。