search
LoginSignup
89

More than 5 years have passed since last update.

posted at

updated at

Capistranoで簡単デプロイ

概要

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

以上

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
89