sml-rubber 0.9.9 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +13 -7
- data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/deflate.conf +0 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/expires.conf +0 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/headers.conf +0 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/{web → apache}/setenvif.conf +0 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +62 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
- data/generators/vulcanize/templates/{nginx/config/rubber/role/web_tools/index.html → apache/config/rubber/role/web_tools/tools-index.html} +8 -1
- data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +4 -12
- data/generators/vulcanize/templates/base/config/deploy.rb +5 -34
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +4 -6
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +29 -3
- data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
- data/generators/vulcanize/templates/{nginx/config/rubber/role/web/nginx.conf → complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf} +25 -45
- data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
- data/generators/vulcanize/templates/{complete_mysql → complete_mongrel_mysql}/templates.yml +0 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +19 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +3 -1
- data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +8 -10
- data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +1 -1
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +1 -1
- data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +0 -5
- data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +7 -7
- data/generators/vulcanize/templates/mongrel/config/rubber/role/{app → mongrel}/mongrel_cluster.yml +4 -4
- data/generators/vulcanize/templates/mongrel/config/rubber/role/{app → mongrel}/monit-mongrel.conf +2 -2
- data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +2 -2
- data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +1 -1
- data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +17 -1
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +1 -1
- data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +1 -1
- data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +14 -36
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +1 -1
- data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +8 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +7 -7
- data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +6 -6
- data/generators/vulcanize/templates/nginx/config/rubber/role/{web → nginx}/crontab +0 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/{web → nginx}/monit-nginx.conf +0 -1
- data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +43 -62
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
- data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +3 -26
- data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +13 -40
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +6 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
- data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +9 -11
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +1 -1
- data/lib/rubber/cloud/aws.rb +30 -0
- data/lib/rubber/instance.rb +53 -2
- data/lib/rubber/recipes/rubber.rb +7 -6
- data/lib/rubber/recipes/rubber/deploy.rb +22 -1
- data/lib/rubber/recipes/rubber/instances.rb +74 -24
- data/lib/rubber/recipes/rubber/load_balancers.rb +27 -0
- data/lib/rubber/recipes/rubber/security_groups.rb +5 -7
- data/lib/rubber/recipes/rubber/setup.rb +50 -14
- data/lib/rubber/recipes/rubber/static_ips.rb +7 -7
- data/lib/rubber/recipes/rubber/utils.rb +6 -7
- data/lib/rubber/recipes/rubber/volumes.rb +8 -8
- data/lib/rubber/util.rb +4 -0
- data/test/instance_test.rb +55 -0
- metadata +32 -18
- data/generators/vulcanize/templates/apache/config/rubber/role/web/vhost.conf +0 -27
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy.conf +0 -44
- data/generators/vulcanize/templates/passenger/config/rubber/role/web/passenger.conf +0 -8
- data/generators/vulcanize/templates/passenger/config/rubber/role/web/vhost.conf +0 -29
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.10
|
@@ -4,14 +4,20 @@ namespace :rubber do
|
|
4
4
|
namespace :apache do
|
5
5
|
|
6
6
|
rubber.allow_optional_tasks(self)
|
7
|
-
|
7
|
+
|
8
|
+
after "rubber:install_packages", "rubber:apache:custom_install"
|
9
|
+
|
10
|
+
task :custom_install, :roles => :apache do
|
11
|
+
sudo "a2dissite default"
|
12
|
+
end
|
13
|
+
|
8
14
|
# serial_task can only be called after roles defined - not normally a problem, but
|
9
15
|
# rubber auto-roles don't get defined till after all tasks are defined
|
10
16
|
on :load do
|
11
|
-
rubber.serial_task self, :serial_restart, :roles => :
|
17
|
+
rubber.serial_task self, :serial_restart, :roles => :apache do
|
12
18
|
run "/etc/init.d/apache2 restart"
|
13
19
|
end
|
14
|
-
rubber.serial_task self, :serial_reload, :roles => :
|
20
|
+
rubber.serial_task self, :serial_reload, :roles => :apache do
|
15
21
|
run "if ! ps ax | grep -v grep | grep -c apache2 &> /dev/null; then /etc/init.d/apache2 start; else /etc/init.d/apache2 reload; fi"
|
16
22
|
end
|
17
23
|
end
|
@@ -21,22 +27,22 @@ namespace :rubber do
|
|
21
27
|
after "deploy:restart", "rubber:apache:reload"
|
22
28
|
|
23
29
|
desc "Stops the apache web server"
|
24
|
-
task :stop, :roles => :
|
30
|
+
task :stop, :roles => :apache, :on_error => :continue do
|
25
31
|
run "/etc/init.d/apache2 stop"
|
26
32
|
end
|
27
33
|
|
28
34
|
desc "Starts the apache web server"
|
29
|
-
task :start, :roles => :
|
35
|
+
task :start, :roles => :apache do
|
30
36
|
run "/etc/init.d/apache2 start"
|
31
37
|
end
|
32
38
|
|
33
39
|
desc "Restarts the apache web server"
|
34
|
-
task :restart, :roles => :
|
40
|
+
task :restart, :roles => :apache do
|
35
41
|
serial_restart
|
36
42
|
end
|
37
43
|
|
38
44
|
desc "Reloads the apache web server"
|
39
|
-
task :reload, :roles => :
|
45
|
+
task :reload, :roles => :apache do
|
40
46
|
serial_reload
|
41
47
|
end
|
42
48
|
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%
|
2
|
+
@path = '/etc/monit/monit.d/monit-apache.conf'
|
3
|
+
%>
|
4
|
+
<% PIDFILE = "/var/run/apache2.pid" %>
|
5
|
+
check process apache with pidfile <%= PIDFILE %>
|
6
|
+
group apache-<%= RUBBER_ENV %>
|
7
|
+
start program = "/etc/init.d/apache2 start"
|
8
|
+
stop program = "/etc/init.d/apache2 stop"
|
File without changes
|
data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
<%
|
2
|
+
@path = "/etc/apache2/sites-available/#{rubber_env.app_name}-tools"
|
3
|
+
@post = "a2enmod rewrite && a2enmod ssl && a2enmod proxy_http && a2enmod proxy_html && a2ensite #{rubber_env.app_name}-tools"
|
4
|
+
%>
|
5
|
+
|
6
|
+
Listen <%= rubber_env.web_tools_port %>
|
7
|
+
<VirtualHost *:<%= rubber_env.web_tools_port %>>
|
8
|
+
ServerName <%= rubber_env.full_host %>
|
9
|
+
|
10
|
+
RewriteEngine on
|
11
|
+
RewriteCond %{HTTPS} !=on
|
12
|
+
RewriteRule ^/(.*)$ https://%{SERVER_NAME}:<%= rubber_env.web_tools_ssl_port %>/$1 [L,R]
|
13
|
+
RewriteLog "/var/log/apache2/rewrite.log"
|
14
|
+
</VirtualHost>
|
15
|
+
|
16
|
+
Listen <%= rubber_env.web_tools_ssl_port %>
|
17
|
+
<VirtualHost *:<%= rubber_env.web_tools_ssl_port %>>
|
18
|
+
ServerName <%= rubber_env.full_host %>
|
19
|
+
DocumentRoot /var/www
|
20
|
+
|
21
|
+
SSLEngine on
|
22
|
+
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
|
23
|
+
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
|
24
|
+
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
|
25
|
+
# SSLCertificateFile <%= RUBBER_ROOT %>/config/<%= rubber_env.domain %>.crt
|
26
|
+
# SSLCertificateKeyFile <%= RUBBER_ROOT %>/config/<%= rubber_env.domain %>.key
|
27
|
+
# SSLCertificateChainFile /etc/ssl/certs/gd_intermediate_bundle.crt
|
28
|
+
|
29
|
+
<Location />
|
30
|
+
AuthType Basic
|
31
|
+
AuthName "Rubber Admin Tools"
|
32
|
+
AuthUserFile <%= RUBBER_ROOT %>/config/<%= rubber_env.app_name %>.auth
|
33
|
+
Require valid-user
|
34
|
+
|
35
|
+
Allow from all
|
36
|
+
</Location>
|
37
|
+
|
38
|
+
SetOutputFilter proxy-html
|
39
|
+
|
40
|
+
<% rubber_instances.for_role('haproxy').each do |ic| %>
|
41
|
+
ProxyPass /haproxy_<%= ic.name %>/ http://<%= ic.full_name %>:<%= rubber_env.haproxy_admin_port %>/haproxy/
|
42
|
+
ProxyPassReverse /haproxy_<%= ic.name %>/ http://<%= ic.full_name %>:<%= rubber_env.haproxy_admin_port %>/haproxy/
|
43
|
+
ProxyHTMLURLMap http://<%= ic.full_name %>:<%= rubber_env.haproxy_admin_port %>/ /haproxy_<%= ic.name %>/
|
44
|
+
ProxyHTMLURLMap /haproxy/ /haproxy_<%= ic.name %>/
|
45
|
+
ProxyHTMLURLMap /haproxy /haproxy_<%= ic.name %>/
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<% if cruise_host = rubber_instances.for_role('cruise').first %>
|
49
|
+
ProxyPass /cruise/ http://<%= cruise_host.full_name %>:<%= rubber_env.cruise_port %>/
|
50
|
+
ProxyPassReverse /cruise/ http://<%= cruise_host.full_name %>:<%= rubber_env.cruise_port %>/
|
51
|
+
ProxyHTMLURLMap http://<%= cruise_host.full_name %>:<%= rubber_env.cruise_port %>/ /cruise/
|
52
|
+
ProxyHTMLURLMap / /cruise/
|
53
|
+
<% end %>
|
54
|
+
|
55
|
+
<% rubber_instances.each do |ic| %>
|
56
|
+
ProxyPass /monit_<%= ic.name %>/ http://<%= ic.full_name %>:<%= rubber_env.monit_admin_port %>/
|
57
|
+
ProxyPassReverse /monit_<%= ic.name %>/ http://<%= ic.full_name %>:<%= rubber_env.monit_admin_port %>/
|
58
|
+
ProxyHTMLURLMap http://<%= ic.full_name %>:<%= rubber_env.monit_admin_port %>/ /monit_<%= ic.name %>/
|
59
|
+
ProxyHTMLURLMap / /monit_<%= ic.name %>/
|
60
|
+
<% end %>
|
61
|
+
|
62
|
+
</VirtualHost>
|
@@ -10,14 +10,21 @@
|
|
10
10
|
<body>
|
11
11
|
<h1>Rubber Admin Tools</h1>
|
12
12
|
<ul>
|
13
|
+
|
13
14
|
<li><a href="/munin/">Munin</a></li>
|
14
|
-
|
15
|
+
|
16
|
+
<% if cruise_host = rubber_instances.for_role('cruise').first %>
|
17
|
+
<li><a href="http://<%= cruise_host %>/cruise/">CruiseControl</a></li>
|
18
|
+
<% end %>
|
19
|
+
|
15
20
|
<% rubber_instances.for_role('haproxy').each do |ic| %>
|
16
21
|
<li><a href="/haproxy_<%= ic.name %>/">HAProxy <%= ic.name %></a></li>
|
17
22
|
<% end %>
|
23
|
+
|
18
24
|
<% rubber_instances.each do |ic| %>
|
19
25
|
<li><a href="/monit_<%= ic.name %>/">Monit <%= ic.name %></a></li>
|
20
26
|
<% end %>
|
27
|
+
|
21
28
|
</ul>
|
22
29
|
</body>
|
23
30
|
</html>
|
@@ -1,15 +1,7 @@
|
|
1
|
-
web_aliases: [www.foo.com *.foo.com]
|
2
|
-
|
3
|
-
security_groups:
|
4
|
-
web:
|
5
|
-
description: To open up port 80 for http server on web role
|
6
|
-
rules:
|
7
|
-
- protocol: tcp
|
8
|
-
from_port: 80
|
9
|
-
to_port: 80
|
10
|
-
source_ips: [0.0.0.0/0]
|
11
1
|
|
12
2
|
roles:
|
13
|
-
|
3
|
+
apache:
|
14
4
|
packages: [apache2]
|
15
|
-
|
5
|
+
roles:
|
6
|
+
web_tools:
|
7
|
+
packages: [libapache2-mod-proxy-html]
|
@@ -3,8 +3,9 @@
|
|
3
3
|
set :rails_env, RUBBER_ENV
|
4
4
|
|
5
5
|
on :load do
|
6
|
-
set :application,
|
7
|
-
set :
|
6
|
+
set :application, rubber_env.app_name
|
7
|
+
set :runner, rubber_env.app_user
|
8
|
+
set :deploy_to, "/mnt/#{application}-#{RUBBER_ENV}"
|
8
9
|
end
|
9
10
|
|
10
11
|
# Use a simple directory tree copy here to make demo easier.
|
@@ -20,8 +21,7 @@ set :password, nil
|
|
20
21
|
|
21
22
|
# Use sudo with user rails for cap deploy:[stop|start|restart]
|
22
23
|
# This way exposed services (mongrel) aren't running as a privileged user
|
23
|
-
set :use_sudo,
|
24
|
-
set :runner, 'rails'
|
24
|
+
set :use_sudo, true
|
25
25
|
|
26
26
|
# How many old releases should be kept around when running "cleanup" task
|
27
27
|
set :keep_releases, 3
|
@@ -47,38 +47,9 @@ namespace :deploy do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
#
|
51
|
-
# TASKS
|
52
|
-
# =============================================================================
|
53
|
-
|
54
|
-
|
50
|
+
# load in the deploy scripts installed by vulcanize for each rubber module
|
55
51
|
Dir["#{File.dirname(__FILE__)}/rubber/deploy-*.rb"].each do |deploy_file|
|
56
52
|
load deploy_file
|
57
53
|
end
|
58
54
|
|
59
|
-
# Don't want to do rubber:config for update_code as that tree isn't official
|
60
|
-
# until it is 'committed' by the symlink task (and doing so causes it to run
|
61
|
-
# for bootstrap_db which should only config the db config file). However,
|
62
|
-
# deploy:migrations doesn't call update, so we need an additional trigger for
|
63
|
-
# it
|
64
|
-
after "deploy:update", "rubber:config"
|
65
|
-
after "deploy:rollback_code", "rubber:config"
|
66
|
-
before "deploy:migrate", "rubber:config"
|
67
|
-
|
68
|
-
before "rubber:pre_start", "setup_perms"
|
69
|
-
before "rubber:pre_restart", "setup_perms"
|
70
55
|
after "deploy", "deploy:cleanup"
|
71
|
-
|
72
|
-
# Fix perms because we start server as rails user, but migrate as root,
|
73
|
-
# server needs to be able to write logs, etc.
|
74
|
-
task :setup_perms do
|
75
|
-
run "find #{shared_path} -name cached-copy -prune -o -print | xargs chown #{runner}:#{runner}"
|
76
|
-
run "chown -R #{runner}:#{runner} #{current_path}/tmp"
|
77
|
-
end
|
78
|
-
|
79
|
-
# Uncomment this is you want to install gems defined in the rails environment.rb
|
80
|
-
# after "deploy:update", "install_rails_gems"
|
81
|
-
task :install_rails_gems do
|
82
|
-
sudo "sh -c 'cd #{current_path} && RAILS_ENV=#{RUBBER_ENV} rake gems:install'"
|
83
|
-
end
|
84
|
-
|
@@ -10,7 +10,7 @@ namespace :rubber do
|
|
10
10
|
# figure out which hosts we have specified enterprise ruby for
|
11
11
|
sys_ruby_hosts = []
|
12
12
|
ent_ruby_hosts = []
|
13
|
-
|
13
|
+
rubber_instances.filtered.each do |ic|
|
14
14
|
env = rubber_cfg.environment.bind(ic.role_names, ic.name)
|
15
15
|
if env.use_enterprise_ruby
|
16
16
|
ent_ruby_hosts << ic.full_name
|
@@ -54,13 +54,12 @@ namespace :rubber do
|
|
54
54
|
src_url = "http://rubyforge.org/frs/download.php/60718/rubygems-#{ver}.tgz"
|
55
55
|
rubber.sudo_script 'install_rubygems', <<-ENDSCRIPT
|
56
56
|
if [[ `gem --version 2>&1` != "#{ver}" ]]; then
|
57
|
-
wget -
|
57
|
+
wget -qNP /tmp #{src_url}
|
58
58
|
tar -C /tmp -xzf /tmp/rubygems-#{ver}.tgz
|
59
59
|
ruby -C /tmp/rubygems-#{ver} setup.rb
|
60
60
|
ln -sf /usr/bin/gem1.8 /usr/bin/gem
|
61
61
|
rm -rf /tmp/rubygems*
|
62
62
|
gem source -l > /dev/null
|
63
|
-
gem sources -a http://gems.github.com
|
64
63
|
fi
|
65
64
|
ENDSCRIPT
|
66
65
|
end
|
@@ -93,9 +92,8 @@ namespace :rubber do
|
|
93
92
|
after "rubber:install_packages", "rubber:base:custom_install"
|
94
93
|
task :custom_install do
|
95
94
|
rubber.sudo_script 'custom_install', <<-ENDSCRIPT
|
96
|
-
# add the
|
97
|
-
|
98
|
-
if ! id ${appuser} &> /dev/null; then adduser --system --group ${appuser}; fi
|
95
|
+
# add the user for running app server with
|
96
|
+
if ! id #{rubber_env.app_user} &> /dev/null; then adduser --system --group #{rubber_env.app_user}; fi
|
99
97
|
|
100
98
|
# add ssh keys for root
|
101
99
|
if [[ ! -f /root/.ssh/id_dsa ]]; then ssh-keygen -q -t dsa -N '' -f /root/.ssh/id_dsa; fi
|
@@ -11,12 +11,20 @@
|
|
11
11
|
# packages: [awstats]
|
12
12
|
|
13
13
|
# REQUIRED: The name of your application
|
14
|
-
app_name:
|
14
|
+
app_name: "#{File.basename(RUBBER_ROOT)}"
|
15
|
+
|
16
|
+
# REQUIRED: The system user to run your app servers as
|
17
|
+
app_user: app
|
15
18
|
|
16
19
|
# REQUIRED: Notification emails (e.g. monit) get sent to this address
|
17
20
|
#
|
18
21
|
admin_email: root@localhost
|
19
22
|
|
23
|
+
# OPTIONAL: If not set, you won't be able to access web_tools
|
24
|
+
# server (munin stats, monit status, etc)
|
25
|
+
# web_tools_user: admin
|
26
|
+
# web_tools_password: sekret
|
27
|
+
|
20
28
|
# REQUIRED: The timezone the server should be in
|
21
29
|
timezone: US/Eastern
|
22
30
|
|
@@ -127,13 +135,31 @@ auto_security_groups: true
|
|
127
135
|
# account, or even multiple apps
|
128
136
|
isolate_security_groups: true
|
129
137
|
|
138
|
+
# OPTIONAL: Automatically provision and assign instances to a Cloud provided
|
139
|
+
# load balancer.
|
140
|
+
load_balancers:
|
141
|
+
my_lb_name:
|
142
|
+
listeners:
|
143
|
+
- protocol: http
|
144
|
+
port: 80
|
145
|
+
instance_port: 8080
|
146
|
+
- protocol: tcp
|
147
|
+
port: 443
|
148
|
+
instance_port: 8080
|
149
|
+
target_roles: [app]
|
150
|
+
|
151
|
+
isolate_load_balancers: true
|
152
|
+
|
130
153
|
# OPTIONAL: Set if you want to use Ruby Enterprise Edition instead of the standard ubuntu one
|
131
154
|
use_enterprise_ruby: false
|
132
155
|
|
133
156
|
# OPTIONAL: The packages to install on all instances
|
134
157
|
# You can install a specific version of a package by using a sub-array of pkg, version
|
135
158
|
# For example, packages: [[rake, 0.7.1], irb]
|
136
|
-
packages: [build-essential, ruby-full, ruby1.8-dev, rake, irb]
|
159
|
+
packages: [postfix, build-essential, ruby-full, ruby1.8-dev, rake, irb]
|
160
|
+
|
161
|
+
# OPTIONAL: gem sources to setup for rubygems
|
162
|
+
gemsources: ["http://gems.rubyforge.org/", "http://gems.github.com"]
|
137
163
|
|
138
164
|
# OPTIONAL: The gems to install on all instances
|
139
165
|
# You can install a specific version of a gem by using a sub-array of gem, version
|
@@ -151,7 +177,7 @@ stop_on_error_cmd: "function error_exit { exit 99; }; trap error_exit ERR"
|
|
151
177
|
# but this is not always desired for staging, so you can specify a different
|
152
178
|
# set here
|
153
179
|
#
|
154
|
-
staging_roles: "web,
|
180
|
+
staging_roles: "web,app,db:primary=true"
|
155
181
|
|
156
182
|
|
157
183
|
# OPTIONAL: Lets one assign amazon elastic IPs (static IPs) to your instances
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%
|
2
|
+
@path = "/etc/haproxy/haproxy.cfg"
|
3
|
+
@additive = ["# start haproxy mongrel", "# end haproxy mongrel"]
|
4
|
+
%>
|
5
|
+
|
6
|
+
listen mongrel_proxy 0.0.0.0:<%= rubber_env.haproxy_listen_port %>
|
7
|
+
<%
|
8
|
+
# Since we do "fair" load balancing to the mongrels, we don't want to share mongrels
|
9
|
+
# between haproxy instances otherwise we still end up with requests getting queued behind
|
10
|
+
# slow ones.
|
11
|
+
mongrel_hosts = rubber_instances.for_role('mongrel').collect { |i| i.name }
|
12
|
+
haproxy_hosts = rubber_instances.for_role('haproxy').collect { |i| i.name }
|
13
|
+
ports = (rubber_env.mongrel_base_port.to_i ... rubber_env.mongrel_base_port.to_i + rubber_env.mongrel_count.to_i).to_a
|
14
|
+
host_count = haproxy_hosts.size
|
15
|
+
host_mod = haproxy_hosts.sort.index(rubber_env.host) rescue 0
|
16
|
+
ports = ports.find_all {|x| x % host_count == host_mod}
|
17
|
+
%>
|
18
|
+
<% mongrel_hosts.each do |server| %>
|
19
|
+
<% ports.each do |port| %>
|
20
|
+
server <%= server %>_<%= port %> <%= server %>:<%= port %> maxconn 1 check
|
21
|
+
<% end %>
|
22
|
+
<% end %>
|
23
|
+
|
@@ -1,55 +1,31 @@
|
|
1
1
|
<%
|
2
|
-
@path = "/etc/nginx/
|
3
|
-
@post = "mkdir -p /mnt/nginx/logs"
|
2
|
+
@path = "/etc/nginx/rubber/mongrel.conf"
|
4
3
|
%>
|
5
4
|
|
6
|
-
|
7
|
-
worker_processes 10;
|
8
|
-
|
9
|
-
pid /var/run/nginx.pid;
|
10
|
-
|
11
|
-
events
|
5
|
+
upstream haproxy_mongrel
|
12
6
|
{
|
13
|
-
|
7
|
+
<% rubber_instances.for_role('haproxy').each do |ic| %>
|
8
|
+
server <%= ic.name %>:<%= rubber_env.haproxy_listen_port %>;
|
9
|
+
<% end %>
|
14
10
|
}
|
15
11
|
|
16
|
-
http
|
17
|
-
{
|
18
|
-
include /etc/nginx/mime.types;
|
19
|
-
default_type application/octet-stream;
|
20
|
-
|
21
|
-
sendfile on;
|
22
|
-
tcp_nopush on;
|
23
|
-
tcp_nodelay off;
|
24
|
-
|
25
|
-
gzip on;
|
26
|
-
gzip_http_version 1.0;
|
27
|
-
gzip_comp_level 2;
|
28
|
-
gzip_proxied any;
|
29
|
-
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
30
|
-
|
31
|
-
# configure log format like to Apache's "combined" log format
|
32
|
-
log_format main
|
33
|
-
'$remote_addr - $remote_user [$time_local] '
|
34
|
-
'"$request" $status $body_bytes_sent "$http_referer" '
|
35
|
-
'"$http_user_agent" "$http_cookie"';
|
36
|
-
|
37
|
-
# default log files
|
38
|
-
error_log /mnt/nginx/logs/error.log notice;
|
39
|
-
access_log /mnt/nginx/logs/access.log main;
|
40
|
-
|
41
|
-
|
42
|
-
upstream mongrel
|
43
|
-
{
|
44
|
-
<% proxy_hosts = rubber_instances.for_role('haproxy').each do |ic| %>
|
45
|
-
server <%= ic.name %>:<%= rubber_env.haproxy_listen_port %>;
|
46
|
-
<% end %>
|
47
|
-
}
|
48
12
|
|
49
|
-
|
13
|
+
<% %w[http https].each do |protocol| %>
|
14
|
+
|
15
|
+
# This server is setup to serve www over <%= protocol %>.
|
50
16
|
server
|
51
17
|
{
|
52
|
-
|
18
|
+
<% if protocol == 'https' %>
|
19
|
+
listen <%= rubber_env.web_ssl_port %>;
|
20
|
+
ssl on;
|
21
|
+
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
|
22
|
+
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
|
23
|
+
# ssl_certificate <%= RUBBER_ROOT %>/config/snapmylife.com.crt;
|
24
|
+
# ssl_certificate_key <%= RUBBER_ROOT %>/config/snapmylife.com.key;
|
25
|
+
<% else %>
|
26
|
+
listen <%= rubber_env.web_port %>;
|
27
|
+
<% end %>
|
28
|
+
|
53
29
|
client_max_body_size 10M;
|
54
30
|
|
55
31
|
server_name <%= rubber_env.domain %>;
|
@@ -72,6 +48,9 @@ http
|
|
72
48
|
|
73
49
|
location /
|
74
50
|
{
|
51
|
+
<%# nginx -> rails is http, so this tells rails the source protocol was https %>
|
52
|
+
<%= 'proxy_set_header X_FORWARDED_PROTO https;' if protocol == 'https' %>
|
53
|
+
|
75
54
|
# needed to forward user's IP address to rails
|
76
55
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
77
56
|
|
@@ -111,7 +90,7 @@ http
|
|
111
90
|
|
112
91
|
if (!-f $request_filename)
|
113
92
|
{
|
114
|
-
proxy_pass http://
|
93
|
+
proxy_pass http://haproxy_mongrel;
|
115
94
|
break;
|
116
95
|
}
|
117
96
|
}
|
@@ -130,4 +109,5 @@ http
|
|
130
109
|
root <%= RUBBER_ROOT + "/public" %>;
|
131
110
|
}
|
132
111
|
}
|
133
|
-
|
112
|
+
|
113
|
+
<% end %>
|