capistrano-unicorn-nginx 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 758cd1020049cc4d33a1539020d9a70c6c941f4d
4
- data.tar.gz: 9a03ad07a95c3b03e88242d86c00126002cce252
3
+ metadata.gz: d07f364efb0a3c692f5a90e291944f3039f0a0a0
4
+ data.tar.gz: 261aa7183d26027881a31024196e536f478f59d2
5
5
  SHA512:
6
- metadata.gz: dd12187184bb0853faf8b88e9ce7130bf0955cc0e9f51dc0dbace706ffcad472f05a51a8100d27f278b5bb934e99b4052a3e4ebd9309b79966b66c7047bdf005
7
- data.tar.gz: 2ef806960ca72c9ff39c7b7c3d80cf697b8f0f23ba7a9053540eb2287f782a630966c363e2af7ab1b8bc00956354e25b6ba276382081df93cc2c15a484eeb10e
6
+ metadata.gz: 1afb2f016b9c6859c722daacc25ab981959dc87834da8d0a76f2add162587d3afaabff5ce3d7230446c43df74ba98a7cf0ceb5a5499310ff5975cbe46e562166
7
+ data.tar.gz: e0cd00708bb708bcedd7412b82c448815f6ef49702552ed5523e9a307a353a37cc3c71c0aa021196ad57f2e783f6f71234864755f7bae54061ca7b76f789b11c
data/CHANGELOG.md CHANGED
@@ -2,17 +2,27 @@
2
2
 
3
3
  ### master
4
4
 
5
+ ### v3.0.0, 2014-10-05
6
+ - enable setting unicorn app environment with `rails_env` option.
7
+ If `rails_env` is not set, `stage` option is used as until now. (@bruno-)
8
+ - add load balancing support (@rhomeister)
9
+ - config files are updated each time `setup` task is run (@rhomeister)
10
+
5
11
  ### v2.1.0, 2014-08-05
6
12
  - add `nginx_location` option that specifies nginx installation dir
7
13
  (@jordanyaker)
14
+
8
15
  ### v2.0.0, 2014-04-11
9
16
  - all the work is moved to the `setup` task
17
+
10
18
  ### v1.0.2, 2014-03-30
11
19
  - add `sudo_upload!` helper method for easier uploads
12
20
  - improve the way how templates are handled
21
+
13
22
  ### v1.0.1, 2014-03-30
14
23
  - refactor all unicorn and nginx paths to separate modules
15
24
  - speed up `nginx:setup_ssl` task
16
25
  - small README update
26
+
17
27
  ### v1.0.0, 2014-03-29
18
28
  - @bruno- all the v1.0.0 features
data/README.md CHANGED
@@ -7,30 +7,26 @@ Goals of this plugin:
7
7
  * automatic unicorn and nginx configuration for Rails apps
8
8
  * **no manual ssh** to the server required
9
9
  * zero downtime deployments enabled
10
+ * support for single node as well as cluster deployments
10
11
 
11
12
  Specifics:
12
13
 
13
- * generates nginx config file on the server
14
- * generates unicorn initializer and config files<br/>
14
+ * generates nginx config file on the server (web role)
15
+ * generates unicorn initializer and config files (app role)<br/>
15
16
  application is started automatically after server restart
16
17
  * capistrano tasks for server management, example: `unicorn:restart`<br/>
17
18
  see below for all available tasks
19
+ * automatic load balancing setup when there are multiple `app` nodes
18
20
 
19
21
  `capistrano-unicorn-nginx` works only with Capistrano 3!
20
22
 
