テックキャンプ109日目〜EC2の自動デプロイ

kobasaです(´ω`*)
とりあえずカリキュラムに沿ってAWSサーバーの設定は完了しました。
本番環境でユーザー登録・出品・購入機能は確認済み。
自動デプロイも設定できたっぽいけど、実際に機能を追加すると動いてくれるかな?

109日目の勉強内容

アプリケーションサーバーとWebサーバー

アプリケーションサーバー:Unicorn

アプリケーションサーバーは動的コンテンツを処理する役割がある。
Webサーバーから送られてきた情報をアプリケーションサーバー内で処理し、
処理結果をWebサーバーに渡す。

Webサーバー:Nginx(エンジンエックス)

NginxはWebサーバーの一種で、ユーザーのリクエストに対して静的コンテンツのみを取り出し処理を行い、レスポンスをクライアントに返す。

動的コンテンツの生成はアプリケーションサーバー(Unicorn)に依頼し、アプリケーションサーバーから返ってくる処理結果をクライアントに返す。

#Nginxを再起動するコマンド
sudo systemctl reload nginx

#Nginxを起動するコマンド
sudo systemctl start nginx

自動デプロイツール

Capistrano

「Capistrano」は、自動デプロイツールと呼ばれるものの一種。
自動デプロイツールを利用することにより、デプロイ時に必要なコマンド操作が1回で済むようになる。
これにより、手動デプロイする場合に起こりがちなコマンドの打ち間違い・手順の間違いや手順が多く煩わしい、といった問題を解消できる。

またCapistranoはローカルのターミナルからコマンドを実行するのでEC2にログインしなくて良い。

#ローカルのターミナル、アプリケーションのディレクトリで実行
bundle exec cap production deploy

自動デプロイ後に生成されるディレクトリ

一度Capistranoによる自動デプロイを実行すると、本番環境のアプリケーションのディレクトリ構造に、新たなディレクトリが追加される。

releasesディレクトリ

Capistranoを通じてデプロイされたアプリがひとまとめにされている。
過去分のアプリが残っているので、デプロイで何か問題が発生しても前のバージョンに戻ることができる。
いくつ前のバージョンまでを保存しておくかの設定が可能。

currentディレクトリ

releasesディレクトリの中で一番新しいものが自動的にコピーされているような状態になっている。
現在デプロイされている内容はcurrentディレクトリの内容ということになる。

sharedディレクトリ

バージョンが変わっても共通で参照されるディレクトリが格納される。
log、public、tmp、vendorディレクトリが当てはまる。

アプリケーション編集から自動デプロイまでの流れ

①ローカルでVSCodeを修正した場合:
変更点をリモートリポジトリにcommit⇨push(ブランチを切っていればmergeも)

②ローカルでデータベース関連の内容を修正した場合:

#本番環境でコマンドを実行
rails db:drop RAILS_ENV=production
rails db:create RAILS_ENV=production

#実行の際に必要なオプション
DISABLE_DATABASE_ENVIRONMENT_CHECK=1

③Nginxを修正した場合

#本番環境で実行
sudo systemctl restart nginx

④再度自動デプロイを実行する場合(本番環境でサーバーを再起動する場合)
①②の場合のみ実行する。一度プロセスをkillしてからコマンドを実行

bundle exec cap production deploy

自動デプロイのための設定はめちゃくちゃややこしい(省略)
うまくできなかったり、別のアプリで設定するときはカリキュラム見ながらでないと無理ぽいね(´・ω・`)

コメント

タイトルとURLをコピーしました