LoginSignup
17
16

More than 5 years have passed since last update.

複数EC2インスタンスへのrailsデプロイ

Posted at

掲題の通りの事やりたいと思います。
今回使うec2-capは、tagでデプロイ対象と成るサーバーを識別します。

ELBからサーバーIPを引っ張らずtagを採用したのは、外部に公開しないjobのみが動くサーバーも対象に含めるためです。
なお、jobはrails側のビジネスロジックを再利用しているため、同じリポジトリに含まれているイメージです。

require

  • ruby2.1.2
  • rails4.1.1
  • capistrano gem (3.2.1)
  • ec2-cap gem
  • dotenv
    • localからデプロイするために入れています

EC2にデプロイ用ユーザーの作成

Groupを作成

# group名
Deploy

# policy
Deploy-20140907
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1410068314000",
      "Effect": "Allow",
      "Action": [ "ec2:Describe*" ],
      "Resource": [ "*" ]
    }
  ]
}

User作成

  • deploy
  • group : Deploy

対象と成るEC2インスタンスにタグを追加

  • Project : hoge
  • Roles : app
  • Stage : production

各々のタグにおいて、複数付与する必要が有る場合はカンマ区切り

cap-ec2設定

capの基本的な設定は省きます。

Install gems

$ vi Gemfile
group :development do
  gem 'capistrano', '~> 3.0'
  gem 'capistrano-rails', '~> 1.1'
  gem 'cap-ec2'
end

$ bundle

Envirnoments

$ vi .env
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY

Configure capisitrano

$ vi Capfile
require "dotenv"
Dotenv.load('.env')

require 'cap-ec2/capistrano'

$ vi config/deploy
set :ec2_region, %w{ ap-northeast-1 }

$ vi config/production.rb
set :stage, :production
set :branch, ENV['BRANCH'] || 'master'
set :ssh_options, {
  user: 'hogehoge',
  keys: %w(~/.ssh/id_rsa)
}
set :rails_env, :production

# cap-ec2
ec2_role :app, ssh_options: fetch(:ssh_options)

deploy

$ bundle exec cap production deploy
17
16
0

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
  3. You can use dark theme
What you can do with signing up
17
16