Help us understand the problem. What is going on with this article?

Capistranoで簡単デプロイ

More than 3 years have passed since last update.

概要

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

以上

参考

Esfahan
WEB系出身。現在はビッグデータの基盤構築、ETLなどがメイン。 / YouTubeで料理チャンネルやってます → https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
https://www.youtube.com/channel/UCDnYBh2TtUAfQ0Z-tl0jTyw
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away