20210203・4_アウトプット(最終課題説明文・オリジナルアプリAWSデプロイ)

アウトプット画像

2/3行ったこと 
  • 履歴書の作成…1時間
    👉6割進んだ。

  • 最終課題説明文作成…4時間
    👉オリジナルアプリや、最後の課題についてどういう点を工夫・苦労しているか客観的に考える機会になった。

2/4行なったこと 5時間30分
  • オリジナルアプリのAWS EC2へのデプロイ
    👉一番最後のcapistranoによる自動デプロイのところでエラーになってしまった。



新しい発見について

AWS EC2で感じた疑問

(1)Elastic IPを割り当て後、環境構築のために様々なツールをインストール(Node.jsやRuby、その後Nginxの導入等)をするが、これらはインスタンスごとに新規で設定をしていくという理解であっているか?
👉インスタンス毎に新規で設定が必要。理由は、本番環境毎にパッケージをインストールする必要があるため。



(2)無料枠で利用しようとした場合に、
①古いアプリケーション(ポートを設定したけれど解放する側)・・・IPアドレスを解放
②新しいアプリケーション(2つめのインスタンスを作りElastic IP アドレスを割り当てようとしている側)…ポートを解放し、それ以後のインストールなどを進める
③もし、また古いアプリケーションを再度利用したい場合…セキュリティポートの設定からやり直しを行い、インスタンスと、ダウンロードした鍵の名前.pemと、Elastic IPを紐付け。その後もう一度様々なツールのインストールも再び必要
という理解であっているか?
👉①②はあっている。③だけ修正。「インスタンスの停止」のみであれば、再設定は不要。「インスタンスの停止+Elastic IPの解放」を行うと再度、環境構築が必要。インスタンスを終了するのか停止するのかには大きい違いがあることも知った。無料枠で収めるためには、古いほうのアプリケーションの「インスタンスの停止+Elastic IPの解放」を実施してから、新しいアプリケーションの設定をおこなっていく必要がある。



(3)Elastic IPはインスタンスごとに割り振られる番号が違うという理解であっているか?それともAWSの1アカウントごとに1つの番号なのか?
👉Elastic IPはインスタンスごとに異なる。また一度解放してしまうと、再度割り当てた際には番号が変わる。



AWS EC2の2回目のデプロイでそうだったのか💡と感じたところ

  • systemctlコマンド(システムコントロール)とは、Amazon LinuxCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツール。
    👉EC2内でsudo systemctl start mariadb(DBを起動)sudo systemctl status mariadb(ステータスの確認)という形で使用できる。


  • 今までrails sで「アプリケーションサーバー」を立ち上げていたのかと理解。アプリケーションの立ち上げ→正しいドメインにアクセスすることによって初めてアプリが使える。(動く)

手動デプロイ編

  • ローカルホストの時は、それをpumaが担っていたが、今回のAWS EC2のデプロイではUnicornを使用して実装すること。

  • Unicornは、プロセス(プログラムの実行単位)ごとにアプリケーションを管理する。

手順 pumaの時(ローカル環境) Unicornの時(本番環境)
「Ctrl」+「c」でサーバーを止める 「ps aux | grep unicorn」でプロセス確認
「kil 〇〇」でプロセス停止
rails s」を実行する RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D」で再起動

※ 「RAILS_SERVE_STATIC_FILES=1」は、Railsコンパイルされたアセットを見つけられるように指定している。


  • 手動デプロイする時は、GitHub上で変更があったときに、EC2内で[ec2-user@ip-172-31-23-〇〇 <リポジトリ名>] git pull origin masterを行い、masterの内容をEC2インスタンスに反映させる必要があること。


  • [ec2-user@ip-172-31-23-〇〇 <リポジトリ名>]$ rails assets:precompile RAILS_ENV=productionでアセットファイルをコンパイルできること。



  • Nginx(エンジン・エックス)はWebサーバーで、静的コンテンツのみであればレスポンスを返して、動的コンテンツだと処理できないので、アプリケーション本体に処理を依頼する役割があるのかと理解。(アプリケーション本体が終わった処理を、クライアント側へ返す処理もする)


自動デプロイ編

  • Capistranoの便利なところとして、ssh接続しなくても、ローカルのターミナルからbundle exec cap production deployを打てば反映される(めっちゃ便利)と理解。

  • Nginxの設定を変更したら、忘れずに再読込・再起動が必要なこと。

[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl reload nginx
[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl restart nginx


  • 本番環境でデータベースがactiveになっていないとデプロイに失敗すること。
# ①ステータスの確認
[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl status mariadb 

# ②activeになっていなかったら立ち上げる
[ec2-user@ip-172-31-25-189 ~]$ sudo systemctl start mariadb 


  • 自動デプロイする前には、Unicornのプロセスをkillすること。(自動デプロイがサーバーを立ち上げる役割も担っているので、二重になってしまう)




感想

  • 言語化して魅力を伝えるのって楽しいけど、難しい。(文章をじっくり考えるのは好き)

  • AWS EC2のデプロイについて、前回に比べて意味が理解できて(頭の中に入ってくる感覚があって)嬉しかった。

  • 最近、寝不足。ゆっくり寝たいけれど、転職に向けて進めたい気持ちもある。体調崩したら、元も子もないためもう少し寝るようにしよう💦




覚書(12/29計画の見直し)

(1)やるべきこと (2)やりたいこと (3)やれること

(1)やるべきこと

  • 卒業要件の完成

(2)やりたいこと

(3)やれること

メンタル:楽しみながら、ゲーム感覚でいく🎮😎

時間で区切り(達成すればよし)
  • 1日 15分以上勉強する
追加実装のミニアプリを作り、引き出しを増やす
優先順位 内容(機能) 締め切り 達成度
1 AWS S3 12/18 完了(フリマアプリ)に実装)
2 AWS EC2 12/24 完了(フリマアプリに実装)
3 ウィザード形式 12/27 完了
4 SNS認証 12/28 完了
5 複数条件検索 12/29 完了
6 タグ付 12/31 完了
7 画像プレビュー 1/2 完了※フォーク
8 複数枚写真OK 1/4 完了※7に追加実装
9 コメント機能(即時更新) 1/8 完了
10 クレカ登録 1/10 完了
11 パンくず 1/14 完了
12 日本語エラー 1/18 完了



身に付ける力(直近)

  • PHP7

  • Docker


身に付ける力(ゆくゆく・覚書)

  • ドメイン駆動開発

  • 環境構築

  • 環境変数などのOS知識

  • バージョン対応力

  • データベースをインポートする力・エクスポートする

  • GitHubActions×OpenAPIGenerator(APICilent)