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


この記事が気に入ったらサポートをしてみませんか?