nirvdrum-rubber 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. data/CHANGELOG +146 -0
  2. data/COPYING +339 -0
  3. data/README +6 -0
  4. data/TODO +11 -0
  5. data/VERSION +1 -0
  6. data/bin/vulcanize +41 -0
  7. data/generators/vulcanize/USAGE +6 -0
  8. data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
  9. data/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
  10. data/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
  11. data/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
  12. data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
  13. data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +5 -0
  14. data/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
  15. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +66 -0
  16. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
  17. data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
  18. data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
  19. data/generators/vulcanize/templates/apache/templates.yml +1 -0
  20. data/generators/vulcanize/templates/base/Capfile +14 -0
  21. data/generators/vulcanize/templates/base/config/deploy.rb +55 -0
  22. data/generators/vulcanize/templates/base/config/rubber/common/crontab +17 -0
  23. data/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
  24. data/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +14 -0
  25. data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +84 -0
  26. data/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +79 -0
  27. data/generators/vulcanize/templates/base/config/rubber/rubber.yml +227 -0
  28. data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
  29. data/generators/vulcanize/templates/base/script/cron-rake +18 -0
  30. data/generators/vulcanize/templates/base/script/cron-runner +18 -0
  31. data/generators/vulcanize/templates/base/script/cron-sh +67 -0
  32. data/generators/vulcanize/templates/base/templates.yml +1 -0
  33. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
  34. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
  35. data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
  36. data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
  37. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
  38. data/generators/vulcanize/templates/complete_passenger_mysql/config/rubber/rubber-complete.yml +40 -0
  39. data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +10 -0
  40. data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
  41. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
  42. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
  43. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
  44. data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
  45. data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
  46. data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
  47. data/generators/vulcanize/templates/cruise/templates.yml +1 -0
  48. data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
  49. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
  50. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
  51. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
  52. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
  53. data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
  54. data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
  55. data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
  56. data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
  57. data/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
  58. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
  59. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
  60. data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
  61. data/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
  62. data/generators/vulcanize/templates/jetty/templates.yml +1 -0
  63. data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
  64. data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
  65. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
  66. data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
  67. data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
  68. data/generators/vulcanize/templates/memcached/templates.yml +1 -0
  69. data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
  70. data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
  71. data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
  72. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
  73. data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
  74. data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
  75. data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
  76. data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
  77. data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
  78. data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
  79. data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
  80. data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
  81. data/generators/vulcanize/templates/monit/templates.yml +1 -0
  82. data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
  83. data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
  84. data/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +9 -0
  85. data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
  86. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
  87. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
  88. data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
  89. data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
  90. data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
  91. data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
  92. data/generators/vulcanize/templates/munin/templates.yml +1 -0
  93. data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
  94. data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +156 -0
  95. data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
  96. data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
  97. data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
  98. data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
  99. data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +46 -0
  100. data/generators/vulcanize/templates/mysql/templates.yml +1 -0
  101. data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
  102. data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
  103. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
  104. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
  105. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
  106. data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
  107. data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
  108. data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
  109. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
  110. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
  111. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
  112. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
  113. data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
  114. data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
  115. data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
  116. data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
  117. data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
  118. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
  119. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
  120. data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
  121. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
  122. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
  123. data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
  124. data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
  125. data/generators/vulcanize/templates/nginx/templates.yml +1 -0
  126. data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +37 -0
  127. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
  128. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +7 -0
  129. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
  130. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +46 -0
  131. data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +10 -0
  132. data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
  133. data/generators/vulcanize/templates/passenger/templates.yml +3 -0
  134. data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +36 -0
  135. data/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
  136. data/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
  137. data/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +141 -0
  138. data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +4 -0
  139. data/generators/vulcanize/templates/redis/templates.yml +1 -0
  140. data/generators/vulcanize/templates/resque/config/rubber/deploy-resque-worker-default.rb +38 -0
  141. data/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +39 -0
  142. data/generators/vulcanize/templates/resque/config/rubber/role/resque_worker_default/monit-resque_worker_default.conf +19 -0
  143. data/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +10 -0
  144. data/generators/vulcanize/templates/resque/templates.yml +3 -0
  145. data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
  146. data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
  147. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
  148. data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
  149. data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
  150. data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
  151. data/generators/vulcanize/vulcanize_generator.rb +67 -0
  152. data/lib/capistrano/hostcmd.rb +12 -0
  153. data/lib/rubber.rb +38 -0
  154. data/lib/rubber/capistrano.rb +1 -0
  155. data/lib/rubber/cloud.rb +13 -0
  156. data/lib/rubber/cloud/aws.rb +334 -0
  157. data/lib/rubber/cloud/base.rb +16 -0
  158. data/lib/rubber/configuration.rb +47 -0
  159. data/lib/rubber/dns.rb +13 -0
  160. data/lib/rubber/dns/base.rb +84 -0
  161. data/lib/rubber/dns/dyndns.rb +78 -0
  162. data/lib/rubber/dns/nettica.rb +117 -0
  163. data/lib/rubber/dns/zerigo.rb +174 -0
  164. data/lib/rubber/environment.rb +169 -0
  165. data/lib/rubber/generator.rb +197 -0
  166. data/lib/rubber/instance.rb +166 -0
  167. data/lib/rubber/recipes/rubber.rb +89 -0
  168. data/lib/rubber/recipes/rubber/bundles.rb +28 -0
  169. data/lib/rubber/recipes/rubber/deploy.rb +90 -0
  170. data/lib/rubber/recipes/rubber/instances.rb +393 -0
  171. data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
  172. data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
  173. data/lib/rubber/recipes/rubber/setup.rb +457 -0
  174. data/lib/rubber/recipes/rubber/spot_requests.rb +17 -0
  175. data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
  176. data/lib/rubber/recipes/rubber/utils.rb +203 -0
  177. data/lib/rubber/recipes/rubber/volumes.rb +264 -0
  178. data/lib/rubber/tasks/rubber.rb +279 -0
  179. data/lib/rubber/util.rb +37 -0
  180. data/rails/init.rb +9 -0
  181. data/test/environment_test.rb +133 -0
  182. data/test/generator_test.rb +323 -0
  183. data/test/instance_test.rb +93 -0
  184. data/test/test_helper.rb +8 -0
  185. data/test/util_test.rb +16 -0
  186. metadata +298 -0
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # For running jobs through cron - only prints output if there is an error
4
+ #
5
+ # author mconway
6
+ # since 8/12/07
7
+
8
+ RAILS_ROOT = File.expand_path("..", File.dirname(__FILE__))
9
+ log = "#{RAILS_ROOT}/log/cron-runner-#{Time.now.tv_sec}.log"
10
+ begin
11
+ ident = File.basename(ARGV[-1]).gsub(/\W+/, "_")
12
+ log = "#{RAILS_ROOT}/log/cron-runner-#{ident}.log"
13
+ rescue
14
+ end
15
+
16
+ Dir.chdir(RAILS_ROOT)
17
+ args = %W{-e -l #{log} -- script/runner} + ARGV
18
+ system "script/cron-sh", *args
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # For running shell commands through cron - only prints output if there is an error
4
+ #
5
+ # author mconway
6
+ # since 8/12/07
7
+
8
+ require 'optparse'
9
+ require 'ostruct'
10
+ require 'rubygems'
11
+ require 'open4'
12
+
13
+ options = OpenStruct.new
14
+ options.logfile = "/tmp/cron-sh-#{Time.now.tv_sec}.log"
15
+ options.echoerr = false
16
+ options.echoout = false
17
+
18
+ opts = OptionParser.new do |opts|
19
+ opts.banner = "Usage: cron-sh [options] <shell command>"
20
+ opts.separator "Runs the given command, sending all stdout/stderr to a logfile, but echoing"
21
+ opts.separator "the entire file if the command exits with an error"
22
+ opts.separator ""
23
+ opts.separator "Specific options:"
24
+
25
+ opts.on("-l", "--log logfile", "Log to given file instead of a default") do |val|
26
+ options.logfile = val
27
+ end
28
+
29
+ opts.on("-o", "--[no-]echoout", "Log _and_ echo stdout") do |val|
30
+ options.echoout = true
31
+ end
32
+
33
+ opts.on("-e", "--[no-]echoerr", "Log _and_ echo stderr") do |val|
34
+ options.echoerr = true
35
+ end
36
+
37
+ opts.on_tail("-h", "--help", "Show this message") do
38
+ puts opts
39
+ exit
40
+ end
41
+ end
42
+
43
+ cmd = opts.parse(ARGV)
44
+
45
+ status = Open4::popen4(*cmd) do |pid, stdin, stdout, stderr|
46
+ File.open(options.logfile, "w") do | fh |
47
+ threads = []
48
+ threads << Thread.new(stdout) do |stdout|
49
+ stdout.each { |line| $stdout.puts line if options.echoout; fh.print line; fh.flush }
50
+ end
51
+ threads << Thread.new(stderr) do |stderr|
52
+ stderr.each { |line| $stderr.puts line if options.echoerr; fh.print line; fh.flush }
53
+ end
54
+ threads.each { |t| t.join }
55
+ end
56
+ end
57
+
58
+ result = status.exitstatus
59
+ if result != 0
60
+ puts ""
61
+ puts "*** Process exited with non-zero error code, full output follows"
62
+ puts "*** Command was: #{cmd.join(' ')}"
63
+ puts ""
64
+ puts IO.read(options.logfile)
65
+ end
66
+
67
+ exit(result)
@@ -0,0 +1 @@
1
+ description: The core configuration needed by all others
@@ -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
+
@@ -0,0 +1,113 @@
1
+ <%
2
+ @path = "/etc/nginx/rubber/mongrel.conf"
3
+ %>
4
+
5
+ upstream haproxy_mongrel
6
+ {
7
+ <% rubber_instances.for_role('haproxy').each do |ic| %>
8
+ server <%= ic.name %>:<%= rubber_env.haproxy_listen_port %>;
9
+ <% end %>
10
+ }
11
+
12
+
13
+ <% %w[http https].each do |protocol| %>
14
+
15
+ # This server is setup to serve www over <%= protocol %>.
16
+ server
17
+ {
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
+
29
+ client_max_body_size 10M;
30
+
31
+ server_name <%= rubber_env.domain %>;
32
+
33
+ if ( $host = www.<%= rubber_env.domain %>)
34
+ {
35
+ rewrite ^\/(.*)$ http://<%= rubber_env.domain %>/$1 permanent;
36
+ }
37
+
38
+ root <%= RUBBER_ROOT + "/public" %>;
39
+
40
+ # this rewrites all the requests to the maintenance.html
41
+ # page if it exists in the doc root. This is for capistrano's
42
+ # disable web task
43
+ if (-f $document_root/system/maintenance.html)
44
+ {
45
+ rewrite ^(.*)$ /system/maintenance.html last;
46
+ break;
47
+ }
48
+
49
+ location /
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
+
54
+ # needed to forward user's IP address to rails
55
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
56
+
57
+ # needed for HTTPS
58
+ proxy_set_header Host $http_host;
59
+ proxy_redirect false;
60
+ proxy_max_temp_file_size 0;
61
+
62
+
63
+ # If the file exists as a static file serve it directly without
64
+ # running all the other rewrite tests on it
65
+ if (-f $request_filename)
66
+ {
67
+ break;
68
+ }
69
+
70
+ # check for index.html for directory index
71
+ # if its there on the filesystem then rewite
72
+ # the url to add /index.html to the end of it
73
+ # and then break to send it to the next config rules.
74
+ if (-f $request_filename/index.html)
75
+ {
76
+ rewrite (.*) $1/index.html break;
77
+ }
78
+
79
+ # this is the meat of the rails page caching config
80
+ # it adds .html to the end of the url and then checks
81
+ # the filesystem for that file. If it exists, then we
82
+ # rewite the url to have explicit .html on the end
83
+ # and then send it on its way to the next config rule.
84
+ # if there is no file on the fs then it sets all the
85
+ # necessary headers and proxies to our upstream mongrels
86
+ if (-f $request_filename.html)
87
+ {
88
+ rewrite (.*) $1.html break;
89
+ }
90
+
91
+ if (!-f $request_filename)
92
+ {
93
+ proxy_pass http://haproxy_mongrel;
94
+ break;
95
+ }
96
+ }
97
+
98
+ # catch errors from proxy so we can display our error page
99
+ proxy_intercept_errors on;
100
+
101
+ error_page 500 502 503 504 /500.html;
102
+ location = /500.html
103
+ {
104
+ root <%= RUBBER_ROOT + "/public" %>;
105
+ }
106
+ error_page 404 /404.html;
107
+ location = /404.html
108
+ {
109
+ root <%= RUBBER_ROOT + "/public" %>;
110
+ }
111
+ }
112
+
113
+ <% end %>
@@ -0,0 +1,41 @@
1
+
2
+ role_dependencies:
3
+ web: [nginx, haproxy]
4
+ app: [mongrel]
5
+ web_tools: [nginx]
6
+
7
+ haproxy_listen_port: 9000
8
+ web_port: 80
9
+ web_ssl_port: 443
10
+ web_tools_port: 8080
11
+ web_tools_ssl_port: 8443
12
+
13
+ security_groups:
14
+ web:
15
+ description: "To open up port #{web_port}/#{web_ssl_port} for http server on web role"
16
+ rules:
17
+ - protocol: tcp
18
+ from_port: "#{web_port}"
19
+ to_port: "#{web_port}"
20
+ source_ips: [0.0.0.0/0]
21
+ - protocol: tcp
22
+ from_port: "#{web_ssl_port}"
23
+ to_port: "#{web_ssl_port}"
24
+ source_ips: [0.0.0.0/0]
25
+ web_tools:
26
+ description: "To open up port #{web_tools_port}/#{web_tools_ssl_port} for internal/tools http server"
27
+ rules:
28
+ - protocol: tcp
29
+ from_port: "#{web_tools_port}"
30
+ to_port: "#{web_tools_port}"
31
+ source_ips: [0.0.0.0/0]
32
+ - protocol: tcp
33
+ from_port: "#{web_tools_ssl_port}"
34
+ to_port: "#{web_tools_ssl_port}"
35
+ source_ips: [0.0.0.0/0]
36
+
37
+ roles:
38
+ web:
39
+ assigned_security_groups: [web]
40
+ web_tools:
41
+ assigned_security_groups: [web_tools]
@@ -0,0 +1,6 @@
1
+ description: A fairly complete and scalable mysql deployment setup
2
+ dependent_templates:
3
+ - minimal_mysql
4
+ - monit
5
+ - munin
6
+ - memcached
@@ -0,0 +1,21 @@
1
+ <%
2
+ @path = "/etc/haproxy/haproxy.cfg"
3
+ @additive = ["# start haproxy passenger", "# end haproxy passenger"]
4
+ %>
5
+
6
+ <%
7
+ backend_hosts = rubber_instances.for_role('passenger').collect { |i| i.name }
8
+ %>
9
+
10
+ listen passenger_proxy 0.0.0.0:<%= rubber_env.web_port %>
11
+ option forwardfor
12
+ <% backend_hosts.each do |server| %>
13
+ server <%= server %> <%= server %>:<%= rubber_env.passenger_listen_port %> maxconn <%= rubber_env.max_app_connections %> check
14
+ <% end %>
15
+
16
+ listen passenger_proxy 0.0.0.0:<%= rubber_env.web_ssl_port %>
17
+ mode tcp
18
+ option forwardfor
19
+ <% backend_hosts.each do |server| %>
20
+ server <%= server %> <%= server %>:<%= rubber_env.passenger_listen_ssl_port %> maxconn <%= rubber_env.max_app_connections %> check
21
+ <% end %>
@@ -0,0 +1,40 @@
1
+
2
+ role_dependencies:
3
+ web: [haproxy]
4
+ app: [passenger]
5
+ web_tools: [apache]
6
+
7
+ web_port: 80
8
+ web_ssl_port: 443
9
+ web_tools_port: 8080
10
+ web_tools_ssl_port: 8443
11
+
12
+ security_groups:
13
+ web:
14
+ description: "To open up port #{web_port}/#{web_ssl_port} for http server on web role"
15
+ rules:
16
+ - protocol: tcp
17
+ from_port: "#{web_port}"
18
+ to_port: "#{web_port}"
19
+ source_ips: [0.0.0.0/0]
20
+ - protocol: tcp
21
+ from_port: "#{web_ssl_port}"
22
+ to_port: "#{web_ssl_port}"
23
+ source_ips: [0.0.0.0/0]
24
+ web_tools:
25
+ description: "To open up port #{web_tools_port}/#{web_tools_ssl_port} for internal/tools http server"
26
+ rules:
27
+ - protocol: tcp
28
+ from_port: "#{web_tools_port}"
29
+ to_port: "#{web_tools_port}"
30
+ source_ips: [0.0.0.0/0]
31
+ - protocol: tcp
32
+ from_port: "#{web_tools_ssl_port}"
33
+ to_port: "#{web_tools_ssl_port}"
34
+ source_ips: [0.0.0.0/0]
35
+
36
+ roles:
37
+ web:
38
+ assigned_security_groups: [web]
39
+ web_tools:
40
+ assigned_security_groups: [web_tools]
@@ -0,0 +1,10 @@
1
+ description: A fairly complete and scalable mysql deployment setup
2
+ dependent_templates:
3
+ - base
4
+ - mysql
5
+ - haproxy
6
+ - apache
7
+ - passenger
8
+ - monit
9
+ - munin
10
+ - memcached
@@ -0,0 +1,72 @@
1
+
2
+ namespace :rubber do
3
+ namespace :cruise do
4
+
5
+ rubber.allow_optional_tasks(self)
6
+
7
+ # want ssh keys to be generated before we try and print it out
8
+ after "custom_install_base", "rubber:cruise:custom_install"
9
+
10
+ task :custom_install, :roles => :cruise do
11
+ rubber.sudo_script 'install_cruise', <<-ENDSCRIPT
12
+ export CRUISE_HOME="#{rubber_env.cruise_dir}"
13
+
14
+ if [[ ! -d $CRUISE_HOME ]]; then
15
+ git clone git://github.com/sml/cruisecontrol.rb.git $CRUISE_HOME
16
+ fi
17
+ ENDSCRIPT
18
+
19
+ logger.info("\n#######################################################################\n\n")
20
+ logger.info("This machine needs access to your source repository for cruise control")
21
+ logger.info("run 'cap rubber:cruise:setup_project' once access has been granted")
22
+ logger.info("then run 'cap rubber:cruise:start' to start the cruise web server")
23
+ logger.info("ssh public key:\n#{capture('cat ~/.ssh/id_dsa.pub')}")
24
+ logger.info("\n#######################################################################\n\n")
25
+ end
26
+
27
+ task :setup_project, :roles => :cruise do
28
+ rubber.sudo_script 'setup_project', <<-ENDSCRIPT
29
+
30
+ export CRUISE_HOME="#{rubber_env.cruise_dir}"
31
+ export CRUISE_DATA_ROOT="#{rubber_env.cruise_data_dir}"
32
+ export CRUISE_PROJECT_ROOT="#{rubber_env.cruise_project_dir}"
33
+
34
+ if [[ ! -d $CRUISE_HOME ]]; then
35
+ git clone git://github.com/sml/cruisecontrol.rb.git #{rubber_env.cruise_dir}
36
+ fi
37
+
38
+ if [[ ! -d $CRUISE_PROJECT_ROOT ]]; then
39
+ if [[ -z "#{rubber_env.cruise_repository}" ]]; then
40
+ echo "cruise_repository must be set in rubber env"
41
+ exit 1
42
+ fi
43
+
44
+ cd $CRUISE_HOME
45
+ echo "Adding project repository to cruise: #{rubber_env.cruise_repository}"
46
+ ./cruise add #{rubber_env.app_name} #{rubber_env.cruise_repository}
47
+ mkdir -p $CRUISE_PROJECT_ROOT/log
48
+ cd $CRUISE_PROJECT_ROOT && rake db:create RAILS_ENV=test
49
+ fi
50
+
51
+ ENDSCRIPT
52
+ end
53
+
54
+
55
+ desc "Start cruise control daemon"
56
+ task :start, :roles => :cruise do
57
+ run "/etc/init.d/cruise start"
58
+ end
59
+
60
+ desc "Stop cruise control daemon"
61
+ task :stop, :roles => :cruise, :on_error => :continue do
62
+ run "/etc/init.d/cruise stop"
63
+ end
64
+
65
+ desc "Restart cruise control daemon"
66
+ task :restart, :roles => :cruise do
67
+ stop
68
+ start
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,40 @@
1
+ <%
2
+ @path = "/etc/init.d/cruise"
3
+ @perms = 0755
4
+ %>#!/usr/bin/env ruby
5
+
6
+ require "fileutils"
7
+ include FileUtils
8
+
9
+ require "rubygems"
10
+
11
+ begin
12
+ gem 'mongrel'
13
+ rescue => e
14
+ puts "Error: daemon mode of CC.rb requires mongrel installed"
15
+ exit 1
16
+ end
17
+
18
+ def cruise_path
19
+ '<%= rubber_env.cruise_dir %>'
20
+ end
21
+
22
+ command = ARGV.shift
23
+
24
+ case command
25
+ when 'start'
26
+ cd cruise_path
27
+ system "./cruise start -d"
28
+ exit 0
29
+ when 'stop'
30
+ system "mongrel_rails stop -P #{cruise_path}/tmp/pids/mongrel.pid"
31
+ Dir["#{cruise_path}/tmp/pids/builders/*.pid"].each do |pid_file|
32
+ pid = File.open(pid_file){|f| f.read }
33
+ system "kill -9 #{pid}"
34
+ rm pid_file
35
+ end
36
+ exit 0
37
+ else
38
+ p "Usage: /etc/init.d/cruise start|stop"
39
+ exit 1
40
+ end