capistrano-mb 0.22.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 +7 -0
- data/.gitignore +17 -0
- data/CHANGELOG.md +114 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +173 -0
- data/Rakefile +5 -0
- data/capistrano-mb.gemspec +34 -0
- data/lib/capistrano/fiftyfive.rb +6 -0
- data/lib/capistrano/mb.rb +29 -0
- data/lib/capistrano/mb/compatibility.rb +17 -0
- data/lib/capistrano/mb/dsl.rb +187 -0
- data/lib/capistrano/mb/recipe.rb +48 -0
- data/lib/capistrano/mb/templates/crontab.erb +1 -0
- data/lib/capistrano/mb/templates/csr_config.erb +10 -0
- data/lib/capistrano/mb/templates/delayed_job_init.erb +36 -0
- data/lib/capistrano/mb/templates/logrotate.erb +9 -0
- data/lib/capistrano/mb/templates/maintenance.html.erb +26 -0
- data/lib/capistrano/mb/templates/nginx.erb +64 -0
- data/lib/capistrano/mb/templates/nginx_unicorn.erb +109 -0
- data/lib/capistrano/mb/templates/pgpass.erb +1 -0
- data/lib/capistrano/mb/templates/postgresql-backup-logrotate.erb +11 -0
- data/lib/capistrano/mb/templates/rbenv_bashrc +4 -0
- data/lib/capistrano/mb/templates/sidekiq_init.erb +100 -0
- data/lib/capistrano/mb/templates/ssl_setup +43 -0
- data/lib/capistrano/mb/templates/unicorn.rb.erb +71 -0
- data/lib/capistrano/mb/templates/unicorn_init.erb +84 -0
- data/lib/capistrano/mb/templates/version.rb.erb +3 -0
- data/lib/capistrano/mb/version.rb +5 -0
- data/lib/capistrano/tasks/aptitude.rake +101 -0
- data/lib/capistrano/tasks/crontab.rake +14 -0
- data/lib/capistrano/tasks/defaults.rake +122 -0
- data/lib/capistrano/tasks/delayed_job.rake +33 -0
- data/lib/capistrano/tasks/dotenv.rake +57 -0
- data/lib/capistrano/tasks/fiftyfive.rake +59 -0
- data/lib/capistrano/tasks/logrotate.rake +16 -0
- data/lib/capistrano/tasks/maintenance.rake +28 -0
- data/lib/capistrano/tasks/migrate.rake +29 -0
- data/lib/capistrano/tasks/nginx.rake +31 -0
- data/lib/capistrano/tasks/postgresql.rake +177 -0
- data/lib/capistrano/tasks/provision.rake +18 -0
- data/lib/capistrano/tasks/rake.rake +20 -0
- data/lib/capistrano/tasks/rbenv.rake +93 -0
- data/lib/capistrano/tasks/seed.rake +16 -0
- data/lib/capistrano/tasks/sidekiq.rake +39 -0
- data/lib/capistrano/tasks/ssl.rake +57 -0
- data/lib/capistrano/tasks/ufw.rake +32 -0
- data/lib/capistrano/tasks/unicorn.rake +42 -0
- data/lib/capistrano/tasks/user.rake +32 -0
- data/lib/capistrano/tasks/version.rake +34 -0
- metadata +165 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
mb_recipe :seed do
|
2
|
+
prior_to "deploy:publishing", "mb:seed"
|
3
|
+
end
|
4
|
+
|
5
|
+
namespace :mb do
|
6
|
+
desc "Run rake db:seed"
|
7
|
+
task :seed do
|
8
|
+
on primary(:app) do
|
9
|
+
within release_path do
|
10
|
+
with :rails_env => fetch(:rails_env) do
|
11
|
+
execute :rake, "db:seed"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
mb_recipe :sidekiq do
|
2
|
+
during :provision, "init_d"
|
3
|
+
during "deploy:start", "start"
|
4
|
+
during "deploy:stop", "stop"
|
5
|
+
during "deploy:restart", "restart"
|
6
|
+
during "deploy:publishing", "restart"
|
7
|
+
end
|
8
|
+
|
9
|
+
namespace :mb do
|
10
|
+
namespace :sidekiq do
|
11
|
+
desc "Install sidekiq service script"
|
12
|
+
task :init_d do
|
13
|
+
privileged_on roles(fetch(:mb_sidekiq_role)) do |host, user|
|
14
|
+
template "sidekiq_init.erb",
|
15
|
+
"/etc/init.d/sidekiq_#{application_basename}",
|
16
|
+
:mode => "a+rx",
|
17
|
+
:binding => binding,
|
18
|
+
:sudo => true
|
19
|
+
|
20
|
+
execute "sudo update-rc.d -f sidekiq_#{application_basename} defaults"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
%w[start stop].each do |command|
|
25
|
+
desc "#{command} sidekiq"
|
26
|
+
task command do
|
27
|
+
on roles(fetch(:mb_sidekiq_role)) do
|
28
|
+
execute "service sidekiq_#{application_basename} #{command}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "restart sidekiq"
|
34
|
+
task :restart do
|
35
|
+
invoke "mb:sidekiq:stop"
|
36
|
+
invoke "mb:sidekiq:start"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
mb_recipe :ssl do
|
2
|
+
during :provision, "generate_dh"
|
3
|
+
during :provision, "generate_self_signed_crt"
|
4
|
+
end
|
5
|
+
|
6
|
+
namespace :mb do
|
7
|
+
namespace :ssl do
|
8
|
+
desc "Generate an SSL key and CSR for Ngnix HTTPS"
|
9
|
+
task :generate_csr do
|
10
|
+
_run_ssl_script
|
11
|
+
_copy_to_all_web_servers(%w(.key .csr))
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Generate an SSL key, CSR, and self-signed cert for Ngnix HTTPS"
|
15
|
+
task :generate_self_signed_crt do
|
16
|
+
_run_ssl_script("--self")
|
17
|
+
_copy_to_all_web_servers(%w(.key .csr .crt))
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Generate unique DH group"
|
21
|
+
task :generate_dh do
|
22
|
+
privileged_on roles(:web) do
|
23
|
+
unless test("sudo [ -f /etc/ssl/dhparams.pem ]")
|
24
|
+
execute :sudo, "openssl dhparam -out /etc/ssl/dhparams.pem 2048"
|
25
|
+
execute :sudo, "chmod 600 /etc/ssl/dhparams.pem"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def _run_ssl_script(opt="")
|
31
|
+
privileged_on primary(:web) do
|
32
|
+
files_exist = %w(.key .csr .crt).any? do |ext|
|
33
|
+
test("sudo [ -f /etc/ssl/#{application_basename}#{ext} ]")
|
34
|
+
end
|
35
|
+
|
36
|
+
if files_exist
|
37
|
+
info("Files exist; skipping SSL key generation.")
|
38
|
+
else
|
39
|
+
config = "/tmp/csr_config"
|
40
|
+
ssl_script = "/tmp/ssl_script"
|
41
|
+
|
42
|
+
template("csr_config.erb", config, :sudo => true)
|
43
|
+
template("ssl_setup", ssl_script, :mode => "+x", :sudo => true)
|
44
|
+
|
45
|
+
within "/etc/ssl" do
|
46
|
+
execute :sudo, ssl_script, opt, application_basename, config
|
47
|
+
execute :sudo, "rm", ssl_script, config
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def _copy_to_all_web_servers(extensions)
|
54
|
+
# TODO
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
mb_recipe :ufw do
|
2
|
+
during :provision, "configure"
|
3
|
+
end
|
4
|
+
|
5
|
+
namespace :mb do
|
6
|
+
namespace :ufw do
|
7
|
+
desc "Configure role-based ufw rules on each server"
|
8
|
+
task :configure do
|
9
|
+
rules = fetch(:mb_ufw_rules, {})
|
10
|
+
distinct_roles = rules.values.flatten.uniq
|
11
|
+
|
12
|
+
# First reset the firewall on all affected servers
|
13
|
+
privileged_on roles(*distinct_roles) do
|
14
|
+
execute "sudo ufw --force reset"
|
15
|
+
execute "sudo ufw default deny incoming"
|
16
|
+
execute "sudo ufw default allow outgoing"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Then set up all ufw rules according to the mb_ufw_rules hash
|
20
|
+
rules.each do |command, *role_names|
|
21
|
+
privileged_on roles(*role_names.flatten) do
|
22
|
+
execute "sudo ufw #{command}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Finally, enable the firewall on all affected servers
|
27
|
+
privileged_on roles(*distinct_roles) do
|
28
|
+
execute "sudo ufw --force enable"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
mb_recipe :unicorn do
|
2
|
+
during :provision, %w(init_d config_rb)
|
3
|
+
during "deploy:start", "start"
|
4
|
+
during "deploy:stop", "stop"
|
5
|
+
during "deploy:restart", "restart"
|
6
|
+
during "deploy:publishing", "restart"
|
7
|
+
end
|
8
|
+
|
9
|
+
namespace :mb do
|
10
|
+
namespace :unicorn do
|
11
|
+
desc "Install service script for unicorn"
|
12
|
+
task :init_d do
|
13
|
+
privileged_on roles(:app) do |host, user|
|
14
|
+
unicorn_user = fetch(:mb_unicorn_user) || user
|
15
|
+
|
16
|
+
template "unicorn_init.erb",
|
17
|
+
"/etc/init.d/unicorn_#{application_basename}",
|
18
|
+
:mode => "a+rx",
|
19
|
+
:binding => binding,
|
20
|
+
:sudo => true
|
21
|
+
|
22
|
+
execute "sudo update-rc.d -f unicorn_#{application_basename} defaults"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Create config/unicorn.rb"
|
27
|
+
task :config_rb do
|
28
|
+
on release_roles(:all) do
|
29
|
+
template "unicorn.rb.erb", "#{shared_path}/config/unicorn.rb"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
%w[start stop restart].each do |command|
|
34
|
+
desc "#{command} unicorn"
|
35
|
+
task command do
|
36
|
+
on roles(:app) do
|
37
|
+
execute "service unicorn_#{application_basename} #{command}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
mb_recipe :user do
|
2
|
+
during :provision, %w(add install_public_key)
|
3
|
+
end
|
4
|
+
|
5
|
+
namespace :mb do
|
6
|
+
namespace :user do
|
7
|
+
desc "Create the UNIX user if it doesn't already exist"
|
8
|
+
task :add do
|
9
|
+
privileged_on roles(:all) do |host, user|
|
10
|
+
unless test("sudo grep -q #{user}: /etc/passwd")
|
11
|
+
execute :sudo, "adduser", "--disabled-password", user, "</dev/null"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Copy root's authorized_keys to the user account if it doesn't "\
|
17
|
+
"already have its own keys"
|
18
|
+
task :install_public_key do
|
19
|
+
root = fetch(:mb_privileged_user)
|
20
|
+
|
21
|
+
privileged_on roles(:all) do |host, user|
|
22
|
+
unless test("sudo [ -f /home/#{user}/.ssh/authorized_keys ]")
|
23
|
+
execute :sudo, "mkdir", "-p", "/home/#{user}/.ssh"
|
24
|
+
execute :sudo, "cp", "~#{root}/.ssh/authorized_keys",
|
25
|
+
"/home/#{user}/.ssh"
|
26
|
+
execute :sudo, "chown", "-R", "#{user}:#{user}", "/home/#{user}/.ssh"
|
27
|
+
execute :sudo, "chmod", "600", "/home/#{user}/.ssh/authorized_keys"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
mb_recipe :version do
|
2
|
+
during "deploy:updating", "write_initializer"
|
3
|
+
end
|
4
|
+
|
5
|
+
namespace :mb do
|
6
|
+
namespace :version do
|
7
|
+
desc "Write initializers/version.rb with git version and date information"
|
8
|
+
task :write_initializer do
|
9
|
+
git_version = {}
|
10
|
+
branch = fetch(:branch)
|
11
|
+
|
12
|
+
on release_roles(:all).first do
|
13
|
+
with fetch(:git_environmental_variables) do
|
14
|
+
within repo_path do
|
15
|
+
git_version[:tag] = \
|
16
|
+
capture(:git, "describe", branch, "--always --tag").chomp
|
17
|
+
git_version[:date] = \
|
18
|
+
capture(:git, "log", branch, '-1 --format="%ad" --date=short')\
|
19
|
+
.chomp
|
20
|
+
git_version[:time] = \
|
21
|
+
capture(:git, "log", branch, '-1 --format="%ad" --date=iso')\
|
22
|
+
.chomp
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
on release_roles(:all) do
|
28
|
+
template "version.rb.erb",
|
29
|
+
"#{release_path}/config/initializers/version.rb",
|
30
|
+
:binding => binding
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capistrano-mb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.22.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Brictson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: capistrano
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.3.5
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.3.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sshkit
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.6.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.6.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: chandler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: 'Production-ready provisioning and deployment recipes for the full Rails
|
84
|
+
4 stack. Installs and configures Ruby, Nginx, Unicorn, PostgreSQL, dotenv, and more
|
85
|
+
onto Ubuntu 14.04 LTS using Capistrano. (Note: this gem was formerly called capistrano-fiftyfive.)'
|
86
|
+
email: matt@mattbrictson.com
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- CHANGELOG.md
|
93
|
+
- Gemfile
|
94
|
+
- LICENSE.txt
|
95
|
+
- README.md
|
96
|
+
- Rakefile
|
97
|
+
- capistrano-mb.gemspec
|
98
|
+
- lib/capistrano/fiftyfive.rb
|
99
|
+
- lib/capistrano/mb.rb
|
100
|
+
- lib/capistrano/mb/compatibility.rb
|
101
|
+
- lib/capistrano/mb/dsl.rb
|
102
|
+
- lib/capistrano/mb/recipe.rb
|
103
|
+
- lib/capistrano/mb/templates/crontab.erb
|
104
|
+
- lib/capistrano/mb/templates/csr_config.erb
|
105
|
+
- lib/capistrano/mb/templates/delayed_job_init.erb
|
106
|
+
- lib/capistrano/mb/templates/logrotate.erb
|
107
|
+
- lib/capistrano/mb/templates/maintenance.html.erb
|
108
|
+
- lib/capistrano/mb/templates/nginx.erb
|
109
|
+
- lib/capistrano/mb/templates/nginx_unicorn.erb
|
110
|
+
- lib/capistrano/mb/templates/pgpass.erb
|
111
|
+
- lib/capistrano/mb/templates/postgresql-backup-logrotate.erb
|
112
|
+
- lib/capistrano/mb/templates/rbenv_bashrc
|
113
|
+
- lib/capistrano/mb/templates/sidekiq_init.erb
|
114
|
+
- lib/capistrano/mb/templates/ssl_setup
|
115
|
+
- lib/capistrano/mb/templates/unicorn.rb.erb
|
116
|
+
- lib/capistrano/mb/templates/unicorn_init.erb
|
117
|
+
- lib/capistrano/mb/templates/version.rb.erb
|
118
|
+
- lib/capistrano/mb/version.rb
|
119
|
+
- lib/capistrano/tasks/aptitude.rake
|
120
|
+
- lib/capistrano/tasks/crontab.rake
|
121
|
+
- lib/capistrano/tasks/defaults.rake
|
122
|
+
- lib/capistrano/tasks/delayed_job.rake
|
123
|
+
- lib/capistrano/tasks/dotenv.rake
|
124
|
+
- lib/capistrano/tasks/fiftyfive.rake
|
125
|
+
- lib/capistrano/tasks/logrotate.rake
|
126
|
+
- lib/capistrano/tasks/maintenance.rake
|
127
|
+
- lib/capistrano/tasks/migrate.rake
|
128
|
+
- lib/capistrano/tasks/nginx.rake
|
129
|
+
- lib/capistrano/tasks/postgresql.rake
|
130
|
+
- lib/capistrano/tasks/provision.rake
|
131
|
+
- lib/capistrano/tasks/rake.rake
|
132
|
+
- lib/capistrano/tasks/rbenv.rake
|
133
|
+
- lib/capistrano/tasks/seed.rake
|
134
|
+
- lib/capistrano/tasks/sidekiq.rake
|
135
|
+
- lib/capistrano/tasks/ssl.rake
|
136
|
+
- lib/capistrano/tasks/ufw.rake
|
137
|
+
- lib/capistrano/tasks/unicorn.rake
|
138
|
+
- lib/capistrano/tasks/user.rake
|
139
|
+
- lib/capistrano/tasks/version.rake
|
140
|
+
homepage: https://github.com/mattbrictson/capistrano-mb
|
141
|
+
licenses:
|
142
|
+
- MIT
|
143
|
+
metadata: {}
|
144
|
+
post_install_message: capistrano-fiftyfive has been renamed to capistrano-mb. Please
|
145
|
+
update your Gemfile.
|
146
|
+
rdoc_options: []
|
147
|
+
require_paths:
|
148
|
+
- lib
|
149
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
requirements: []
|
160
|
+
rubyforge_project:
|
161
|
+
rubygems_version: 2.4.8
|
162
|
+
signing_key:
|
163
|
+
specification_version: 4
|
164
|
+
summary: Additional Capistrano 3 recipes
|
165
|
+
test_files: []
|