capistrano-generals 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/lib/capistrano/dsl/nginx_paths.rb +0 -13
- data/lib/capistrano/dsl/puma_paths.rb +22 -0
- data/lib/capistrano/dsl/ssl_paths.rb +47 -0
- data/lib/capistrano/generals/helpers.rb +4 -0
- data/lib/capistrano/generals/version.rb +1 -1
- data/lib/capistrano/tasks/defaults.rake +29 -8
- data/lib/capistrano/tasks/nginx.rake +3 -1
- data/lib/capistrano/tasks/puma.rake +81 -0
- data/lib/capistrano/tasks/sidekiq.rake +24 -11
- data/lib/capistrano/tasks/ssl.rake +41 -0
- data/lib/capistrano/tasks/unicorn.rake +20 -7
- data/lib/generators/capistrano/generals/puma_generator.rb +18 -0
- data/lib/generators/capistrano/generals/sidekiq_generator.rb +17 -0
- data/lib/generators/capistrano/generals/templates/nginx.conf.erb +16 -9
- data/lib/generators/capistrano/generals/templates/puma.rb.erb +22 -0
- data/lib/generators/capistrano/generals/templates/puma_init.sh.erb +58 -0
- data/lib/generators/capistrano/generals/templates/sidekiq_init.sh.erb +1 -1
- data/lib/generators/capistrano/generals/unicorn_generator.rb +1 -1
- metadata +10 -3
- data/lib/capistrano/tasks/setup.rake +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce4edad6fe2a55d648cc2d1cd94efb7990d316ba
|
4
|
+
data.tar.gz: 4f583f9e7c648daafc2d38b57af1f82b5d2e409a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4996378b3e7964dae3ca0d761e29d6f53e6cc27cfee034de5d8e3bf75c19cc6bae6cb81b86c50913d1c457b51a1811dfd0d2b8fc5257ead6f7933b368749551
|
7
|
+
data.tar.gz: 73628d76d1b34286d780fcb4ac5be17504fd9f2a14082c78a8d2dbd08d8c99b8e0b59fb54ed9e6f4a143c9dcc161cbc6a121b879e5cd9f78b8753384829fe634
|
data/README.md
CHANGED
@@ -86,4 +86,6 @@ This will upgrade the unicorn workers and restart nginx.
|
|
86
86
|
|
87
87
|
|
88
88
|
## Disclaimer
|
89
|
-
With ideas from:
|
89
|
+
With ideas from:
|
90
|
+
* https://github.com/capistrano-plugins/capistrano-unicorn-nginx
|
91
|
+
* https://exceptiontrap.com/blog/11-create-and-install-ssl-certificates-with-ease-capistrano-recipe
|
@@ -14,19 +14,6 @@ module Capistrano
|
|
14
14
|
"#{fetch(:nginx_location)}/sites-enabled/#{fetch(:app_config_name)}"
|
15
15
|
end
|
16
16
|
|
17
|
-
# ssl related files
|
18
|
-
def nginx_ssl_cert_file
|
19
|
-
"/etc/ssl/certs/#{fetch(:nginx_ssl_cert)}"
|
20
|
-
end
|
21
|
-
|
22
|
-
def nginx_ssl_cert_key_file
|
23
|
-
"/etc/ssl/private/#{fetch(:nginx_ssl_cert_key)}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def nginx_ssl_dhparam_file
|
27
|
-
"/etc/ssl/certs/#{fetch(:nginx_ssl_dhparam)}"
|
28
|
-
end
|
29
|
-
|
30
17
|
end
|
31
18
|
end
|
32
19
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Capistrano
|
2
|
+
module DSL
|
3
|
+
module PumaPaths
|
4
|
+
|
5
|
+
def puma_service
|
6
|
+
"puma_#{fetch(:app_config_name)}"
|
7
|
+
end
|
8
|
+
|
9
|
+
def puma_initd_file
|
10
|
+
"/etc/init.d/#{puma_service}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def puma_default_config_file
|
14
|
+
shared_path.join('config/puma.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
def puma_default_pid_file
|
18
|
+
shared_path.join('tmp/pids/puma.pid')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Capistrano
|
2
|
+
module DSL
|
3
|
+
module SSLPaths
|
4
|
+
|
5
|
+
# Get the full path of a certificate file
|
6
|
+
def certificate_file_for(filename)
|
7
|
+
File.expand_path(filename, fetch(:local_certs_folder))
|
8
|
+
end
|
9
|
+
|
10
|
+
def existing_certificate_file_for(filename)
|
11
|
+
filename = certificate_file_for filename
|
12
|
+
unless File.exists? filename
|
13
|
+
abort red "Could not find #{filename}"
|
14
|
+
end
|
15
|
+
filename
|
16
|
+
end
|
17
|
+
|
18
|
+
def new_certificate_file_for(filename)
|
19
|
+
filename = certificate_file_for filename
|
20
|
+
if File.exists? filename
|
21
|
+
abort red "File #{filename} already exists"
|
22
|
+
end
|
23
|
+
execute :mkdir, '-pv', fetch(:local_certs_folder)
|
24
|
+
filename
|
25
|
+
end
|
26
|
+
|
27
|
+
def chained_certificate
|
28
|
+
c1 = File.read(existing_certificate_file_for(fetch(:ssl_cert)))
|
29
|
+
c2 = File.read(existing_certificate_file_for(fetch(:ssl_cert_intermediate)))
|
30
|
+
StringIO.new(c1.rstrip + "\n" + c2)
|
31
|
+
end
|
32
|
+
|
33
|
+
# ssl related files
|
34
|
+
def remote_ssl_cert_chained_file
|
35
|
+
"#{fetch(:remote_certs_folder)}/certs/#{fetch(:ssl_cert_chain)}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def remote_ssl_cert_key_file
|
39
|
+
"#{fetch(:remote_certs_folder)}/private/#{fetch(:ssl_cert_key)}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def remote_ssl_dhparam_file
|
43
|
+
"#{fetch(:remote_certs_folder)}/certs/#{fetch(:ssl_dhparam)}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -13,30 +13,51 @@ namespace :load do
|
|
13
13
|
set :nginx_location, '/etc/nginx'
|
14
14
|
set :nginx_redirect_www, true
|
15
15
|
set :nginx_fail_timeout, 0
|
16
|
+
set :nginx_x_frame_options, 'DENY'
|
17
|
+
set :ngingx_strict_transport_security, true
|
18
|
+
set :nginx_respond_to_subdomains, false
|
16
19
|
|
17
|
-
#
|
20
|
+
# Nginx ssl settings
|
18
21
|
set :nginx_use_ssl, false
|
19
22
|
set :nginx_ssl_stapling, true
|
20
23
|
set :nginx_ssl_ciphers, 'AES128+EECDH:AES128+EDH:!aNULL'
|
21
24
|
set :nginx_ssl_protocols, 'TLSv1 TLSv1.1 TLSv1.2'
|
22
25
|
set :nginx_ssl_session_cache, 'shared:SSL:10m'
|
23
|
-
|
24
|
-
|
25
|
-
set :
|
26
|
-
set :
|
27
|
-
set :
|
26
|
+
|
27
|
+
# SSL Settings
|
28
|
+
set :local_certs_folder, 'config/deploy/certs'
|
29
|
+
set :remote_certs_folder, '/etc/ssl'
|
30
|
+
set :ssl_csr, -> { "#{fetch(:server_domain)}.csr" }
|
31
|
+
set :ssl_cert, -> { "#{fetch(:server_domain)}.crt" }
|
32
|
+
set :ssl_cert_intermediate, -> { "#{fetch(:server_domain)}-intermediate.crt" }
|
33
|
+
set :ssl_cert_chain, -> { "#{fetch(:server_domain)}-chained.crt" }
|
34
|
+
set :ssl_cert_key, -> { "#{fetch(:server_domain)}.key" }
|
35
|
+
set :ssl_server_ciphers, false
|
36
|
+
set :ssl_dhparam, 'dhparam.pem'
|
28
37
|
|
29
38
|
# General Unicorn settings
|
30
39
|
set :unicorn_pid, -> { unicorn_default_pid_file } # shared_path/tmp/pids/unicorn.pid
|
31
40
|
set :unicorn_config, -> { unicorn_default_config_file } # shared_path/config/unicorn.rb
|
32
41
|
set :unicorn_workers, 2
|
33
42
|
set :unicorn_worker_timeout, 30
|
34
|
-
set :unicorn_log, 'unicorn.
|
35
|
-
set :unicorn_error_log, 'unicorn.
|
43
|
+
set :unicorn_log, 'unicorn.log'
|
44
|
+
set :unicorn_error_log, 'unicorn.log'
|
36
45
|
set :unicorn_user, -> { fetch(:deploy_user) }
|
37
46
|
set :unicorn_env, ''
|
38
47
|
set :unicorn_app_env, -> { fetch(:rails_env) || fetch(:rack_env) || fetch(:stage) }
|
39
48
|
|
49
|
+
# General Puma settings
|
50
|
+
set :puma_preload_app, true
|
51
|
+
set :puma_pid, -> { puma_default_pid_file } # shared_path/tmp/pids/puma.pid
|
52
|
+
set :puma_config, -> { puma_default_config_file } # shared_path/config/puma.rb
|
53
|
+
set :puma_workers, 2
|
54
|
+
set :puma_worker_timeout, 30
|
55
|
+
set :puma_min_threads, 0
|
56
|
+
set :puma_max_threads, 16
|
57
|
+
set :puma_user, -> { fetch(:deploy_user) }
|
58
|
+
set :puma_env, ''
|
59
|
+
set :puma_app_env, -> { fetch(:rails_env) || fetch(:rack_env) || fetch(:stage) }
|
60
|
+
|
40
61
|
# General Sidekiq settings
|
41
62
|
set :sidekiq_workers, 3
|
42
63
|
set :sidekiq_user, -> { fetch(:deploy_user) }
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'capistrano/dsl/nginx_paths'
|
2
2
|
include Capistrano::DSL::NginxPaths
|
3
|
+
require 'capistrano/dsl/ssl_paths'
|
4
|
+
include Capistrano::DSL::SSLPaths
|
3
5
|
|
4
6
|
namespace :nginx do
|
5
7
|
|
@@ -52,7 +54,7 @@ namespace :nginx do
|
|
52
54
|
end
|
53
55
|
|
54
56
|
namespace :deploy do
|
55
|
-
after :publishing, 'nginx:
|
57
|
+
after :publishing, 'nginx:restart'
|
56
58
|
end
|
57
59
|
|
58
60
|
desc 'Server setup tasks'
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'capistrano/dsl/puma_paths'
|
2
|
+
include Capistrano::DSL::PumaPaths
|
3
|
+
|
4
|
+
namespace :puma do
|
5
|
+
|
6
|
+
desc 'Test capistrano config setup'
|
7
|
+
task :capistrano_config_test do
|
8
|
+
raise 'Use puma is not set as the application runner' unless fetch(:use_puma)
|
9
|
+
raise 'Unicorn is also set as application runner' if fetch(:use_unicorn)
|
10
|
+
raise 'Set the puma_user, which is default the deploy_user' unless fetch(:puma_user)
|
11
|
+
raise 'Set server_domain variable to setup nginx' unless fetch(:server_domain)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Setup Puma initializer'
|
15
|
+
task :setup_initializer do
|
16
|
+
on roles :app do
|
17
|
+
sudo_upload! template('puma_init.sh'), puma_initd_file
|
18
|
+
execute :chmod, '+x', puma_initd_file
|
19
|
+
sudo 'update-rc.d', '-f', puma_service, 'defaults'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
before :setup_initializer, :capistrano_config_test
|
23
|
+
|
24
|
+
desc 'Setup puma app configuration'
|
25
|
+
task :setup_app_config do
|
26
|
+
on roles :app do
|
27
|
+
execute :mkdir, '-pv', File.dirname(fetch(:puma_config).to_s)
|
28
|
+
upload! template('puma.rb'), fetch(:puma_config).to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
before :setup_app_config, :capistrano_config_test
|
32
|
+
|
33
|
+
desc 'Setup puma'
|
34
|
+
task :setup do
|
35
|
+
if fetch :use_puma
|
36
|
+
invoke 'puma:setup_initializer'
|
37
|
+
invoke 'puma:setup_app_config'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'Start puma'
|
42
|
+
task :start do
|
43
|
+
on roles :app do
|
44
|
+
sudo puma_initd_file, 'start'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
before :start, :capistrano_config_test
|
48
|
+
|
49
|
+
desc 'Stop puma'
|
50
|
+
task :stop do
|
51
|
+
on roles :app do
|
52
|
+
execute puma_initd_file, 'stop'
|
53
|
+
sleep 3
|
54
|
+
end
|
55
|
+
end
|
56
|
+
before :stop, :capistrano_config_test
|
57
|
+
|
58
|
+
desc 'Restart puma'
|
59
|
+
task :restart do
|
60
|
+
invoke 'puma:stop'
|
61
|
+
invoke 'puma:start'
|
62
|
+
end
|
63
|
+
before :restart, :capistrano_config_test
|
64
|
+
|
65
|
+
desc 'Restarts puma if puma enabled'
|
66
|
+
task :after_publishing do
|
67
|
+
if fetch :use_puma
|
68
|
+
invoke 'puma:restart'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
namespace :deploy do
|
75
|
+
after :publishing, 'puma:after_publishing'
|
76
|
+
end
|
77
|
+
|
78
|
+
desc 'Server setup tasks'
|
79
|
+
task :setup do
|
80
|
+
invoke 'puma:setup'
|
81
|
+
end
|
@@ -13,43 +13,56 @@ namespace :sidekiq do
|
|
13
13
|
on roles :app do
|
14
14
|
sudo_upload! template('sidekiq_init.sh'), sidekiq_initd_file
|
15
15
|
execute :chmod, '+x', sidekiq_initd_file
|
16
|
-
sudo 'update-rc.d', '-f',
|
16
|
+
sudo 'update-rc.d', '-f', sidekiq_service, 'defaults'
|
17
17
|
end
|
18
18
|
end
|
19
19
|
before :setup_initializer, :capistrano_config_test
|
20
20
|
|
21
|
+
desc 'Setup Sidekiq'
|
22
|
+
task :setup do
|
23
|
+
if fetch :use_sidekiq
|
24
|
+
invoke 'sidekiq:setup_initializer'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
21
28
|
desc 'Start sidekiq'
|
22
29
|
task :start do
|
23
|
-
on roles
|
24
|
-
|
30
|
+
on roles :app do
|
31
|
+
sudo sidekiq_initd_file, 'start'
|
25
32
|
end
|
26
33
|
end
|
34
|
+
before :start, :capistrano_config_test
|
27
35
|
|
28
36
|
desc 'Stop sidekiq'
|
29
37
|
task :stop do
|
30
|
-
on roles
|
31
|
-
|
38
|
+
on roles :app do
|
39
|
+
sudo sidekiq_initd_file, 'stop'
|
32
40
|
sleep 8
|
33
41
|
end
|
34
42
|
end
|
43
|
+
before :stop, :capistrano_config_test
|
35
44
|
|
36
45
|
desc 'Restart sidekiq'
|
37
46
|
task :restart do
|
38
47
|
invoke 'sidekiq:stop'
|
39
48
|
invoke 'sidekiq:start'
|
40
49
|
end
|
50
|
+
before :restart, :capistrano_config_test
|
51
|
+
|
52
|
+
desc 'Restarts sidekiq if sidekiq enabled'
|
53
|
+
task :after_publishing do
|
54
|
+
if fetch :use_sidekiq
|
55
|
+
invoke 'sidekiq:restart'
|
56
|
+
end
|
57
|
+
end
|
41
58
|
|
42
59
|
end
|
43
60
|
|
44
61
|
namespace :deploy do
|
45
|
-
|
46
|
-
after :publishing, 'sidekiq:restart'
|
47
|
-
end
|
62
|
+
after :publishing, 'sidekiq:after_publishing'
|
48
63
|
end
|
49
64
|
|
50
65
|
desc 'Server setup tasks'
|
51
66
|
task :setup do
|
52
|
-
|
53
|
-
invoke 'unicorn:setup_initializer'
|
54
|
-
end
|
67
|
+
invoke 'sidekiq:setup'
|
55
68
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'capistrano/dsl/ssl_paths'
|
2
|
+
include Capistrano::DSL::SSLPaths
|
3
|
+
|
4
|
+
namespace :ssl do
|
5
|
+
# If you intend to secure the URL https://www.yourdomain.com, then your CSR's common name must be www.yourdomain.com. If you plan on getting a wildcard certificate make sure to prefix your domain with an asterisk, example: *.domain.com.
|
6
|
+
desc 'Generate Private Key and CSR files'
|
7
|
+
task :generate_private_key_and_csr do
|
8
|
+
run_locally do
|
9
|
+
`openssl req -nodes -newkey rsa:2048 -sha256 -keyout #{new_certificate_file_for(fetch(:ssl_cert_key))} -out #{new_certificate_file_for(fetch(:ssl_csr))}`
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Generate dhparam file'
|
14
|
+
task :generate_dhparam do
|
15
|
+
run_locally do
|
16
|
+
`openssl dhparam -out #{new_certificate_file_for(fetch(:ssl_dhparam))} 4096`
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Send certificate and key to server'
|
21
|
+
task :upload do
|
22
|
+
on roles :web do
|
23
|
+
# Upload chained certificate
|
24
|
+
sudo_upload! chained_certificate, remote_ssl_cert_chained_file
|
25
|
+
sudo :chown, 'root', remote_ssl_cert_chained_file
|
26
|
+
sudo :chmod, '644', remote_ssl_cert_chained_file
|
27
|
+
|
28
|
+
# Upload key
|
29
|
+
sudo_upload! existing_certificate_file_for(fetch(:ssl_cert_key)), remote_ssl_cert_key_file
|
30
|
+
sudo :chown, 'root:ssl-cert', remote_ssl_cert_key_file
|
31
|
+
sudo :chmod, '640', remote_ssl_cert_key_file
|
32
|
+
|
33
|
+
# Upload dhparam
|
34
|
+
if File.exists? certificate_file_for(fetch(:ssl_dhparam))
|
35
|
+
sudo_upload! certificate_file_for(fetch(:ssl_dhparam)), remote_ssl_dhparam_file
|
36
|
+
sudo :chown, 'root', remote_ssl_dhparam_file
|
37
|
+
sudo :chmod, '644', remote_ssl_dhparam_file
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -30,12 +30,21 @@ namespace :unicorn do
|
|
30
30
|
end
|
31
31
|
before :setup_app_config, :capistrano_config_test
|
32
32
|
|
33
|
+
desc 'Setup unicorn'
|
34
|
+
task :setup do
|
35
|
+
if fetch :use_unicorn
|
36
|
+
invoke 'unicorn:setup_app_config'
|
37
|
+
invoke 'unicorn:setup_initializer'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
33
41
|
desc 'Start unicorn'
|
34
42
|
task :start do
|
35
43
|
on roles :app do
|
36
44
|
sudo unicorn_initd_file, 'start'
|
37
45
|
end
|
38
46
|
end
|
47
|
+
before :start, :capistrano_config_test
|
39
48
|
|
40
49
|
desc 'Stop unicorn'
|
41
50
|
task :stop do
|
@@ -44,25 +53,29 @@ namespace :unicorn do
|
|
44
53
|
sleep 3
|
45
54
|
end
|
46
55
|
end
|
56
|
+
before :stop, :capistrano_config_test
|
47
57
|
|
48
58
|
desc 'Restart unicorn'
|
49
59
|
task :restart do
|
50
60
|
invoke 'unicorn:stop'
|
51
61
|
invoke 'unicorn:start'
|
52
62
|
end
|
63
|
+
before :restart, :capistrano_config_test
|
64
|
+
|
65
|
+
desc 'Restarts unicorn if puma enabled'
|
66
|
+
task :after_publishing do
|
67
|
+
if fetch :use_unicorn
|
68
|
+
invoke 'unicorn:restart'
|
69
|
+
end
|
70
|
+
end
|
53
71
|
|
54
72
|
end
|
55
73
|
|
56
74
|
namespace :deploy do
|
57
|
-
|
58
|
-
after :publishing, 'unicorn:restart'
|
59
|
-
end
|
75
|
+
after :publishing, 'unicorn:after_publishing'
|
60
76
|
end
|
61
77
|
|
62
78
|
desc 'Server setup tasks'
|
63
79
|
task :setup do
|
64
|
-
|
65
|
-
invoke 'unicorn:setup_app_config'
|
66
|
-
invoke 'unicorn:setup_initializer'
|
67
|
-
end
|
80
|
+
invoke 'unicorn:setup'
|
68
81
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Capistrano
|
2
|
+
module Generals
|
3
|
+
module Generators
|
4
|
+
class PumaGenerator < Rails::Generators::Base
|
5
|
+
desc 'Create local puma configuration files for customization'
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
argument :templates_path, type: :string,
|
8
|
+
default: 'config/deploy/templates',
|
9
|
+
banner: 'path to templates'
|
10
|
+
|
11
|
+
def copy_template
|
12
|
+
copy_file 'puma.rb.erb', "#{templates_path}/puma.rb.erb"
|
13
|
+
copy_file 'puma_init.sh.erb', "#{templates_path}/puma_init.sh.erb"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Capistrano
|
2
|
+
module Generals
|
3
|
+
module Generators
|
4
|
+
class SidekiqGenerator < Rails::Generators::Base
|
5
|
+
desc 'Create local sidekiq configuration file for customization'
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
argument :templates_path, type: :string,
|
8
|
+
default: 'config/deploy/templates',
|
9
|
+
banner: 'path to templates'
|
10
|
+
|
11
|
+
def copy_template
|
12
|
+
copy_file 'sidekiq_init.sh.erb', "#{templates_path}/sidekiq_init.sh.erb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -24,7 +24,7 @@ server {
|
|
24
24
|
<% if fetch(:nginx_use_ssl) %>
|
25
25
|
server {
|
26
26
|
listen 80;
|
27
|
-
server_name <%= fetch(:server_domain) %>;
|
27
|
+
server_name <%= "*.#{fetch(:server_domain)}" if fetch(:nginx_respond_to_subdomains) %> <%= fetch(:server_domain) %>;
|
28
28
|
rewrite ^(.*) https://$host$1 permanent;
|
29
29
|
}
|
30
30
|
<% end %>
|
@@ -32,7 +32,7 @@ server {
|
|
32
32
|
# Server
|
33
33
|
##############################
|
34
34
|
server {
|
35
|
-
server_name <%= fetch(:server_domain) %>;
|
35
|
+
server_name <%= "*.#{fetch(:server_domain)}" if fetch(:nginx_respond_to_subdomains) %> <%= fetch(:server_domain) %>;
|
36
36
|
root <%= current_path %>/public;
|
37
37
|
|
38
38
|
client_max_body_size 4G;
|
@@ -40,11 +40,11 @@ server {
|
|
40
40
|
|
41
41
|
error_page 500 502 504 /500.html;
|
42
42
|
|
43
|
-
# SSL Settings
|
44
43
|
<% if fetch(:nginx_use_ssl) %>
|
44
|
+
# SSL Settings
|
45
45
|
listen 443 ssl;
|
46
|
-
ssl_certificate <%=
|
47
|
-
ssl_certificate_key <%=
|
46
|
+
ssl_certificate <%= remote_ssl_cert_chained_file %>;
|
47
|
+
ssl_certificate_key <%= remote_ssl_cert_key_file %>;
|
48
48
|
|
49
49
|
ssl_ciphers <%= fetch(:nginx_ssl_ciphers) %>;
|
50
50
|
ssl_protocols <%= fetch(:nginx_ssl_protocols) %>;
|
@@ -57,15 +57,22 @@ server {
|
|
57
57
|
resolver_timeout 10s;
|
58
58
|
<% end %>
|
59
59
|
|
60
|
-
<% if fetch(:
|
60
|
+
<% if fetch(:ssl_server_ciphers) %>
|
61
61
|
ssl_prefer_server_ciphers on;
|
62
|
-
ssl_dhparam <%=
|
62
|
+
ssl_dhparam <%= remote_ssl_dhparam_file %>;
|
63
63
|
<% end %>
|
64
64
|
|
65
65
|
<% else %>
|
66
66
|
listen 80;
|
67
67
|
<% end %>
|
68
68
|
|
69
|
+
<% if fetch(:ngingx_strict_transport_security) %>
|
70
|
+
add_header Strict-Transport-Security max-age=63072000;
|
71
|
+
add_header X-Content-Type-Options nosniff;
|
72
|
+
<% end %>
|
73
|
+
add_header X-Frame-Options <%= fetch(:nginx_x_frame_options) %>;
|
74
|
+
|
75
|
+
|
69
76
|
<% # FILE HANDLING %>
|
70
77
|
<% if fetch(:use_unicorn) %>
|
71
78
|
try_files $uri/index.html $uri @unicorn_<%= fetch(:app_config_name) %>;
|
@@ -84,7 +91,7 @@ server {
|
|
84
91
|
<% if fetch(:use_puma) %>
|
85
92
|
try_files $uri/index.html $uri @puma_<%= fetch(:app_config_name) %>;
|
86
93
|
|
87
|
-
location @
|
94
|
+
location @puma_<%= fetch(:app_config_name) %> {
|
88
95
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
89
96
|
proxy_set_header Host $http_host;
|
90
97
|
proxy_redirect off;
|
@@ -92,7 +99,7 @@ server {
|
|
92
99
|
proxy_set_header X-Forwarded-Proto https;
|
93
100
|
<% end %>
|
94
101
|
proxy_pass http://puma_<%= fetch(:app_config_name) %>;
|
95
|
-
|
102
|
+
}
|
96
103
|
<% end %>
|
97
104
|
|
98
105
|
location ~* ^/assets/ {
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= template_to_s('_head').to_s %>
|
2
|
+
environment "<%= fetch(:puma_app_env) %>"
|
3
|
+
bind "unix:///tmp/puma.<%= fetch(:app_config_name) %>.sock"
|
4
|
+
|
5
|
+
threads <%= fetch(:puma_min_threads) %>, <%= fetch(:puma_max_threads) %>
|
6
|
+
workers <%= fetch(:puma_workers) %>
|
7
|
+
|
8
|
+
<% if fetch(:puma_preload_app) %>
|
9
|
+
preload_app!
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
worker_timeout <%= fetch(:puma_worker_timeout) %>
|
13
|
+
|
14
|
+
on_worker_boot do
|
15
|
+
if defined? ActiveSupport
|
16
|
+
ActiveSupport.on_load(:active_record) do
|
17
|
+
if defined? ActiveRecord::Base
|
18
|
+
ActiveRecord::Base.establish_connection
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
<%= template_to_s('_head').to_s %>
|
3
|
+
### BEGIN INIT INFO
|
4
|
+
# Provides: puma
|
5
|
+
# Required-Start: $remote_fs $syslog
|
6
|
+
# Required-Stop: $remote_fs $syslog
|
7
|
+
# Default-Start: 2 3 4 5
|
8
|
+
# Default-Stop: 0 1 6
|
9
|
+
# Short-Description: Manage puma
|
10
|
+
# Description: Starts and Stops puma
|
11
|
+
### END INIT INFO
|
12
|
+
set -e
|
13
|
+
|
14
|
+
# Feel free to change any of the following variables for your app:
|
15
|
+
APP_ROOT=<%= current_path %>
|
16
|
+
PID=<%= fetch(:puma_pid) %>
|
17
|
+
AS_USER=<%= fetch(:puma_user) %>
|
18
|
+
PUMA_ENV="<%= fetch(:puma_env) %>"
|
19
|
+
CMD="export HOME; true "${HOME:=$(getent passwd "$AS_USER" | cut -d: -f6;)}"; cd $APP_ROOT && $PUMA_ENV <%= bundle_puma('-d -C', fetch(:puma_config)) %>"
|
20
|
+
|
21
|
+
set -u
|
22
|
+
|
23
|
+
OLD_PIN="$PID.oldbin"
|
24
|
+
|
25
|
+
sig () {
|
26
|
+
test -s "$PID" && kill -$1 `cat $PID`
|
27
|
+
}
|
28
|
+
|
29
|
+
oldsig () {
|
30
|
+
test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
|
31
|
+
}
|
32
|
+
|
33
|
+
run () {
|
34
|
+
if [ "$(id -un)" = "$AS_USER" ]; then
|
35
|
+
eval $1
|
36
|
+
else
|
37
|
+
su -c "$1" - $AS_USER
|
38
|
+
fi
|
39
|
+
}
|
40
|
+
|
41
|
+
case "$1" in
|
42
|
+
start)
|
43
|
+
sig 0 && echo >&2 "Already running" && exit 0
|
44
|
+
run "$CMD"
|
45
|
+
;;
|
46
|
+
stop)
|
47
|
+
sig QUIT && exit 0
|
48
|
+
echo >&2 "Not running"
|
49
|
+
;;
|
50
|
+
force-stop)
|
51
|
+
sig TERM && exit 0
|
52
|
+
echo >&2 "Not running"
|
53
|
+
;;
|
54
|
+
*)
|
55
|
+
echo >&2 "Usage: $0 <start|stop|force-stop>"
|
56
|
+
exit 1
|
57
|
+
;;
|
58
|
+
esac
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# Default-Start: 2 3 4 5
|
8
8
|
# Default-Stop: 0 1 6
|
9
9
|
# Short-Description: Manage sidekiq workers
|
10
|
-
# Description:
|
10
|
+
# Description: Starts and Stops Sidekiq message processor for Stratus application.
|
11
11
|
### END INIT INFO
|
12
12
|
|
13
13
|
# User-specified exit parameters used in this script:
|
@@ -2,7 +2,7 @@ module Capistrano
|
|
2
2
|
module Generals
|
3
3
|
module Generators
|
4
4
|
class UnicornGenerator < Rails::Generators::Base
|
5
|
-
desc 'Create local unicorn configuration
|
5
|
+
desc 'Create local unicorn configuration files for customization'
|
6
6
|
source_root File.expand_path('../templates', __FILE__)
|
7
7
|
argument :templates_path, type: :string,
|
8
8
|
default: 'config/deploy/templates',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-generals
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stef Schenkelaars
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -67,7 +67,9 @@ files:
|
|
67
67
|
- capistrano-generals.gemspec
|
68
68
|
- lib/capistrano-generals.rb
|
69
69
|
- lib/capistrano/dsl/nginx_paths.rb
|
70
|
+
- lib/capistrano/dsl/puma_paths.rb
|
70
71
|
- lib/capistrano/dsl/sidekiq_paths.rb
|
72
|
+
- lib/capistrano/dsl/ssl_paths.rb
|
71
73
|
- lib/capistrano/dsl/unicorn_paths.rb
|
72
74
|
- lib/capistrano/generals.rb
|
73
75
|
- lib/capistrano/generals/helpers.rb
|
@@ -76,12 +78,17 @@ files:
|
|
76
78
|
- lib/capistrano/tasks/deploy/symlink.rake
|
77
79
|
- lib/capistrano/tasks/git.rake
|
78
80
|
- lib/capistrano/tasks/nginx.rake
|
79
|
-
- lib/capistrano/tasks/
|
81
|
+
- lib/capistrano/tasks/puma.rake
|
80
82
|
- lib/capistrano/tasks/sidekiq.rake
|
83
|
+
- lib/capistrano/tasks/ssl.rake
|
81
84
|
- lib/capistrano/tasks/unicorn.rake
|
82
85
|
- lib/generators/capistrano/generals/nginx_generator.rb
|
86
|
+
- lib/generators/capistrano/generals/puma_generator.rb
|
87
|
+
- lib/generators/capistrano/generals/sidekiq_generator.rb
|
83
88
|
- lib/generators/capistrano/generals/templates/_head.erb
|
84
89
|
- lib/generators/capistrano/generals/templates/nginx.conf.erb
|
90
|
+
- lib/generators/capistrano/generals/templates/puma.rb.erb
|
91
|
+
- lib/generators/capistrano/generals/templates/puma_init.sh.erb
|
85
92
|
- lib/generators/capistrano/generals/templates/sidekiq_init.sh.erb
|
86
93
|
- lib/generators/capistrano/generals/templates/unicorn.rb.erb
|
87
94
|
- lib/generators/capistrano/generals/templates/unicorn_init.sh.erb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
namespace :setup do
|
2
|
-
#
|
3
|
-
# namespace :symlink do
|
4
|
-
#
|
5
|
-
# desc 'Symlink config file for nginx'
|
6
|
-
# task :nginx do
|
7
|
-
# on roles :app do
|
8
|
-
# # Find stage specific config file
|
9
|
-
# file_name = File.join current_path, 'config/nginx.conf'
|
10
|
-
# file_name = get_config_file(file_name, fetch(:stage).to_s)
|
11
|
-
# execute "ln -nfs #{file_name} /etc/nginx/sites-enabled/#{fetch(:application)}_#{fetch(:stage)}"
|
12
|
-
# end
|
13
|
-
# end
|
14
|
-
#
|
15
|
-
# desc 'Symlink config file for unicorn'
|
16
|
-
# task :unicorn do
|
17
|
-
# on roles :app do
|
18
|
-
# # Find stage specific config file
|
19
|
-
# file_name = File.join current_path, 'config/unicorn_init.sh'
|
20
|
-
# file_name = get_config_file(file_name, fetch(:stage).to_s)
|
21
|
-
# execute "ln -nfs #{file_name} /etc/init.d/unicorn_#{fetch(:application)}_#{fetch(:stage)}"
|
22
|
-
# # Start unicorn at startup
|
23
|
-
# execute "sudo update-rc.d unicorn_#{fetch(:application)}_#{fetch(:stage)} defaults"
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# desc 'Symlink config file for sidekiq'
|
28
|
-
# task :sidekiq do
|
29
|
-
# on roles :app do
|
30
|
-
# # Find stage specific config file
|
31
|
-
# file_name = File.join current_path, 'config/sidekiq_init.sh'
|
32
|
-
# file_name = get_config_file(file_name, fetch(:stage).to_s)
|
33
|
-
# execute "ln -nfs #{file_name} /etc/init.d/sidekiq_#{fetch(:application)}_#{fetch(:stage)}"
|
34
|
-
# # Start unicorn at startup
|
35
|
-
# execute "sudo update-rc.d sidekiq_#{fetch(:application)}_#{fetch(:stage)} defaults"
|
36
|
-
# end
|
37
|
-
# end
|
38
|
-
#
|
39
|
-
# end
|
40
|
-
#
|
41
|
-
end
|