デプロイツールのデファクトスタンダードとなった『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