###背景
AWSへのデプロイ時に多くのエラーに悩まされたため、記事にまとめようと思いました。
私と同じような初学者の方の役にたてば嬉しいです!
###構成
私自身はRuby on Rails, VPC/EC2(Nginx,Unicorn)/RDS(PostgreSQL)/Route53/ALBを使用してデプロイしました。
デプロイ時に参考にした記事
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce
https://qiita.com/Yuki_Nagaoka/items/1f0b814e52e603613556
###共通
psコマンドを使用することでプロセスを確認することができます。
psコマンドについて参考にした記事
https://eng-entrance.com/linux-command-ps
$ ps -x #現在実行中のプロセスを確認するコマンド
###アプリケーション関連
デプロイ先のアプリケーションでwe're sorry, but something went wrong.
と表示されてしまった場合。アプリに問題があるか確認します
$ cd log
$ tail -n 30 production.log
エラーの記載があるとアプリケーションに問題があります。特にエラーの記載がなければ、Webサーバーの設定に問題があり、正常にデプロイできていない可能性が高いです。
###nginx関連
・nginxが起動しているか確認
$ sudo systemctl status nginx
Active: active (running)
と表示されていれば起動しています。
・再起動コマンド
$ sudo service nginx restart
・nginxのファイルにエラーがあるか確認
$ sudo nginx -t
エラーがある場合はエラー箇所を教えてくれる便利なコマンドです。特にnginxのファイルに問題がなければこのように表示されると思います。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
###Unicorn関連
Unicornのログを確認するコマンド。
よくあるエラーとしては、不要なプロセスが残っている場合に発生する Already running on PID:(プロセス番号)
が挙げられると思います。
$ cat log/unicorn.log -n
Unicornのプロセスの確認コマンド
$ ps -ef | grep unicorn | grep -v grep
Unicornのプロセスを終了するコマンド
Already running on PID:(プロセス番号)
のエラーが発生した際は、こちらのコマンドで不要なプロセスを消すことでエラーが解決すると思います。
$ kill (プロセス番号)
###PostgreSQL関連
PostgreSQLが起動しているか確認するコマンド
Active: active (running)
となっていれば起動しています。
$ systemctl status postgresql.service
PostgreSQLを起動させる
$ sudo systemctl enable postgresql
$ sudo systemctl start postgresql
###その他
####GoogleChrome, http関連
GoogleChromeでデプロイしたアプリケーションにアクセスすると、強制的にhttps(https化未実施の時)にアクセスして、アプリケーションが開きませんでした。
解決策は、Chromeの履歴→閲覧履歴データの削除→キャッシュされた画像とファイルにチェックを入れ、履歴データを削除することでした。
下記のコマンドでレスポンスを確認することができます。
webサーバのファイルにエラーもなく、curlコマンドでレスポンスがしっかりと返って来るのに、httpsにリダイレクトしてしまう場合は、この問題の可能性もあります。
$ curl http://example.com #http://example.com はアプリのドメイン。
また、httpで接続する場合は
config.force_ssl = false
にしておく必要があります。
$ config.force_ssl = false
####https化
当初はWebサーバーのファイルを編集することで、https化をしようと考えましたが、AWSのALBというサービスを使用する方がhttps化は容易であると知ったため、ALBを使用しました。初学者の方でhttps化に手こずっている方は、ALBを使用するのが個人的におすすめかなと思います。
ALBを使用することで、httpリクエストをhttpsにリダイレクトすることができます。
[htttps化の参考にした記事]
https://aws.amazon.com/jp/premiumsupport/knowledge-center/elb-redirect-http-to-https-using-alb/
https://dev.classmethod.jp/articles/alb-redirects/
この他にも「ALB https リダイレクト」と検索すると参考になる記事がたくさん出てきます!