【ruby on rails AWSデプロイ】Capistranoでの自動デプロイとcapタスク作成
前回でrailsの手動でのデプロイの設定が終わりましたので、今回はCapistranoを用いた自動デプロイを備忘録します。
※これまでの点も色々と抜けている点があるとも思いますが、追記していきます。
・AWSの無料枠
・EC2の解放(AWSの登録は省略します)
・Linuxサーバの設定
・webサーバNginx設定
------------
・【自動デプロイ】capistrano設定 ←今回はここ
・IAMユーザの登録
・S3(ストレージ)の設定
自動デプロイツール
development環境から簡単にデプロイ作業ができます。
今回は設定からcapタスクを作成してローカルからデプロイ作業を行えるようにします。
■capistranoの導入
・gemfileのdevelopment環境とtest環境に追記します。
$bundle install
・capistranoの設定ファイルを追加します。
$cap install
※以下のファイルが作成されます
mkdir -p config/deploy
create config/deploy.rb //capistrano全体の設定ファイル
create config/deploy/staging.rb //staging環境の設定ファイル
create config/deploy/production.rb //production環境の設定ファイル
mkdir -p lib/capistrano/tasks
create Capfile //設定ファイル
Capified
・Capfileの設定変更(初期設定)
↓
・config/deploy.rb(capistrano全体の設定ファイル)の編集
備忘録
・set :名前,値 で設定し、fetch :名前 で取り出す invoke 呼び出し
・current:releases(デプロイするたびにファイルを配置されている)に入っている最新のディレクトリに対するシンボリックリンク(releasesの最新フォルダ→current)
・シンボリックリンク:特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする(つまりショートカット)
注① EC2上の/var/www/アプリ名 の配下にsharedフォルダ、currentフォルダ、releasesフォルダがあり、sharedフォルダ配下の全てのフォルダにリンクを張っています(unicorn.rbの設定の時shared配下におくよう記載しています)
https://github.com/capistrano/rails
※すごく詳しい参考サイトさま
https://qiita.com/syou007/items/9b8a2f4d1ff099c64fc5
・config/deploy/production.rb(production環境の設定ファイル)
設定の参考サイトさま
https://qiita.com/aplifyjp/items/5d24394dbd03712a2f1f
※注意点
Capistranoを入れると、現在のEC2のアプリが入っているフォルダ(例:/var/www配下)にcurrentフォルダか作成され、今後は /var/www/current配下を参照することになります。
設定やログファイルなども移動しますので、間違えないようにした方が良いです。
・タスク一覧の表示
$bundle exec cap -T
------------------------
略
cap deploy:finished # Finished
cap deploy:finishing # Finish the deployment, clean up server(s)
cap deploy:finishing_rollback # Finish the rollback, clean up server(s)
cap deploy:log_revision # Log details of the deploy
cap deploy:migrate # Runs rake db:migrate if migrations are set
cap deploy:migrating # Runs rake db:migrate
------------------------
【例】自動デプロイコマンドだと
cap deploy # Deploy a new release
→$bundle exec cap production deploy
【例】マイグレーションコマンドだと
cap deploy:migrating # Runs rake db:migrate
→$bundle exec cap production deploy:migrating
今回はrake seedを実行したかったため、config/deploy.rb(capistrano全体の設定ファイル)に以下4つのrakeタスクを設定しました。
上の記述で4つのseedデータの取り込みコマンドがローカルから実行できます。
※登録したコマンドrake seedの設定はrakeタスクとして別に作成したものを使用しています。rake taskの作成については別記事に記載します。(まだまだ勉強中ですが,,)
$bundle exec cap -T
------------------------略
cap deploy:seed_category # reload the database with category_seed data
cap deploy:seed_other # reload the database with other_seed data
cap deploy:seed_product # reload the database with product_seed data
cap deploy:seed_user # reload the database with user_seed data
//4つ増えた!
------------------------略
実行例:$bundle exec cap production deploy:seed_other
capコマンドに登録しなければEC2上からrake seedしないといけないのでしょうか。そこは分かりませんが,,
設定してタスク・流れの参考にさせていただいました
https://labs.gree.jp/blog/2013/12/10084/
https://easyramble.com/capistrano3-rake-db-seed.html
※(2020.3追記)
capistranoのマイグレーションのcapタスクがこちらに記載されています。参考に
※記載中のコードのスペースがうまく反映されていませんがすみません🙇♀️