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 LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツール。
👉EC2内でsudo systemctl start mariadb
(DBを起動)sudo systemctl status mariadb
(ステータスの確認)という形で使用できる。
- 今まで
rails s
で「アプリケーションサーバー」を立ち上げていたのかと理解。アプリケーションの立ち上げ→正しいドメインにアクセスすることによって初めてアプリが使える。(動く)
手動デプロイ編
ローカルホストの時は、それを
puma
が担っていたが、今回のAWS EC2のデプロイではUnicorn
を使用して実装すること。Unicorn
は、プロセス(プログラムの実行単位)ごとにアプリケーションを管理する。
手順 | puma の時(ローカル環境) |
Unicorn の時(本番環境) |
---|---|---|
1 | 「Ctrl」+「c」でサーバーを止める | 「ps aux | grep unicorn」でプロセス確認 「kil 〇〇」でプロセス停止 |
2 | 「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
でアセットファイルをコンパイルできること。
- ルーティングを変えたら、サーバーを再起動する必要があったように、EC2インスタンスのDBを設定したり、アセットをコンパイルしたり、環境変数の設定をおこなった場合には、ユニコーンを再起動する必要があること。
- 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)やりたいこと
追加実装を学ぶためのミニアプリ作成
オリジナルアプリの作成
PHPの勉強
面白そうだから参加したい・見たい(済:やめ太郎さんのキータ表彰・yahooイベント)
読書
(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