capistrano-kitchen 0.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/.ruby-gemset.template +1 -0
  5. data/.ruby-version.template +1 -0
  6. data/.travis.yml +7 -0
  7. data/.yardopts +5 -0
  8. data/Gemfile +8 -0
  9. data/Guardfile +13 -0
  10. data/LICENSE.txt +46 -0
  11. data/Rakefile +14 -0
  12. data/capistrano-kitchen.gemspec +29 -0
  13. data/lib/capistrano-kitchen.rb +41 -0
  14. data/lib/capistrano_kitchen/dishes/aptitude/manage.rb +38 -0
  15. data/lib/capistrano_kitchen/dishes/bundler/hooks.rb +7 -0
  16. data/lib/capistrano_kitchen/dishes/bundler/install.rb +79 -0
  17. data/lib/capistrano_kitchen/dishes/git/hooks.rb +3 -0
  18. data/lib/capistrano_kitchen/dishes/git/install.rb +18 -0
  19. data/lib/capistrano_kitchen/dishes/java_7_oracle/hooks.rb +5 -0
  20. data/lib/capistrano_kitchen/dishes/java_7_oracle/install.rb +17 -0
  21. data/lib/capistrano_kitchen/dishes/nginx_unicorn/app.conf +66 -0
  22. data/lib/capistrano_kitchen/dishes/nginx_unicorn/hooks.rb +11 -0
  23. data/lib/capistrano_kitchen/dishes/nginx_unicorn/install.rb +176 -0
  24. data/lib/capistrano_kitchen/dishes/nginx_unicorn/manage.rb +1 -0
  25. data/lib/capistrano_kitchen/dishes/nginx_unicorn/mime.types.erb +79 -0
  26. data/lib/capistrano_kitchen/dishes/nginx_unicorn/nginx.conf +138 -0
  27. data/lib/capistrano_kitchen/dishes/nginx_unicorn/nginx_unicorn.god +47 -0
  28. data/lib/capistrano_kitchen/dishes/nginx_unicorn/nginx_unicorn.init +95 -0
  29. data/lib/capistrano_kitchen/dishes/nginx_unicorn/nginx_unicorn.logrotate +18 -0
  30. data/lib/capistrano_kitchen/dishes/nginx_unicorn/stub_status.conf +16 -0
  31. data/lib/capistrano_kitchen/dishes/nodejs/hooks.rb +4 -0
  32. data/lib/capistrano_kitchen/dishes/nodejs/install.rb +13 -0
  33. data/lib/capistrano_kitchen/dishes/provision/empty_roles.rb +60 -0
  34. data/lib/capistrano_kitchen/dishes/provision/manage.rb +49 -0
  35. data/lib/capistrano_kitchen/dishes/provision/task_once.rb +62 -0
  36. data/lib/capistrano_kitchen/dishes/ruby/hooks.rb +7 -0
  37. data/lib/capistrano_kitchen/dishes/ruby/install.rb +55 -0
  38. data/lib/capistrano_kitchen/dishes/teelogger/teelogger.rb +121 -0
  39. data/lib/capistrano_kitchen/dishes/unicorn/hooks.rb +9 -0
  40. data/lib/capistrano_kitchen/dishes/unicorn/install.rb +120 -0
  41. data/lib/capistrano_kitchen/dishes/unicorn/unicorn.god +71 -0
  42. data/lib/capistrano_kitchen/dishes/unicorn/unicorn.rb.erb +191 -0
  43. data/lib/capistrano_kitchen/recipes/aptitude.rb +1 -0
  44. data/lib/capistrano_kitchen/recipes/bundler.rb +1 -0
  45. data/lib/capistrano_kitchen/recipes/git.rb +1 -0
  46. data/lib/capistrano_kitchen/recipes/java_7_oracle.rb +1 -0
  47. data/lib/capistrano_kitchen/recipes/nginx_unicorn.rb +1 -0
  48. data/lib/capistrano_kitchen/recipes/nodejs.rb +1 -0
  49. data/lib/capistrano_kitchen/recipes/provision.rb +1 -0
  50. data/lib/capistrano_kitchen/recipes/ruby.rb +1 -0
  51. data/lib/capistrano_kitchen/recipes/teelogger.rb +1 -0
  52. data/lib/capistrano_kitchen/recipes/unicorn.rb +1 -0
  53. data/lib/capistrano_kitchen/recipes/utilities.rb +442 -0
  54. data/lib/capistrano_kitchen/version.rb +3 -0
  55. data/spec/capistrano_kitchen_spec.rb +5 -0
  56. data/spec/spec_helper.rb +21 -0
  57. metadata +200 -0
