Mina EC2
Helper library to deploy to several EC2 instances using Mina
Installing
Add to gemfile:
gem 'mina-ec2'
Add to config/deploy.rb
require 'mina/ec2'
Configuration
AWS Credentials
Set AWS credentials to use, and which region(s) to deploy to.
set :ec2_settings, {
regions: %w{eu-west-1},
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY_ID']
}
Filtering instance
Set tags to find your instances by:
set :ec2_tags, {
'Team' => 'my-team',
'Project' => 'my-app',
'Stages' => 'staging'
}
Migrations
Split out the rails:db_migrate
invocation, since we don't want to run it from several servers. If you do want to run it from several servers (for example if each of your app servers has their own sqlite3 database), just leave it as a part of the deploy {}
block.
desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
to :launch do
queue "mkdir -p #{deploy_to}/#{current_path}/tmp/"
queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt"
end
end
set :domain, fetch(:ec2_domains).sample
invoke :'rails:db_migrate'
end
Usage
Invoke with
mina ec2:deploy