概要
capistranoを使ったデプロイ方法のメモ。
gitからソースを取得して本番に反映させるだけなので、ruby以外のプロダクトでも利用可能。
環境
- Capistrano Version: 3.5.0 (Rake Version: 11.2.2)
- ruby 2.3.1p112
capistranoのインストール
Gemfileを作成
Gemfile
source 'https://rubygems.org'
gem 'capistrano', '~> 3.5'
インストール
$ bundle install --path vendor/bundle
$ bundle exec cap install
capistranoの設定
最低限の設定のみ行う。
全体の設定ファイル。
config/deploy.rb
# レポジトリ設定
set :repo_url, 'https://user_name:pass_word@github.com/user_name/web_app.git'
# シンボリックリンクにするディレクトリ
set :linked_dirs, fetch(:linked_dirs, []).push('log')
# デプロイ先でのソースのバージョンの保持数
set :keep_releases, 5
# コマンド実行時にsudoをつけるか
set :use_sudo, false
環境ごとの設定ファイル。下記はproduction用。
config/deploy/production.rb
# deploy先のサーバー情報
role :web, %w{user@server.com}
# deployするディレクトリの場所
set :deploy_to, '/home/user/source'
set :ssh_options, {
port: 22,
forward_agent: true,
# ssh秘密鍵の場所
keys: ['~/.ssh/id_rsa']
}
taskの作成
deploy後に実行するタスクを作成する場合。
ここではデプロイ後にメールを送信するタスクを作成してみる。
lib/capistrano/tasks
namespace :mail do
desc 'send mail after deploying.'
task :send do
on roles(:all) do
# コマンドの標準出力結果を取得
output = capture "hostname"
execute "echo #{output} | mail -s 'subject' 'user@mail.com'"
end
end
end
# deploy後に実行する場合
after 'deploy:finishing', 'mail:send'
デプロイ
$ bundle exec cap production deploy
ssh keyのforwarding設定
git cloneするための秘密鍵を、デプロイ先のサーバーに設置せず、capistranoサーバーに設置してforwardingする方法。
鍵を作成する
$ ssh-keygen -t rsa -b 4096
この鍵の公開鍵をGitに登録する。
また、capistranoサーバーの~/.ssh/
に秘密鍵を設置する。
つまり、capistranoでデプロイ先にssh接続するための鍵と、デプロイ先でgit cloneするための鍵は共通になる。
ssh-add
capistranoサーバーでssh-addする。
こちらは、deployサーバーにsshでログインする度に実行する必要があるので、~/.bash_profileなどに記載しておくとよい。
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l
capistranoのconfig設定
config/deploy/development.rb
に作成した秘密鍵のパスを定義する。
config/deploy/development.rb
server '192.168.33.13', user: 'cap', roles: %w{app}
set :ssh_options, {
port: 22,
forward_agent: true,
keys: ['~/.ssh/id_rsa'],
}
set :deploy_target, 'app'
set :branch, :master
以上