capistrano-atlas 0.0.1

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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +215 -0
  7. data/Rakefile +5 -0
  8. data/capistrano-atlas.gemspec +32 -0
  9. data/lib/capistrano/atlas.rb +27 -0
  10. data/lib/capistrano/atlas/compatibility.rb +37 -0
  11. data/lib/capistrano/atlas/dsl.rb +157 -0
  12. data/lib/capistrano/atlas/recipe.rb +49 -0
  13. data/lib/capistrano/atlas/templates/crontab.erb +1 -0
  14. data/lib/capistrano/atlas/templates/csr_config.erb +10 -0
  15. data/lib/capistrano/atlas/templates/logrotate.erb +9 -0
  16. data/lib/capistrano/atlas/templates/maintenance.html.erb +26 -0
  17. data/lib/capistrano/atlas/templates/nginx.erb +64 -0
  18. data/lib/capistrano/atlas/templates/nginx_site.erb +97 -0
  19. data/lib/capistrano/atlas/templates/pgpass.erb +1 -0
  20. data/lib/capistrano/atlas/templates/postgresql-backup-logrotate.erb +11 -0
  21. data/lib/capistrano/atlas/templates/puma.rb.erb +22 -0
  22. data/lib/capistrano/atlas/templates/puma_init.erb +43 -0
  23. data/lib/capistrano/atlas/templates/rbenv_bashrc +4 -0
  24. data/lib/capistrano/atlas/templates/sidekiq_init.erb +100 -0
  25. data/lib/capistrano/atlas/templates/ssl_setup +43 -0
  26. data/lib/capistrano/atlas/templates/version.rb.erb +3 -0
  27. data/lib/capistrano/atlas/version.rb +5 -0
  28. data/lib/capistrano/tasks/aptitude.rake +111 -0
  29. data/lib/capistrano/tasks/bundler.rake +31 -0
  30. data/lib/capistrano/tasks/crontab.rake +14 -0
  31. data/lib/capistrano/tasks/defaults.rake +137 -0
  32. data/lib/capistrano/tasks/dotenv.rake +57 -0
  33. data/lib/capistrano/tasks/logrotate.rake +16 -0
  34. data/lib/capistrano/tasks/maintenance.rake +28 -0
  35. data/lib/capistrano/tasks/migrate.rake +29 -0
  36. data/lib/capistrano/tasks/nginx.rake +25 -0
  37. data/lib/capistrano/tasks/postgresql.rake +149 -0
  38. data/lib/capistrano/tasks/provision.rake +18 -0
  39. data/lib/capistrano/tasks/puma.rake +67 -0
  40. data/lib/capistrano/tasks/rake.rake +20 -0
  41. data/lib/capistrano/tasks/rbenv.rake +104 -0
  42. data/lib/capistrano/tasks/seed.rake +16 -0
  43. data/lib/capistrano/tasks/sidekiq.rake +42 -0
  44. data/lib/capistrano/tasks/ssl.rake +57 -0
  45. data/lib/capistrano/tasks/ufw.rake +32 -0
  46. data/lib/capistrano/tasks/user.rake +32 -0
  47. data/lib/capistrano/tasks/version.rake +34 -0
  48. metadata +161 -0
@@ -0,0 +1,57 @@
1
+ atlas_recipe :ssl do
2
+ during :provision, "generate_dh"
3
+ during :provision, "generate_self_signed_crt"
4
+ end
5
+
6
+ namespace :atlas 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
+ atlas_recipe :ufw do
2
+ during :provision, "configure"
3
+ end
4
+
5
+ namespace :atlas do
6
+ namespace :ufw do
7
+ desc "Configure role-based ufw rules on each server"
8
+ task :configure do
9
+ rules = fetch(:atlas_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 atlas_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,32 @@
1
+ atlas_recipe :user do
2
+ during :provision, %w(add install_public_key)
3
+ end
4
+
5
+ namespace :atlas 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(:atlas_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
+ atlas_recipe :version do
2
+ during "deploy:updating", "write_initializer"
3
+ end
4
+
5
+ namespace :atlas 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,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-atlas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - John McDowall
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-02 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: 'Does all the heavy lifting for production-ready provisioning and deployment
84
+ for the full Rails 5.1 stack. Installs and configures Ruby, Nginx, Puma, PostgreSQL,
85
+ dotenv, Let''s Encrypt and more onto Ubuntu 14.04 LTS using Capistrano. '
86
+ email: john@kantan.io
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-atlas.gemspec
98
+ - lib/capistrano/atlas.rb
99
+ - lib/capistrano/atlas/compatibility.rb
100
+ - lib/capistrano/atlas/dsl.rb
101
+ - lib/capistrano/atlas/recipe.rb
102
+ - lib/capistrano/atlas/templates/crontab.erb
103
+ - lib/capistrano/atlas/templates/csr_config.erb
104
+ - lib/capistrano/atlas/templates/logrotate.erb
105
+ - lib/capistrano/atlas/templates/maintenance.html.erb
106
+ - lib/capistrano/atlas/templates/nginx.erb
107
+ - lib/capistrano/atlas/templates/nginx_site.erb
108
+ - lib/capistrano/atlas/templates/pgpass.erb
109
+ - lib/capistrano/atlas/templates/postgresql-backup-logrotate.erb
110
+ - lib/capistrano/atlas/templates/puma.rb.erb
111
+ - lib/capistrano/atlas/templates/puma_init.erb
112
+ - lib/capistrano/atlas/templates/rbenv_bashrc
113
+ - lib/capistrano/atlas/templates/sidekiq_init.erb
114
+ - lib/capistrano/atlas/templates/ssl_setup
115
+ - lib/capistrano/atlas/templates/version.rb.erb
116
+ - lib/capistrano/atlas/version.rb
117
+ - lib/capistrano/tasks/aptitude.rake
118
+ - lib/capistrano/tasks/bundler.rake
119
+ - lib/capistrano/tasks/crontab.rake
120
+ - lib/capistrano/tasks/defaults.rake
121
+ - lib/capistrano/tasks/dotenv.rake
122
+ - lib/capistrano/tasks/logrotate.rake
123
+ - lib/capistrano/tasks/maintenance.rake
124
+ - lib/capistrano/tasks/migrate.rake
125
+ - lib/capistrano/tasks/nginx.rake
126
+ - lib/capistrano/tasks/postgresql.rake
127
+ - lib/capistrano/tasks/provision.rake
128
+ - lib/capistrano/tasks/puma.rake
129
+ - lib/capistrano/tasks/rake.rake
130
+ - lib/capistrano/tasks/rbenv.rake
131
+ - lib/capistrano/tasks/seed.rake
132
+ - lib/capistrano/tasks/sidekiq.rake
133
+ - lib/capistrano/tasks/ssl.rake
134
+ - lib/capistrano/tasks/ufw.rake
135
+ - lib/capistrano/tasks/user.rake
136
+ - lib/capistrano/tasks/version.rake
137
+ homepage: https://github.com/johnmcdowall/capistrano-atlas
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.6.13
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Additional Capistrano 3 recipes
161
+ test_files: []