capistrano-unicorn-nginx 3.2.0 → 3.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/capistrano-unicorn-nginx.gemspec +2 -2
- data/lib/capistrano/tasks/nginx.rake +3 -0
- data/lib/capistrano/tasks/unicorn.rake +1 -0
- data/lib/capistrano/unicorn_nginx/helpers.rb +22 -2
- data/lib/capistrano/unicorn_nginx/version.rb +1 -1
- data/lib/generators/capistrano/unicorn_nginx/templates/_default_server_directive.erb +83 -0
- data/lib/generators/capistrano/unicorn_nginx/templates/nginx_conf.erb +5 -66
- data/lib/generators/capistrano/unicorn_nginx/templates/unicorn.rb.erb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8ddad3cf564b9cfbcff371c0e13737733c5965c
|
4
|
+
data.tar.gz: 79441091d32be807205469f230f08bc98f9cd27b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f63dc9207ae9e2fade717e5105354d718cc88added1954ea7015e73ff529aaa511d92634c4a6db2ab526e4e47301aca9bbd885a8f61e4c52962520bb803c9274
|
7
|
+
data.tar.gz: 50e42a13d0fdeed608e30d4d03eea961344ad05d1ec51522cbbf07352663902c57634541d6f53a91b89eff988d5e91efa4279279a31ae652fb11de038e110149
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
### master
|
4
4
|
|
5
|
+
### v3.3.0, 2015-02-09
|
6
|
+
- added client SSL authentication (@rhomeister)
|
7
|
+
- make unicorn timeout configurable (@vicentllongo)
|
8
|
+
|
5
9
|
### v3.2.0, 2015-01-28
|
6
10
|
- allow 'PATCH' HTTP method in nginx_conf (@lonre)
|
7
11
|
- added SPDY support (@rhomeister)
|
@@ -6,8 +6,8 @@ require 'capistrano/unicorn_nginx/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "capistrano-unicorn-nginx"
|
8
8
|
gem.version = Capistrano::UnicornNginx::VERSION
|
9
|
-
gem.authors = ["Bruno Sutic"]
|
10
|
-
gem.email = ["bruno.sutic@gmail.com"]
|
9
|
+
gem.authors = ["Ruben Stranders", "Bruno Sutic"]
|
10
|
+
gem.email = ["r.stranders@gmail.com", "bruno.sutic@gmail.com"]
|
11
11
|
gem.description = <<-EOF.gsub(/^\s+/, '')
|
12
12
|
Capistrano tasks for automatic and sensible unicorn + nginx configuraion.
|
13
13
|
|
@@ -13,6 +13,9 @@ namespace :load do
|
|
13
13
|
# ssl options
|
14
14
|
set :nginx_location, '/etc/nginx'
|
15
15
|
set :nginx_use_ssl, false
|
16
|
+
set :nginx_use_spdy, false
|
17
|
+
# if true, passes the SSL client certificate to the application server for consumption in Ruby code
|
18
|
+
set :nginx_pass_ssl_client_cert, false
|
16
19
|
set :nginx_ssl_cert, -> { nginx_default_ssl_cert_file_name }
|
17
20
|
set :nginx_ssl_cert_key, -> { nginx_default_ssl_cert_key_file_name }
|
18
21
|
set :nginx_upload_local_cert, true
|
@@ -11,6 +11,7 @@ namespace :load do
|
|
11
11
|
set :unicorn_pid, -> { unicorn_default_pid_file }
|
12
12
|
set :unicorn_config, -> { unicorn_default_config_file }
|
13
13
|
set :unicorn_workers, 2
|
14
|
+
set :unicorn_worker_timeout, 30
|
14
15
|
set :unicorn_tcp_listen_port, 8080
|
15
16
|
set :unicorn_use_tcp, -> { roles(:app, :web).count > 1 } # use tcp if web and app nodes are on different servers
|
16
17
|
set :unicorn_app_env, -> { fetch(:rails_env) || fetch(:stage) }
|
@@ -8,13 +8,21 @@ module Capistrano
|
|
8
8
|
SSHKit::Command.new(:bundle, :exec, :unicorn, args).to_command
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
# renders the ERB template specified by template_name to string. Use the locals variable to pass locals to the
|
12
|
+
# ERB template
|
13
|
+
def template_to_s(template_name, locals = {})
|
12
14
|
config_file = "#{fetch(:templates_path)}/#{template_name}"
|
13
15
|
# if no customized file, proceed with default
|
14
16
|
unless File.exists?(config_file)
|
15
17
|
config_file = File.join(File.dirname(__FILE__), "../../generators/capistrano/unicorn_nginx/templates/#{template_name}")
|
16
18
|
end
|
17
|
-
|
19
|
+
|
20
|
+
ERB.new(File.read(config_file)).result(ERBNamespace.new(locals).get_binding)
|
21
|
+
end
|
22
|
+
|
23
|
+
# renders the ERB template specified by template_name to a StringIO buffer
|
24
|
+
def template(template_name, locals = {})
|
25
|
+
StringIO.new(template_to_s(template_name, locals))
|
18
26
|
end
|
19
27
|
|
20
28
|
def file_exists?(path)
|
@@ -33,6 +41,18 @@ module Capistrano
|
|
33
41
|
sudo :mv, tmp_file, to_dir
|
34
42
|
end
|
35
43
|
|
44
|
+
# Helper class to pass local variables to an ERB template
|
45
|
+
class ERBNamespace
|
46
|
+
def initialize(hash)
|
47
|
+
hash.each do |key, value|
|
48
|
+
singleton_class.send(:define_method, key) { value }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_binding
|
53
|
+
binding
|
54
|
+
end
|
55
|
+
end
|
36
56
|
end
|
37
57
|
end
|
38
58
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<% if fetch(:nginx_use_ssl) && nginx_pass_ssl_client_cert %>
|
2
|
+
# source: http://forum.nginx.org/read.php?2,236546,236596
|
3
|
+
map $ssl_client_raw_cert $a {
|
4
|
+
"~^(-.*-\n)(?<1st>[^\n]+)\n((?<b>[^\n]+)\n)?((?<c>[^\n]+)\n)?((?<d>[^\n]+)\n)?((?<e>[^\n]+)\n)?((?<f>[^\n]+)\n)?((?<g>[^\n]+)\n)?((?<h>[^\n]+)\n)?((?<i>[^\n]+)\n)?((?<j>[^\n]+)\n)?((?<k>[^\n]+)\n)?((?<l>[^\n]+)\n)?((?<m>[^\n]+)\n)?((?<n>[^\n]+)\n)?((?<o>[^\n]+)\n)?((?<p>[^\n]+)\n)?((?<q>[^\n]+)\n)?((?<r>[^\n]+)\n)?((?<s>[^\n]+)\n)?((?<t>[^\n]+)\n)?((?<v>[^\n]+)\n)?((?<u>[^\n]+)\n)?((?<w>[^\n]+)\n)?((?<x>[^\n]+)\n)?((?<y>[^\n]+)\n)?((?<z>[^\n]+)\n)?(-.*-)$" $1st;
|
5
|
+
}
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
server {
|
9
|
+
<% if fetch(:nginx_use_ssl) %>
|
10
|
+
<% if fetch(:nginx_use_spdy) %>
|
11
|
+
listen <%= ssl_port %> spdy;
|
12
|
+
<% else %>
|
13
|
+
listen <%= ssl_port %>;
|
14
|
+
<% end %>
|
15
|
+
ssl on;
|
16
|
+
ssl_certificate <%= nginx_ssl_cert_file %>;
|
17
|
+
ssl_certificate_key <%= nginx_ssl_cert_key_file %>;
|
18
|
+
<% else %>
|
19
|
+
listen 80;
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
<% if fetch(:nginx_use_ssl) && nginx_pass_ssl_client_cert %>
|
23
|
+
ssl_verify_client optional_no_ca;
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
client_max_body_size 4G;
|
27
|
+
keepalive_timeout 10;
|
28
|
+
|
29
|
+
error_page 500 502 504 /500.html;
|
30
|
+
error_page 503 @503;
|
31
|
+
|
32
|
+
server_name <%= fetch(:nginx_server_name) %>;
|
33
|
+
root <%= current_path %>/public;
|
34
|
+
try_files $uri/index.html $uri @unicorn_<%= fetch(:nginx_config_name) %>;
|
35
|
+
|
36
|
+
location @unicorn_<%= fetch(:nginx_config_name) %> {
|
37
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
38
|
+
proxy_set_header Host $http_host;
|
39
|
+
proxy_redirect off;
|
40
|
+
<% if fetch(:nginx_use_ssl) %>
|
41
|
+
proxy_set_header X-Forwarded-Proto https;
|
42
|
+
<% end %>
|
43
|
+
<% if fetch(:nginx_use_ssl) && nginx_pass_ssl_client_cert %>
|
44
|
+
# source: http://forum.nginx.org/read.php?2,236546,236596
|
45
|
+
proxy_set_header X-Client-Cert $a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$v$u$w$x$y$z;
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
proxy_pass http://unicorn_<%= fetch(:nginx_config_name) %>;
|
49
|
+
# limit_req zone=one;
|
50
|
+
access_log <%= nginx_access_log_file %>;
|
51
|
+
error_log <%= nginx_error_log_file %>;
|
52
|
+
}
|
53
|
+
|
54
|
+
location ^~ /assets/ {
|
55
|
+
gzip_static on;
|
56
|
+
expires max;
|
57
|
+
add_header Cache-Control public;
|
58
|
+
}
|
59
|
+
|
60
|
+
location = /50x.html {
|
61
|
+
root html;
|
62
|
+
}
|
63
|
+
|
64
|
+
location = /404.html {
|
65
|
+
root html;
|
66
|
+
}
|
67
|
+
|
68
|
+
location @503 {
|
69
|
+
error_page 405 = /system/maintenance.html;
|
70
|
+
if (-f $document_root/system/maintenance.html) {
|
71
|
+
rewrite ^(.*)$ /system/maintenance.html break;
|
72
|
+
}
|
73
|
+
rewrite ^(.*)$ /503.html break;
|
74
|
+
}
|
75
|
+
|
76
|
+
if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
|
77
|
+
return 405;
|
78
|
+
}
|
79
|
+
|
80
|
+
if (-f $document_root/system/maintenance.html) {
|
81
|
+
return 503;
|
82
|
+
}
|
83
|
+
}
|
@@ -16,71 +16,10 @@ server {
|
|
16
16
|
}
|
17
17
|
<% end %>
|
18
18
|
|
19
|
-
server
|
20
|
-
|
21
|
-
<% if fetch(:nginx_use_spdy) %>
|
22
|
-
listen 443 spdy;
|
23
|
-
<% else %>
|
24
|
-
listen 443;
|
25
|
-
<% end %>
|
26
|
-
ssl on;
|
27
|
-
ssl_certificate <%= nginx_ssl_cert_file %>;
|
28
|
-
ssl_certificate_key <%= nginx_ssl_cert_key_file %>;
|
29
|
-
<% else %>
|
30
|
-
listen 80;
|
31
|
-
<% end %>
|
32
|
-
|
33
|
-
client_max_body_size 4G;
|
34
|
-
keepalive_timeout 10;
|
35
|
-
|
36
|
-
error_page 500 502 504 /500.html;
|
37
|
-
error_page 503 @503;
|
38
|
-
|
39
|
-
server_name <%= fetch(:nginx_server_name) %>;
|
40
|
-
root <%= current_path %>/public;
|
41
|
-
try_files $uri/index.html $uri @unicorn_<%= fetch(:nginx_config_name) %>;
|
19
|
+
<% # render the default server directive. If SSL is enabled, port 443 is used %>
|
20
|
+
<%= template_to_s("_default_server_directive.erb", ssl_port: 443, nginx_pass_ssl_client_cert: false).to_s %>
|
42
21
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
proxy_redirect off;
|
47
|
-
<% if fetch(:nginx_use_ssl) %>
|
48
|
-
proxy_set_header X-Forwarded-Proto https;
|
22
|
+
<% if fetch(:nginx_pass_ssl_client_cert) %>
|
23
|
+
<% # render the server directive with SSL client certificate authentication enabled on port 444 %>
|
24
|
+
<%= template_to_s("_default_server_directive.erb", ssl_port: 444, nginx_pass_ssl_client_cert: true).to_s %>
|
49
25
|
<% end %>
|
50
|
-
proxy_pass http://unicorn_<%= fetch(:nginx_config_name) %>;
|
51
|
-
# limit_req zone=one;
|
52
|
-
access_log <%= nginx_access_log_file %>;
|
53
|
-
error_log <%= nginx_error_log_file %>;
|
54
|
-
}
|
55
|
-
|
56
|
-
location ^~ /assets/ {
|
57
|
-
gzip_static on;
|
58
|
-
expires max;
|
59
|
-
add_header Cache-Control public;
|
60
|
-
}
|
61
|
-
|
62
|
-
location = /50x.html {
|
63
|
-
root html;
|
64
|
-
}
|
65
|
-
|
66
|
-
location = /404.html {
|
67
|
-
root html;
|
68
|
-
}
|
69
|
-
|
70
|
-
location @503 {
|
71
|
-
error_page 405 = /system/maintenance.html;
|
72
|
-
if (-f $document_root/system/maintenance.html) {
|
73
|
-
rewrite ^(.*)$ /system/maintenance.html break;
|
74
|
-
}
|
75
|
-
rewrite ^(.*)$ /503.html break;
|
76
|
-
}
|
77
|
-
|
78
|
-
if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
|
79
|
-
return 405;
|
80
|
-
}
|
81
|
-
|
82
|
-
if (-f $document_root/system/maintenance.html) {
|
83
|
-
return 503;
|
84
|
-
}
|
85
|
-
|
86
|
-
}
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-unicorn-nginx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
+
- Ruben Stranders
|
7
8
|
- Bruno Sutic
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-02-09 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: capistrano
|
@@ -59,6 +60,7 @@ description: |
|
|
59
60
|
Works *only* with Capistrano 3+. For Capistrano 2 try version 0.0.8 of this
|
60
61
|
gem: http://rubygems.org/gems/capistrano-nginx-unicorn
|
61
62
|
email:
|
63
|
+
- r.stranders@gmail.com
|
62
64
|
- bruno.sutic@gmail.com
|
63
65
|
executables: []
|
64
66
|
extensions: []
|
@@ -81,6 +83,7 @@ files:
|
|
81
83
|
- lib/capistrano/unicorn_nginx/version.rb
|
82
84
|
- lib/generators/capistrano/unicorn_nginx/USAGE.md
|
83
85
|
- lib/generators/capistrano/unicorn_nginx/config_generator.rb
|
86
|
+
- lib/generators/capistrano/unicorn_nginx/templates/_default_server_directive.erb
|
84
87
|
- lib/generators/capistrano/unicorn_nginx/templates/nginx_conf.erb
|
85
88
|
- lib/generators/capistrano/unicorn_nginx/templates/unicorn.rb.erb
|
86
89
|
- lib/generators/capistrano/unicorn_nginx/templates/unicorn_init.erb
|
@@ -103,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
106
|
version: '0'
|
104
107
|
requirements: []
|
105
108
|
rubyforge_project:
|
106
|
-
rubygems_version: 2.2.
|
109
|
+
rubygems_version: 2.2.2
|
107
110
|
signing_key:
|
108
111
|
specification_version: 4
|
109
112
|
summary: Capistrano tasks for automatic and sensible unicorn + nginx configuraion.
|