@@ -0,0 +1,11 @@
1
+ # @author Donovan Bray <donnoman@donovanbray.com>
2
+
3
+ Capistrano::Configuration.instance(true).load do
4
+ after "deploy:provision", "nginx_unicorn:install"
5
+ after "deploy:setup", "nginx_unicorn:setup"
6
+ after "logrotate:rotate", "nginx_unicorn:reopen"
7
+ after "sdagent:setup", "nginx_unicorn:setup_sdagent"
8
+ after "nginx_unicorn:install", "nginx_unicorn:setup"
9
+ after "nginx_unicorn:setup", "nginx_unicorn:configure"
10
+ on :load, "nginx_unicorn:watcher"
11
+ end
@@ -0,0 +1,176 @@
1
+ # @author Donovan Bray <donnoman@donovanbray.com>
2
+ require File.expand_path(File.dirname(__FILE__) + '/../utilities')
3
+
4
+ # This Nginx is targeted for the :app role meant to be acting as a front end
5
+ # to a unicorn based application
6
+
7
+ # Additions
8
+ # https://github.com/newobj/nginx-x-rid-header
9
+ # https://github.com/yaoweibin/nginx_syslog_patch
10
+
11
+ # Possible Future Additions
12
+ # https://support.newrelic.com/kb/features/tracking-front-end-time
13
+
14
+ Capistrano::Configuration.instance(true).load do
15
+
16
+ namespace :nginx_unicorn do
17
+ set :nginx_unicorn_init_d, "nginx_unicorn"
18
+ set :nginx_unicorn_root, "/opt/nginx_unicorn"
19
+ set :nginx_unicorn_conf_path, File.join(File.dirname(__FILE__),'nginx.conf')
20
+ set(:nginx_unicorn_conf_dir) {"#{nginx_unicorn_root}/conf"}
21
+ set :nginx_unicorn_init_d_path, File.join(File.dirname(__FILE__),'nginx_unicorn.init')
22
+ set :nginx_unicorn_stub_conf_path, File.join(File.dirname(__FILE__),'stub_status.conf')
23
+ set :nginx_unicorn_god_path, File.join(File.dirname(__FILE__),'nginx_unicorn.god')
24
+ set :nginx_unicorn_logrotate_path, File.join(File.dirname(__FILE__),'nginx_unicorn.logrotate')
25
+ set :nginx_unicorn_mime_types_erb, File.join(File.dirname(__FILE__),'mime.types.erb')
26
+ # must be above 1.1.7 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-1180
27
+ set :nginx_unicorn_src, "http://nginx.org/download/nginx-1.2.0.tar.gz"
28
+ set(:nginx_unicorn_ver) { nginx_unicorn_src.match(/\/([^\/]*)\.tar\.gz$/)[1] }
29
+ set(:nginx_unicorn_source_dir) {"#{nginx_unicorn_root}/src/#{nginx_unicorn_ver}"}
30
+ set(:nginx_unicorn_patch_dir) {"#{nginx_unicorn_root}/src"}
31
+ set(:nginx_unicorn_upstream_socket){"#{shared_path}/sockets/unicorn.sock"}
32
+ set(:nginx_unicorn_log_dir) {"#{nginx_unicorn_root}/logs"}
33
+ set(:nginx_unicorn_pid_file) {"#{nginx_unicorn_log_dir}/nginx.pid"}
34
+ set(:nginx_unicorn_sbin_file) {"#{nginx_unicorn_root}/sbin/nginx"}
35
+ set :nginx_unicorn_watcher, nil
36
+ set :nginx_unicorn_user, "nobody"
37
+ set :nginx_unicorn_suppress_runner, false
38
+ set :nginx_unicorn_port, '80'
39
+ set :nginx_unicorn_server_name, 'localhost'
40
+ set :nginx_unicorn_app_conf_path, File.join(File.dirname(__FILE__),'app.conf')
41
+ set :nginx_unicorn_set_scheme, true
42
+ set :nginx_unicorn_worker_processes, "1" # should be cpu's - 1
43
+ set :nginx_unicorn_gzip, true
44
+ set :nginx_unicorn_fail_timeout, nil
45
+ set :nginx_unicorn_syslog_patch, true
46
+ set :nginx_unicorn_rid_header_patch, false # while we want this to be true by default it makes the configurations incompatible
47
+ # with the previous default. Which can cause a working NGINX to stop working until recompiled.
48
+ set :nginx_unicorn_use_503_instead_of_502, false # useful if you are behind a load balancer that only understands 503's.
49
+
50
+ set(:nginx_unicorn_configure_flags) {[
51
+ "--prefix=#{nginx_unicorn_root}",
52
+ "--sbin-path=#{nginx_unicorn_sbin_file}",
53
+ "--pid-path=#{nginx_unicorn_pid_file}",
54
+ "--conf-path=#{nginx_unicorn_conf_dir}/nginx.conf",
55
+ "--with-debug",
56
+ "--with-http_gzip_static_module",
57
+ "--with-http_stub_status_module",
58
+ "--with-http_ssl_module",
59
+ "--with-ld-opt=-lossp-uuid",
60
+ "--with-cc-opt=-I/usr/include/ossp"
61
+ ]}
62
+
63
+ desc "select watcher"
64
+ task :watcher do
65
+ nginx_unicorn.send("watch_with_#{nginx_unicorn_watcher}".to_sym) unless nginx_unicorn_watcher.nil?
66
+ end
67
+
68
+ desc "Use GOD as nginx_unicorn's runner"
69
+ task :watch_with_god do
70
+ #rejigger the maintenance tasks to use god when god is in play
71
+ %w(start stop restart).each do |t|
72
+ task t.to_sym, :roles => :app do
73
+ god.cmd "#{t} nginx_unicorn" unless nginx_unicorn_suppress_runner
74
+ end
75
+ end
76
+ after "god:setup", "nginx_unicorn:setup_god"
77
+ end
78
+
79
+ desc "setup god to watch nginx_unicorn"
80
+ task :setup_god, :roles => :app do
81
+ god.upload nginx_unicorn_god_path, 'nginx_unicorn.god'
82
+ end
83
+
84
+ desc 'Installs nginx for unicorn'
85
+ task :install, :roles => :app do
86
+ utilities.apt_install "libssl-dev zlib1g-dev libcurl4-openssl-dev libpcre3-dev libossp-uuid-dev git-core"
87
+ sudo "mkdir -p #{nginx_unicorn_source_dir}"
88
+ run "cd #{nginx_unicorn_root}/src && #{sudo} wget --tries=2 -c --progress=bar:force #{nginx_unicorn_src} && #{sudo} tar zxvf #{nginx_unicorn_ver}.tar.gz"
89
+ if nginx_unicorn_syslog_patch
90
+ nginx_unicorn_configure_flags << "--add-module=#{nginx_unicorn_patch_dir}/nginx_syslog_patch"
91
+ utilities.git_clone_or_pull "git://github.com/yaoweibin/nginx_syslog_patch.git", "#{nginx_unicorn_patch_dir}/nginx_syslog_patch"
92
+ run "cd #{nginx_unicorn_source_dir} && #{sudo} sh -c 'patch -p1 < #{nginx_unicorn_patch_dir}/nginx_syslog_patch/syslog_#{nginx_unicorn_ver.split('-').last}.patch'"
93
+ end
94
+ if nginx_unicorn_rid_header_patch
95
+ nginx_unicorn_configure_flags << "--add-module=#{nginx_unicorn_patch_dir}/nginx-x-rid-header"
96
+ utilities.git_clone_or_pull "git://github.com/newobj/nginx-x-rid-header.git", "#{nginx_unicorn_patch_dir}/nginx-x-rid-header"
97
+ end
98
+ run "cd #{nginx_unicorn_source_dir} && #{sudo} ./configure #{nginx_unicorn_configure_flags.join(" ")} && #{sudo} make"
99
+ run "cd #{nginx_unicorn_source_dir} && #{sudo} make install"
100
+ end
101
+
102
+ task :setup, :roles => :app do
103
+ sudo "mkdir -p #{nginx_unicorn_conf_dir}/sites-available #{nginx_unicorn_conf_dir}/sites-enabled #{nginx_unicorn_log_dir}"
104
+ utilities.sudo_upload_template nginx_unicorn_conf_path,"#{nginx_unicorn_conf_dir}/nginx.conf"
105
+ utilities.sudo_upload_template nginx_unicorn_mime_types_erb,"#{nginx_unicorn_conf_dir}/mime.types"
106
+ utilities.sudo_upload_template nginx_unicorn_stub_conf_path,"#{nginx_unicorn_conf_dir}/sites-available/stub_status.conf"
107
+ sudo "ln -sf #{nginx_unicorn_conf_dir}/sites-available/stub_status.conf #{nginx_unicorn_conf_dir}/sites-enabled/stub_status.conf"
108
+ utilities.sudo_upload_template nginx_unicorn_init_d_path,"/etc/init.d/#{nginx_unicorn_init_d}", :mode => "u+x"
109
+ utilities.sudo_upload_template nginx_unicorn_logrotate_path,"/etc/logrotate.d/#{nginx_unicorn_init_d}"
110
+ end
111
+
112
+ desc "Nginx Unicorn Reload"
113
+ task :reload, :roles => :app do
114
+ sudo "/etc/init.d/#{nginx_unicorn_init_d} reload"
115
+ end
116
+
117
+ desc "Nginx Unicorn Reopen"
118
+ task :reopen, :roles => :app do
119
+ sudo "/etc/init.d/#{nginx_unicorn_init_d} reopen"
120
+ end
121
+
122
+ task :remove_default, :roles => :app do
123
+ sudo "rm -f #{nginx_unicorn_conf_dir}/sites-enabled/default"
124
+ end
125
+
126
+ desc "Watch Nginx and Unicorn Workers with GOD"
127
+ task :setup_god, :roles => :app do
128
+ god.upload nginx_unicorn_god_path, "#{nginx_unicorn_init_d}.god"
129
+ # disable init from automatically starting and stopping these init controlled apps
130
+ # god will be started by init, and in turn start these god controlled apps.
131
+ # but leave the init script in place to be called manually
132
+ sudo "update-rc.d -f nginx_unicorn remove; true"
133
+ #if you simply remove lsb driven links an apt-get can later reinstall them
134
+ #so we explicitly define the kill scripts.
135
+ sudo "update-rc.d nginx_unicorn stop 20 2 3 4 5 .; true"
136
+ end
137
+
138
+ desc "Setup sd-agent to collect metrics for nginx"
139
+ task :setup_sdagent, :roles => :app do
140
+ # block executing this task if :sdagent isn't present on any :app servers.
141
+ if (find_servers(:roles => :app).map{|d| d.host} & find_servers(:roles => :sdagent).map{|d| d.host}).any?
142
+ sudo "sed -i 's/^.*nginx_status_url.*$/nginx_status_url: http:\\/\\/127.0.0.1\\/nginx_status/g' #{sdagent_root}/config.cfg"
143
+ end
144
+ end
145
+
146
+ desc "Write the application conf"
147
+ task :configure, :roles => :app do
148
+ utilities.sudo_upload_template nginx_unicorn_app_conf_path, "#{nginx_unicorn_conf_dir}/sites-available/#{application}.conf"
149
+ enable
150
+ end
151
+
152
+ desc "remove the application conf"
153
+ task :deconfigure, :roles => :app do
154
+ disable
155
+ sudo "rm -rf #{nginx_unicorn_conf_dir}/sites-available/#{application}.conf"
156
+ end
157
+
158
+ desc "Enable the application conf"
159
+ task :enable, :roles => :app do
160
+ sudo "ln -sf #{nginx_unicorn_conf_dir}/sites-available/#{application}.conf #{nginx_unicorn_conf_dir}/sites-enabled/#{application}.conf"
161
+ end
162
+
163
+ desc "Disable the application conf"
164
+ task :disable, :roles => :app do
165
+ sudo "rm -f #{nginx_unicorn_conf_dir}/sites-enabled/#{application}.conf"
166
+ end
167
+
168
+ %w(start stop restart).each do |t|
169
+ desc "#{t} nginx_unicorn via init"
170
+ task t.to_sym, :roles => :app do
171
+ sudo "/etc/init.d/#{nginx_unicorn_init_d} #{t}" unless nginx_unicorn_suppress_runner
172
+ end
173
+ end
174
+
175
+ end
176
+ end
@@ -0,0 +1 @@
1
+ # no longer required, all methods moved to install.rb
@@ -0,0 +1,79 @@
1
+ types {
2
+ text/html html htm shtml;
3
+ text/css css;
4
+ text/xml xml;
5
+ image/gif gif;
6
+ image/jpeg jpeg jpg;
7
+ application/x-javascript js;
8
+ application/atom+xml atom;
9
+ application/rss+xml rss;
10
+
11
+ text/mathml mml;
12
+ text/plain txt;
13
+ text/vnd.sun.j2me.app-descriptor jad;
14
+ text/vnd.wap.wml wml;
15
+ text/x-component htc;
16
+
17
+ image/png png;
18
+ image/tiff tif tiff;
19
+ image/vnd.wap.wbmp wbmp;
20
+ image/x-icon ico;
21
+ image/x-jng jng;
22
+ image/x-ms-bmp bmp;
23
+ image/svg+xml svg svgz;
24
+ image/webp webp;
25
+
26
+ application/java-archive jar war ear;
27
+ application/mac-binhex40 hqx;
28
+ application/msword doc;
29
+ application/pdf pdf;
30
+ application/postscript ps eps ai;
31
+ application/rtf rtf;
32
+ application/vnd.ms-excel xls;
33
+ application/vnd.ms-powerpoint ppt;
34
+ application/vnd.wap.wmlc wmlc;
35
+ application/vnd.google-earth.kml+xml kml;
36
+ application/vnd.google-earth.kmz kmz;
37
+ application/x-7z-compressed 7z;
38
+ application/x-cocoa cco;
39
+ application/x-java-archive-diff jardiff;
40
+ application/x-java-jnlp-file jnlp;
41
+ application/x-makeself run;
42
+ application/x-perl pl pm;
43
+ application/x-pilot prc pdb;
44
+ application/x-rar-compressed rar;
45
+ application/x-redhat-package-manager rpm;
46
+ application/x-sea sea;
47
+ application/x-shockwave-flash swf;
48
+ application/x-stuffit sit;
49
+ application/x-tcl tcl tk;
50
+ application/x-x509-ca-cert der pem crt;
51
+ application/x-xpinstall xpi;
52
+ application/xhtml+xml xhtml;
53
+ application/zip zip;
54
+
55
+ application/octet-stream bin exe dll;
56
+ application/octet-stream deb;
57
+ application/octet-stream dmg;
58
+ application/octet-stream eot;
59
+ application/octet-stream iso img;
60
+ application/octet-stream msi msp msm;
61
+
62
+ audio/midi mid midi kar;
63
+ audio/mpeg mp3;
64
+ audio/ogg ogg;
65
+ audio/x-m4a m4a;
66
+ audio/x-realaudio ra;
67
+
68
+ video/3gpp 3gpp 3gp;
69
+ video/mp4 mp4;
70
+ video/mpeg mpeg mpg;
71
+ video/quicktime mov;
72
+ video/webm webm;
73
+ video/x-flv flv;
74
+ video/x-m4v m4v;
75
+ video/x-mng mng;
76
+ video/x-ms-asf asx asf;
77
+ video/x-ms-wmv wmv;
78
+ video/x-msvideo avi;
79
+ }
@@ -0,0 +1,138 @@
1
+ #user <%=nginx_unicorn_user%>;
2
+ worker_processes <%=nginx_unicorn_worker_processes%>;
3
+
4
+ # nginx file limits.
5
+ worker_rlimit_nofile 40000;
6
+
7
+ # worker_connections specifies how many network connections a worker is
8
+ # allowed to maintain. worker_rlimit_nofile specifies how many open file
9
+ # handles are allowed per worker. Since all tcp connections are file
10
+ # handles (descriptors) on *nix systems, worker_rlimit_nofile must be
11
+ # greater than worker_connections.
12
+
13
+ <% if nginx_unicorn_syslog_patch %>
14
+ syslog local6 <%=nginx_unicorn_init_d%>;
15
+ error_log syslog:info|<%=nginx_unicorn_log_dir%>/error.log;
16
+ <% else %>
17
+ error_log <%=nginx_unicorn_log_dir%>/error.log;
18
+ <% end %>
19
+
20
+ # pid <%=nginx_unicorn_pid_file%>;
21
+
22
+ events {
23
+ worker_connections 30000;
24
+ use epoll;
25
+ }
26
+
27
+ http {
28
+ include mime.types;
29
+ types {
30
+ audio/x-wav wav;
31
+ }
32
+ default_type application/octet-stream;
33
+
34
+ # hide the server version
35
+ server_tokens off;
36
+
37
+ # ssl_certificate <%=nginx_unicorn_root%>/wildcard.homerun.com.crt;
38
+ # ssl_certificate_key <%=nginx_unicorn_root%>/wildcard.homerun.com.key;
39
+ ssl_protocols SSLv3 TLSv1;
40
+
41
+ # http://matt.io/technobabble/hivemind_devops_alert:_nginx_does_not_suck_at_ssl/ur
42
+ # http://news.ycombinator.com/item?id=2759596
43
+ # You can force nginx to not enable the expensive cipher by excluding all DHE ciphers.
44
+ # Add "!kEDH" to your cipher list. It disables (the ! disables) any cipher using
45
+ # Ephemeral Diffie-Hellman.
46
+ ssl_ciphers HIGH:!ADH:!MD5:!kEDH;
47
+
48
+ server_names_hash_bucket_size 128;
49
+
50
+ # The proxy_read_timeout directive sets the read timeout for the response of the proxied server,
51
+ # in seconds by default. It determines how long nginx will wait to get the response to a request.
52
+ # The timeout is established not for entire response, but only between two operations of reading.
53
+ proxy_read_timeout 121s;
54
+
55
+ # $proxy_add_x_forwarded_for
56
+ # Contains client request-header "X-Forwarded-For" with separated by comma $remote_addr.
57
+ # If there is no X-Forwarded-For request-header, than $proxy_add_x_forwarded_for is equal to $remote_addr.
58
+
59
+ <% if nginx_unicorn_rid_header_patch -%>
60
+ # For nginx_unicorn we should use the X-Request-Id header passed in on the connection
61
+ # On your backend, you can pull the request header x-exampledotcom-rid, and log it or tie it to whatever you may like.
62
+ # This makes it really easy to correlate backend exceptions or instrumentation with frontend http request logs.
63
+ # Goes well with the new Rails 3.2/master support for X-Request-Id.
64
+ proxy_set_header X-Request-Id $request_id;
65
+
66
+ log_format timing '$remote_addr - $remote_user [$time_local] "$http_user_agent" $scheme $http_host "$request" $status - request_time $request_time upstream_response_time $upstream_response_time upstream_cache_status $upstream_cache_status request_id "$request_id"';
67
+
68
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" - $connection $request_time $upstream_cache_status "$request_id"';
69
+ <% else -%>
70
+ log_format timing '$remote_addr - $remote_user [$time_local] "$http_user_agent" $scheme $http_host "$request" $status - request_time $request_time upstream_response_time $upstream_response_time upstream_cache_status $upstream_cache_status';
71
+
72
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" - $connection $request_time $upstream_cache_status';
73
+ <% end -%>
74
+
75
+
76
+ client_body_temp_path '/dev/shm';
77
+ server_name_in_redirect on;
78
+ ignore_invalid_headers on;
79
+
80
+ #default: keepalive_timeout 75
81
+ keepalive_timeout 75 20;
82
+
83
+ #default: keepalive_requests 100
84
+ keepalive_requests 20;
85
+ sendfile on;
86
+ tcp_nodelay on;
87
+ tcp_nopush on;
88
+ <% if nginx_unicorn_gzip %>
89
+ gzip on;
90
+ gzip_http_version 1.0;
91
+ gzip_min_length 0;
92
+ gzip_buffers 16 8k;
93
+ gzip_comp_level 6;
94
+ gzip_static on;
95
+ gzip_proxied any;
96
+ gzip_vary on;
97
+ gzip_types text/plain text/javascript text/css application/x-javascript text/xml;
98
+ <% end %>
99
+ ##
100
+ # Optimizations: http://www.typemiss.net/blog/kounoike/20060227-75
101
+ client_header_timeout 10m;
102
+ client_body_timeout 10m;
103
+ send_timeout 10m;
104
+
105
+ connection_pool_size 256;
106
+ client_header_buffer_size 12k;
107
+ large_client_header_buffers 4 8k;
108
+ request_pool_size 4k;
109
+
110
+ output_buffers 1 32k;
111
+ postpone_output 1460;
112
+
113
+ # proxy_buffers
114
+ # syntax: proxy_buffers the_number is_size;
115
+ # default: proxy_buffers 8 4k/8k;
116
+ # context: http, server, location
117
+ # This directive sets the number and the size of buffers, into which will be read the answer, obtained from the proxied server.
118
+ # By default, the size of one buffer is equal to the size of page. Depending on platform this is either 4K or 8K.
119
+
120
+ proxy_buffers 16 32k;
121
+
122
+ # proxy_buffer_size
123
+ # syntax: proxy_buffer_size the_size;
124
+ # default: proxy_buffer_size 4k/8k;
125
+ # context: http, server, location
126
+ # This directive set the buffer size, into which will be read the first part of the response, obtained from the proxied server.
127
+ # In this part of response the small response-header is located, as a rule.
128
+ # By default, the buffer size is equal to the size of one buffer in directive proxy_buffers; however, it is possible to set it to less.
129
+
130
+ # proxy_busy_buffers_size
131
+ # syntax: proxy_busy_buffers_size size;
132
+ # default: proxy_busy_buffers_size proxy_buffer_size * 2;
133
+ # context: http, server, location, if
134
+ # TODO: Description.
135
+
136
+ include <%=nginx_unicorn_conf_dir%>/sites-enabled/*;
137
+
138
+ }
@@ -0,0 +1,47 @@
1
+ God.watch do |w|
2
+ w.name = "<%=nginx_unicorn_init_d%>"
3
+ w.group = "nginx"
4
+ w.interval = 5.seconds # default
5
+ w.start = "/etc/init.d/<%=nginx_unicorn_init_d%> start"
6
+ w.stop = "/etc/init.d/<%=nginx_unicorn_init_d%> stop"
7
+ w.restart = "/etc/init.d/<%=nginx_unicorn_init_d%> restart"
8
+ w.pid_file = "<%=nginx_unicorn_pid_file%>"
9
+
10
+ # clean pid files before start if necessary
11
+ w.behavior(:clean_pid_file)
12
+
13
+ # determine the state on startup
14
+ w.transition(:init, { true => :up, false => :start }) do |on|
15
+ on.condition(:process_running) do |c|
16
+ c.running = true
17
+ end
18
+ end
19
+
20
+ # determine when process has finished starting
21
+ w.transition([:start, :restart], :up) do |on|
22
+ on.condition(:process_running) do |c|
23
+ c.running = true
24
+ end
25
+ end
26
+
27
+ # start if process is not running
28
+ w.transition(:up, :start) do |on|
29
+ on.condition(:process_exits) do |c|
30
+ c.notify = %w[ <%=god_notify_list%> ]
31
+ end
32
+ end
33
+
34
+ # lifecycle
35
+ w.lifecycle do |on|
36
+ on.condition(:flapping) do |c|
37
+ c.to_state = [:start, :restart]
38
+ c.times = 5
39
+ c.within = 5.minute
40
+ c.transition = :unmonitored
41
+ c.retry_in = 10.minutes
42
+ c.retry_times = 5
43
+ c.retry_within = 2.hours
44
+ c.notify = %w[ <%=god_notify_list%> ]
45
+ end
46
+ end
47
+ end