21
- This project was based on
22
- [capistrano-nginx-unicorn](https://github.com/kalys/capistrano-nginx-unicorn).
23
- I contributed a lot to Capistrano 3 version of that plugin. In the end I
24
- decided to create my own project to bring in additional improvements, without
25
- having to ask for permissions and wait for merging.
26
-
27
23
  ### Installation
28
24
 
29
25
  Add this to `Gemfile`:
30
26
 
31
27
  group :development do
32
- gem 'capistrano', '~> 3.1'
33
- gem 'capistrano-unicorn-nginx', '~> 2.0'
28
+ gem 'capistrano', '~> 3.2.1'
29
+ gem 'capistrano-unicorn-nginx', '~> 3.0.0'
34
30
  end
35
31
 
36
32
  And then:
@@ -39,169 +35,38 @@ And then:
39
35
 
40
36
  ### Setup and usage
41
37
 
42
- Add this line to `Capfile`
43
-
44
- require 'capistrano/unicorn_nginx'
45
-
46
- Only if you already have a domain for your app, set `nginx_server_name` in
47
- stage file, example `config/deploy/production.rb`:
48
-
49
- set :nginx_server_name, 'mydomain.com'
50
-
51
- If you don't have a domain yet, you do not have to do anything
52
- (`nginx_server_name` will use the default value - server IP).
53
-
54
- **SSL only setup**
55
-
56
- If you want to setup SSL for your page, add these options to stage file
57
- (i.e. `config/deploy/production.rb`):
58
-
59
- # ignore this if you do not need SSL
60
- set :nginx_use_ssl, true
61
- set :nginx_ssl_cert_local_path, "/path/to/ssl_cert.crt"
62
- set :nginx_ssl_cert_key_local_path, "/path/to/ssl_cert.key"
63
-
64
- And you're all set!
65
-
66
- **Setup task**
67
-
68
- Make sure the `deploy_to` path exists and has the right privileges on the
69
- server (i.e. `/var/www/myapp`).<br/>
70
- Or just install
71
- [capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)
72
- plugin and don't think about it.
38
+ Depending on your needs 2 general scenarios are covered:
73
39
 
74
- To setup the server for unicorn and nginx, run:
75
-
76
- $ bundle exec cap production setup
40
+ - [single server setup](https://github.com/capistrano-plugins/capistrano-unicorn-nginx/wiki/Single-server-setup)<br/>
41
+ A scenario where you run the webserver (nginx) and application server
42
+ (unicorn) on the same node.
43
+ - [multiple server setup](https://github.com/capistrano-plugins/capistrano-unicorn-nginx/wiki/Multiple-server-setup)<br/>
44
+ Webserver (nginx) and application server (unicorn) run on different nodes.
77
45
 
78
46
  ### Configuration
79
47
 
80
- As described in the Usage section, this plugin works with minimal setup.
81
- However, configuration is possible.
82
-
83
- You'll find the options and their defaults below.
84
-
85
- In order to override the default, put the option in the stage file, for example:
86
-
87
- # in config/deploy/production.rb
88
- set :unicorn_workers, 4
89
-
90
- **Nginx options**
91
-
92
- Defaults are listed near option name in the first line.
93
-
94
- - `set :nginx_server_name` # defaults to <server_IP><br/>
95
- Your application's domain. The default is your server's IP address.
96
-
97
- - `set :nginx_pid, "/run/nginx.pid"`<br/>
98
- Path for nginx process pid file.
99
-
100
- - `set :nginx_location, "/etc/nginx"`<br/>
101
- Nginx installation directory.
102
-
103
- SSL related options:
104
-
105
- - `set :nginx_use_ssl, false`<br/>
106
- If set to `true`, nginx will be configured to 443 port and port 80 will be auto
107
- routed to 443. Also, on `nginx:setup`, paths to ssl certificate and key will be
108
- configured. Certificate file and key will be uploaded to `/etc/ssl/certs/`
109
- and `/etc/ssl/private/` directories on the server.
110
-
111
- - `set :nginx_upload_local_cert, true`<br/>
112
- If `true`, certificates will be uploaded from a local path. Otherwise, it
113
- is expected for the certificate and key defined in the next 2 variables to be
114
- already on the server.
115
-
116
- - `set :nginx_ssl_cert, "#{fetch(:nginx_server_name)}.crt"`<br/>
117
- Remote file name of the certificate. Only makes sense if `nginx_use_ssl` is set.
118
-
119
- - `set :nginx_ssl_cert_key, "#{fetch(:nginx_server_name)}.key"`<br/>
120
- Remote file name of the certificate. Only makes sense if `nginx_use_ssl` is set.
121
-
122
- - `set :nginx_ssl_cert_local_path` # no default, required if
123
- `nginx_use_ssl = true` and `nginx_upload_local_cert = true`<br/>
124
- Local path to file with certificate. Only makes sense if `nginx_use_ssl` is
125
- set. This file will be copied to remote server. Example value:
126
- `set :nginx_ssl_cert_local_path, "/home/user/ssl/myssl.cert"`
127
-
128
- - `set :nginx_ssl_cert_key_local_path` # no default<br/>
129
- Local path to file with certificate key. Only makes sense if `nginx_use_ssl` is set.
130
- This file will be copied to remote server. Example value:
131
- `set :nginx_ssl_cert_key_local_path, "/home/user/ssl/myssl.key"`
132
-
133
- **Unicorn options**
134
-
135
- Defaults are listed near option name in the first line.
136
-
137
- - `set :unicorn_service, "unicorn_#{fetch(:application)}_#{fetch(:stage)}`<br/>
138
- Unicorn service name is `unicorn_myapp_production` by default.
139
-
140
- - `set :unicorn_pid, shared_path.join("tmp/pids/unicorn.pid")`<br/>
141
- Path for unicorn process pid file.
142
-
143
- - `set :unicorn_config, shared_path.join("config/unicorn.rb")`<br/>
144
- Path for unicorn config file.
145
-
146
- - `set :unicorn_workers, 2`<br/>
147
- Number of unicorn workers.
48
+ See the
49
+ [full options list on the wiki page](https://github.com/capistrano-plugins/capistrano-unicorn-nginx/wiki/Configuration).
50
+ Feel free to skip this unless you're looking for something specific.
148
51
 
149
52
  ### How it works
150
53
 
151
- Here's what happens when you run `$ bundle exec cap production setup`:
54
+ [How it works wiki page](https://github.com/capistrano-plugins/capistrano-unicorn-nginx/wiki/How-it-works)
55
+ contains the list of tasks that the plugin executes.
152
56
 
153
- **Nginx**
154
-
155
- - `nginx:setup`<br/>
156
- Generates and uploads nginx config file. Symlinks config file to
157
- `/etc/nginx/sites-enabled`.
158
- - `nginx:setup_ssl`<br/>
159
- Performs SSL related tasks if `nginx_use_ssl` is true (false by default).
160
-
161
- **Unicorn**
162
-
163
- - `unicorn:setup_initializer`<br/>
164
- Uploads unicorn initializer file.
165
- - `unicorn:setup_app_config`<br/>
166
- Generates unicorn application config file
167
-
168
- **Capistrano `deploy` task**
169
-
170
- This plugin also integrates seamlessly with Capistrano `deploy` task.
171
- Here's what happens when you run `$ bundle exec cap production deploy`:
172
-
173
- - `after :publishing, "nginx:reload"`<br/>
174
- Reloads nginx.
175
- - `after :publishing, "unicorn:restart"`<br/>
176
- Restarts unicorn after new release.
57
+ You do not have to know this unless you want to learn more about the plugin internals.
177
58
 
178
59
  ### Template customization
179
60
 
180
- If you want to change default templates, you can generate them using
181
- `rails generator`:
182
-
183
- $ bundle exec rails g capistrano:unicorn_nginx:config
184
-
185
- This will copy default templates to `config/deploy/templates` directory, so you
186
- can customize them as you like, and capistrano tasks will use this templates
187
- instead of default.
61
+ [On template customization wiki page](https://github.com/capistrano-plugins/capistrano-unicorn-nginx/wiki/Template-customization)
62
+ see how to inspect, tweak and override templates for `nginx` and `unicorn`
63
+ config files.
188
64
 
189
- You can also provide path, where to generate templates:
190
-
191
- $ bundle exec rails g capistrano:unicorn_nginx:config config/templates
65
+ Do not do this unless you have a specific need.
192
66
 
193
67
  ### More Capistrano automation?
194
68
 
195
- If you'd like to streamline your Capistrano deploys, you might want to check
196
- these zero-configuration, plug-n-play plugins:
197
-
198
- - [capistrano-postgresql](https://github.com/bruno-/capistrano-postgresql)<br/>
199
- plugin that automates postgresql configuration and setup
200
- - [capistrano-rbenv-install](https://github.com/bruno-/capistrano-rbenv-install)<br/>
201
- would you like Capistrano to install rubies for you?
202
- - [capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)<br/>
203
- if you're annoyed that Capistrano does **not** create a deployment path for the
204
- app on the server (default `/var/www/myapp`), this is what you need!
69
+ Check out [capistrano-plugins](https://github.com/capistrano-plugins) github org.
205
70
 
206
71
  ### Bug reports and pull requests
207
72
 
@@ -31,10 +31,27 @@ namespace :nginx do
31
31
  end
32
32
  end
33
33
 
34
+ # this is needed when the web role is a non release role -> deploy directories are not created, and nginx log files
35
+ # are written to "#{deploy_path}/shared/log/"
36
+ desc "Create the nginx log directory"
37
+ task :create_log_dir do
38
+ on roles :web do
39
+ # create the deploy_to, shared_path and the directory in which the nginx_access_log_file resides.
40
+ # We need to be conservative and ensure that all are created with the correct ownership: it could happen that
41
+ # web does become a release role later, in which case the ownerships need to be correct.
42
+ [deploy_path, shared_path, File.dirname(nginx_access_log_file)].each do |dir|
43
+ next if file_exists? dir
44
+ sudo :mkdir, '-pv', dir
45
+ user = capture :id, '-un'
46
+ group = capture :id, '-gn'
47
+ sudo :chown, "#{user}:#{group}", dir
48
+ end
49
+ end
50
+ end
51
+
34
52
  desc 'Setup nginx configuration'
35
- task :setup do
53
+ task setup: [:create_log_dir] do
36
54
  on roles :web do
37
- next if file_exists? nginx_sites_available_file
38
55
  sudo_upload! template('nginx_conf.erb'), nginx_sites_available_file
39
56
  sudo :ln, '-fs', nginx_sites_available_file, nginx_sites_enabled_file
40
57
  end
@@ -11,6 +11,9 @@ 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_tcp_listen_port, 8080
15
+ set :unicorn_use_tcp, -> { roles(:app).count > 1} # use tcp if there are multiple app nodes
16
+ set :unicorn_app_env, -> { fetch(:rails_env) || fetch(:stage) }
14
17
  # set :unicorn_user # default set in `unicorn:defaults` task
15
18
 
16
19
  set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids')
@@ -28,7 +31,6 @@ namespace :unicorn do
28
31
  desc 'Setup Unicorn initializer'
29
32
  task :setup_initializer do
30
33
  on roles :app do
31
- next if file_exists? unicorn_initd_file
32
34
  sudo_upload! template('unicorn_init.erb'), unicorn_initd_file
33
35
  execute :chmod, '+x', unicorn_initd_file
34
36
  sudo 'update-rc.d', '-f', fetch(:unicorn_service), 'defaults'
@@ -38,7 +40,6 @@ namespace :unicorn do
38
40
  desc 'Setup Unicorn app configuration'
39
41
  task :setup_app_config do
40
42
  on roles :app do
41
- next if file_exists? fetch(:unicorn_config)
42
43
  execute :mkdir, '-pv', File.dirname(fetch(:unicorn_config))
43
44
  upload! template('unicorn.rb.erb'), fetch(:unicorn_config)
44
45
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module UnicornNginx
3
- VERSION = "2.1.0"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
@@ -1,5 +1,11 @@
1
1
  upstream unicorn_<%= fetch(:nginx_config_name) %> {
2
+ <% if fetch(:unicorn_use_tcp) %>
3
+ <% roles(:app).each do |role| %>
4
+ server <%= role.hostname %>:<%= fetch(:unicorn_tcp_listen_port)%> fail_timeout=0;
5
+ <% end %>
6
+ <% else %>
2
7
  server unix:/tmp/unicorn.<%= fetch(:nginx_config_name) %>.sock fail_timeout=0;
8
+ <% end %>
3
9
  }
4
10
 
5
11
  <% if fetch(:nginx_use_ssl) %>
@@ -3,7 +3,12 @@ pid "<%= fetch(:unicorn_pid) %>"
3
3
  stdout_path "<%= unicorn_log_file %>"
4
4
  stderr_path "<%= unicorn_error_log_file %>"
5
5
 
6
+ <% if fetch(:unicorn_use_tcp) %>
7
+ listen <%= fetch(:unicorn_tcp_listen_port) %>
8
+ <% else %>
6
9
  listen "/tmp/unicorn.<%= fetch(:nginx_config_name) %>.sock"
10
+ <% end %>
11
+
7
12
  worker_processes <%= fetch(:unicorn_workers) %>
8
13
  timeout 30
9
14
 
@@ -15,9 +15,9 @@ TIMEOUT=${TIMEOUT-60}
15
15
  APP_ROOT=<%= current_path %>
16
16
  PID=<%= fetch(:unicorn_pid) %>
17
17
 
18
- CMD="cd $APP_ROOT && <%= bundle_unicorn("-D -c", fetch(:unicorn_config), "-E", fetch(:stage)) %>"
19
-
20
18
  AS_USER=<%= fetch(:unicorn_user) %>
19
+ CMD="export HOME; true "${HOME:=$(getent passwd "$AS_USER" | cut -d: -f6;)}" ; cd $APP_ROOT && <%= bundle_unicorn("-D -c", fetch(:unicorn_config), "-E", fetch(:unicorn_app_env)) %>"
20
+
21
21
  set -u
22
22
 
23
23
  OLD_PIN="$PID.oldbin"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-unicorn-nginx
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Sutic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-05 00:00:00.000000000 Z
11
+ date: 2014-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano