Capistranoとは?
デプロイ自動化ツール、複雑なデプロイをコマンド一つで自動化することができる。
メリット
- コマンド一つでアプリの更新に対応してくれるのでデプロイが非常に楽になる。
- 作業ミスのリスクが減る。
インストール
Gemへの記述
1 2 3 4 5 6 |
group :development, :test do gem 'capistrano' gem 'capistrano-bundler' gem 'capistrano-rails' gem 'capistrano-rbenv' end |
capistrano-rails
デプロイする際のbundle install等のために必要
capistrano-rbenv
rbenvでRubyをインストールしている場合に必要
インストール
1 |
bundle exec cap install |
プロジェクト階層
階層 | 説明 |
---|---|
root | |
├Capfile | Capistrano全体の設定ファイル、Capistranoのプラグインをrequireしていく。 |
├config | |
├deploy | |
├production.rb | デプロイ環境別の設定 |
└staging.rb | デプロイ環境別の設定 |
└deploy.rb | prodction環境、staging環境どちらにも当てはまる設定を記述する。デプロイの流れをまとめたもの。これを「デプロイレシピ」と呼ぶみたいです。 |
└lib | |
└capistrano | |
└tasks |
root/config/deploy/production.rb or staging.rb
- サーバーホスト名
- AWSサーバーへのログインユーザー名
- サーバーロール
- SSH設定
- その他、そのサーバに紐づく任意の設定
root/config/deploy.rb
- アプリケーション名
- gitレポジトリ
- 利用するSCM
- タスク
- それぞれのタスクで実行するコマンド
releasesフォルダ
デプロイされたアプリはここにまとめられる。
デプロイ
下記コマンドを実行します。デプロイしたものを再度デプロイし直したい場合も同様のコマンドで実行可能です。
1 |
bundle exec cap production deploy |
デプロイレシピ
set [オプションとなるシンボル] [値]
Capistranoのオプションの設定に使う。
オプション名 | 説明 |
---|---|
application | アプリ名 |
deploy_to | デプロイ先のパス |
rbenv_type
|
rbenvの設定 |
rbenv_ruby
|
Rubyのバージョン |
keep_releases
|
リリースフォルダをいくつまで保持するか。 |
keep_assets
|
過去のリリースで作られたassetsのフォルダ数を何世代残すのかの設定 |
branch | ブランチの設定がしたい場合に使用する。 |
log_level
|
Capistranoの出力ログの制御 |
pty | sudoを使用する場合はtrueにする。 |
logrotate_app_log_rotation
|
Rails関連のログの保存数 |
slack_url
|
slack通知先のURL |
slack_channel
|
slack通知先のチャンネル |
sidekiq_config
|
sidekiqの設定 |
whenever_roles
|
wheneverの設定、capistranoのcronのロール設定ができる。 |
environment_variables_file |
crontab等でrailsを起動する際に必要となる環境変数を格納しているファイル
|
append
append :linked_files
「gitに格納されていない」 or 「gitのものを使いたくない(本番環境特有のもの)」ファイルを指定します。
1 |
append :linked_files, 'config/database.yml','config/secrets.yml', 'config/puma.rb','config/master.key' |
append :linked_dirs
gitに格納されていないログ、UNIXソケットやpidなどが格納されるフォルダを指定
1 |
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets' |
namespace
Capistrano2.x以降は全てのタスクがネームスペース化されている。
1 2 3 4 5 6 7 |
namespace :ネームスペース名 do task :タスク1 do end task :タスク2 do end end |
task
実際に処理を記載したもの。
invoke
タスクを設定するコマンド。namespaceが必須。
execute
サーバー上で特定のコマンドを実行する。
この記事へのコメントはありません。