デプロイツールのデファクトスタンダードとなった『Capistrano3』。stagingやproductionといった複数環境へのデプロイを標準で対応していたり、bundleやmigration、pumaとの連携なども抜群です。
かなり乗り遅れてしまいましたが、最近ようやくRails 5.1をcapistrano3系でデプロイしました。ずっとHerokuやElastic Beanstalkにばっかり頼っていたのでちょこちょことハマって苦労しました。今後忘れないための忘備録メモっす!
rbenv, rvmの両方に対応しました。オリジナルのcapコマンドの作り方も書きました!
🐮 前提条件
今回の環境では次のような環境を想定しています。
* DB: PostgreSQL |
🗻 PostgreSQL DBの準備
デプロイ先のDBの接続用ユーザーとデータベースを作成するために、次のコマンドをstaging環境とproduction環境で実行します。
PostgreSQLの場合
こちらは、PostgreSQLを使う場合の手順です。
# postgreユーザーになる |
😎 Gemfileの追加
Gemfile
に次のGemを追加して、bundle install
を実行。
group :deployment do |
🐝 Capistranoの設定ファイルを生成
次のコマンドでCapistranoの設定ファイルdeploy.rb
らを生成。
bundle exec cap install |
🎉 Capfileの設定
Capfile
を次のように変更します。
# Load DSL and set up stages |
🐹 Capistrano共通のデプロイ設定
まず、共通のデプロイ情報をdeploy.rb
に記入していきます。
lock '3.9.1' |
🐰 環境別のデプロイ設定
次に環境ごとに異なる設定をconfig/deploy/staging.rb(production.rb)
に記述していきます。
set :branch, 'master' |
🏀 wheneverの設定
サーバ側のcronの設定をコードで簡単に管理できるwheneverは、『Wheneverは導入が超簡単なcrontab管理ライブラリGemです![Rails4.1]』を参考に設定!
🍄 初回インストール
本番環境へのデプロイは次のように実施します。
bundle exec cap production deploy:initial |
🚌 デプロイ手順
デプロイに必要なディレクトリを生成して、デプロイを実行。
# productionへのデプロイ |
🎳 補足:capコマンドの一覧を表示したい場合
capコマンドの一覧を表示したい場合は次のコマンドを実行します。
bundle exec cap -T |
😸 補足:deploy時にブランチを選択したい場合
set :branck, 'マスタ'
の部分を次のように書き直し。
set :branch, `feature/xxx` |
👽 補足:サーバへのファイルのアップロードをしたい場合
namespace :devops do |
😼 nginxとの連携
- Rails5+Puma+Nginxな環境をCapistrano3でEC2にデプロイする(後編)
- How To Deploy a Rails App with Puma and Nginx on Ubuntu 14.04
🗽 CentOSのセキュリティ改善
🐯 参考リンク
- capistrano 3.x系を使ってrailsをデプロイ | iii ThreeTreesLight
- Capistrano3で快適デプロイ生活!! - Less is Best
- seuros/capistrano-puma
- Copy local files to remote server using capistrano 3 (Example)
- javan/whenever: Cron jobs in Ruby
- capistrano/rbenv: Idiomatic rbenv support for Capistrano 3.x