Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Set the instance id after calling 'cap instance:start'
set :instance_id, "i-rock"
# Set the instance url, which can be found by calling 'ec2-describe-instances'
# after the instance has booted
set :instance_url, "ec2-00-000-000-000.compute-1.amazonaws.com"

set :image_id, "ami-bded09d4"

role :app, instance_url
set :application, "example"

# Replace with your AWS credentials
set :keypair, "your-keypair"
set :account_id, "1234567890"
set :access_key_id, "1234567890ASDFG"
set :secret_access_key, "/asdfghj/sh1j4ksxss024011sfds"
set :pk, "pk-SLJSLK3411SADJAFASF0.pem"
set :cert, "cert-SLJSLK3411SADJAFASF0AFASF0.pem"

set :username, "root"
set :keypair_full_path, "#{ENV['HOME']}/.ec2/id_rsa-#{keypair}"

ssh_options[:username] = username
ssh_options[:keys] = keypair_full_path

namespace :instance do
  desc "Start an instance"
  task :start do
    system "ec2-run-instances #{image_id} -k #{keypair}"
  end

  desc "Stop running instance"
  task :stop do
    system "ec2-terminate-instances #{instance_id}"
  end

  desc "SSH to running instance"
  task :ssh do
    system "ssh -i #{keypair_full_path} #{username}@#{instance_url}"
  end

  desc "Install and configure apache2 and passenger"
  task :bootstrap do
    run <<-CMD
apt-get install apache2 -y &&
apt-get install apache2-prefork-dev -y &&
gem install passenger --no-ri --no-rdoc &&
cd /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3 &&
rake clean apache2 &&
echo "#phusion passenger" >> /etc/apache2/apache2.conf &&
echo "LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so" >> /etc/apache2/apache2.conf &&
echo "PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3" >> /etc/apache2/apache2.conf &&
echo "PassengerRuby /usr/bin/ruby1.8" >> apache2.conf &&
/etc/init.d/apache2 restart
    CMD
  end

  desc "Serve an example merb app with passenger"
  task :example_app do
    run <<-CMD
echo "127.0.0.1 localhost #{instance_url}" >> /etc/hosts &&
gem i merb --no-ri --no-rdoc &&
gem i hpricot --no-ri --no-rdoc &&
cd /var/www &&
merb-gen app #{application} --flat &&
mkdir #{application}/public #{application}/tmp #{application}/log &&
echo "#{RACK_CONFIG}" >> #{application}/config.ru &&
echo "<VirtualHost *>" >> /etc/apache2/sites-available/#{application} &&
echo "    ServerName #{instance_url}" >> /etc/apache2/sites-available/#{application} &&
echo "    DocumentRoot /var/www/#{application}/public" >> /etc/apache2/sites-available/#{application} &&
echo "    ErrorLog /var/www/#{application}/log/error.log" >> /etc/apache2/sites-available/#{application} &&
echo "</VirtualHost>" >> /etc/apache2/sites-available/#{application} &&
cd /etc/apache2/sites-available &&
a2ensite #{application} &&
/etc/init.d/apache2 restart
    CMD
  end
end

RACK_CONFIG = %{
require 'rubygems';
require 'merb-core';

Merb::Config.setup(:merb_root   => '.', :environment => ENV['RACK_ENV']);
Merb.environment = Merb::Config[:environment];
Merb.root = Merb::Config[:merb_root];
Merb::BootLoader.run;
\n
run Merb::Rack::Application.new
}