FUMINORI.WORK

Webアプリ開発・スマホアプリ開発・UIデザイン・マーケティング

Capistrano 3 の設定

目的

Capistrano 3.x でデプロイ環境を作ること。

環境

  • 開発、本番環境ともに、rbenv(0.4.0)でRuby( 2.0.0-p247)をインストール済み。
  • 本番サーバーはAWS EC2 Linuxインスタンスとセキュリティーグループ設定済み。
  • レポジトリ管理はgithubgithub上にてレポジトリ作成済み。開発、本番環境ともに、ssh-keyの設定済み。
  • DBは開発、本番環境ともにsqlite
  • 本番環境のデプロイ先のディレクトリは、/var/www/。

Gemfile

Gemfileを編集します。

group :development do
  gem "capistrano-bundler"
  gem "capistrano-rails"
  gem "capistrano-rbenv"
end

続いてインストール。

bundle install
bundle exec cap install

Capfile

出来上がったCapfileを編集します。

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rbenv'
set :rbenv_type, :system
set :rbenv_ruby, "2.0.0-p247"
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }

config/deploy.rb

deploy.rbでデプロイ先のディレクトリと、レポジトリなどの設定をします。

lock '3.1.0'

set :application, <application_name>
set :scm, :git
set :repo_url, 'git@github.com:<git_user_name>/<repository>.git'
set :deploy_to, '/var/www/<application_name>'
set :branch, "master"

set :format, :pretty
set :log_level, :debug
set :keep_releases, 5

namespace :deploy do
  desc "Restart application"
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      excute :touch, release_path.join("tmp/restart.txt")
    end
  end
  after :finishing, "deploy:cleanup"
end

config/deploy/production.rb

本番環境のサーバー接続の設定をします。

set :stage, :production

role :app, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com}
role :web, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com}
role :db, %w{ec2-user@ec2-XX-XXX-XX-XX.region.compute.amazonaws.com}

set :ssh_options, {
  keys: [File.expand_path('~/.ssh/<public_key>')],
  forward_agent: true
}

デプロイ

cap production deploy

参考文献