株式会社 科学技術研究所
ホーム > かぎけんブログ > 備忘録 > [Rails] Capistrano3.xでデプロイする (前編)
[Rails] Capistrano3.xでデプロイする (前編)
投稿日:2017/04/06
カテゴリ:備忘録

Capistrano3.x系でリモートサーバーにRuby on Railsアプリケーションをデプロイする設定の備忘録(前編)です。
2回に分けて設定を記載します。
後編は以下のURLを参照して下さい。
[Rails] Capistrano3.xでデプロイする (後編)

前提として、デプロイ対象のサーバーではNginx+Unicornな環境で動作しているとします。

1. Gemのインストール
Capistranoの動作に必要なGemをインストールします。
Gemfile


    group :development, :test do
      gem 'capistrano', '~> 3.7.1'
      gem 'capistrano-rails', '~> 1.2.2'
      gem 'capistrano-rbenv', '~> 2.1.0'
      gem 'capistrano-bundler', '~> 1.2.0'
      gem 'capistrano3-unicorn', '~> 0.2.1'
    end
  

    $ bundle install
  

 

2. 設定ファイルを生成・変更
以下コマンドを実行すると幾つかの設定ファイルが生成されます。


    $ cap install
  

Capfile


    require 'capistrano/setup'
    require 'capistrano/deploy'
    require 'capistrano/rbenv' # rbenvを利用している場合に記載
    require "capistrano/scm/git"
    install_plugin Capistrano::SCM::Git

    # rbenvを利用している場合、以下2行を追加
    set :rbenv_type, :user
    set :rbenv_ruby, '2.3.3'

    require 'capistrano/bundler'
    require 'capistrano/rails/assets'
    require 'capistrano/rails/migrations'
    require 'capistrano3/unicorn'

    Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
  

config/deploy.rb
ブラケットで囲まれている部分を適宜変更して下さい。


    lock '3.7.1'

    set :application, [アプリケーション名]
    set :repo_url, [リポジトリのURL]
    set :log_level, :debug
    set :pty, true
    set :linked_dirs, [デプロイ時に変更したくないフォルダを配列で指定]
    set :linked_files, [デプロイ時に変更したくないファイルを配列で指定]
    set :default_env, {path: [環境変数]}
    set :keep_releases, 5
    set :bundle_binstubs, nil

    SSHKit.config.command_map[:rake] = 'bundle exec rake'

    after 'deploy:publishing', 'deploy:restart'
    namespace :deploy do
      desc 'Restart application'

      task :restart do
        invoke 'unicorn:restart'
      end

      task :stop do
        invoke 'unicorn:stop'
      end

      task :start do
        invoke 'unicorn:start'
      end
    end
  

config/deploy/*.rb
環境別のデプロイ設定を記述します。
今回は、本番環境(production)とテスト環境(staging)の二通り記述します。
envとdeploy_to以外は共通の設定を利用します。 config/deploy/production.rb


    set :rails_env, "production"
    set :unicorn_rack_env, "production"

    set :branch, 'master'
    set :deploy_to, [デプロイ先]

    # Simple Role Syntax
    role :app, %w{[ユーザー名]@[デプロイ先ホスト名]}
    role :web, %w{[ユーザー名]@[デプロイ先ホスト名]}
    role :db, %w{[ユーザー名]@[デプロイ先ホスト名]}

    server 'デプロイ先ホスト名', user: 'ユーザー名', roles: %w{web app}, my_property: :my_value


    # Custom SSH Options
    set :ssh_options, {
      keys: %w([SSH接続に使う秘密鍵]),
      forward_agent: false,
      auth_methods: %w(publickey)
    }
  

 

後編に続きます。

参考
https://github.com/capistrano/capistrano
http://capistranorb.com/