20210205_アウトプット(AWS EC2によるデプロイ) 

アウトプット画像

2/5行ったこと 3時間55分
  • 昨日学んだことのアウトプット…1時間40分

  • オリジナルアプリ…1時間
    👉AWS EC2インスタンスでデプロイできた✨2回目にして意味をやっと理解!

  • 今日学んだことのアウトプット…1時間15分

新しい発見について

AWS EC2によるデプロイ(やっと全体像を理解)

  1. ローカル環境にて、GitHubを使いながら開発。

---デプロイ---

  1. AWSのEC2インスタンスという仮想サーバーを作成!

  2. 仮想サーバーの作業するには遠隔操作なのでsshで接続するよ。

  3. 仮想サーバーには大きく3つの設定が必要。

(1)Webサーバー👉Nginx
クライアントからのリクエストに対し、
①静的コンテンツならすぐ返す!
②動的コンテンツなら(2)へ聞きに行ってから結果を返す!
という役割をする。

(2)アプリケーションサーバー👉Unicorn
ローカル環境においてrails spumaを起動していたように、GitHubのマスターにある情報をプルした後、 仮想サーバー内でアプリケーションのオンオフを担う。
gemのインストール、環境変数の設定、オプションでメモリ増強のためのスワップファイルの作成を行った!


(3)データベース👉Maria DB
AWSMySQLを使用するためにMaria DBを使用。
(今回は、Amazon Linux 2のため)

手動デプロイ

  • (1)(2)(3)に関わるコマンドについて、ssh接続の上、コマンド実行する。

  • ローカル環境と違う点としては、本番環境においてアセットコンパイルは自動で行われないので自分で行う必要がある。なぜならばパフォーマンスを重視するためアクセス毎にコンパイルされないような設定になっているため。

自動デプロイ

  • 毎回、ssh接続しながらそれぞれのコマンドを打つのは面倒・・

  • そんな時に便利なのが、Capistrano

  • sshせずに、ローカル環境(カレンとディレクトリが現在のアプリ)からコマンド一つで実行できる。

  • 具体的にはGitHubの最新情報チェック・プル、アセットコンパイル、DBマイグレート、ユニコーンの起動などをコマンド一つで実行してくれるよ。




SSH keys

エラーが出て上手くいかなかった時、この緑に光っているのと光っていない違いはなんだろう?と思った。

Github sshkeys width=50%

結論は、デプロイで接続されるとグレーから緑になることがわかった💡
接続しているssh keysなのか判断する時に使える。




動的コンテンツと静的コンテンツの違い

JavaScriptについて、エンドポイントを設定し、コントローラーと協力しながらサーバーとのやりとりを行うのが「動的コンテンツ」と理解。
なので、requireで読み込んでいるだけのclickhoverをイベントリスナーとしたJavaScriptは「静的コンテンツ」になる💡




EC2インスタンス




インスタンスを停止したら・・・

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

を行ってから、bundle exec cap production deploy




感想

  • 嬉しかったのは、ブログを書いてアウトプットしたことによって、AWS EC2の意味がわかったこと!!昨日の記事を書いていたら、全体を通してAWSでのデプロイはこういう流れでこういう意味で行うのか?とだんだんわかってきて、自分の言葉で説明できるようになった。

  • 今思うと、1回目の時は、流れもわからず、途中に「DSLプログラム」とか「インスタンス」など聞いたことない単語の意味もわからず、一通りデプロイできたものの「???」という感じだった。

  • 2回目は意味もちゃんと理解したい!と思いもう一度チャレンジして、エンジンエックスってWebサーバーで表面のところやりとりしてくれていたのね、とかキャピストラーノでssh接続しなくていいの本当に楽だなとか、それぞれの持つ役割が理解できて嬉しかった。

  • そして、インスタンスの停止したらエラーになってしまい焦ったけれど、もう一度データベース等を再起動したらできたのでよかった。

  • 寝不足すぎて、頭痛💦今日は早く寝る。


覚書(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)