deploy_mate 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +19 -0
  4. data/Gemfile.lock +9 -7
  5. data/README.md +57 -29
  6. data/deploy-mate.gemspec +5 -8
  7. data/lib/capistrano/configs/application.pill.erb +59 -0
  8. data/lib/capistrano/configs/fail2ban-nginx-request-limit-filter.conf.erb +13 -0
  9. data/lib/capistrano/configs/fail2ban-nginx-request-limit-jail.conf.erb +494 -0
  10. data/lib/capistrano/configs/logrotate.erb +2 -2
  11. data/lib/capistrano/configs/nginx_app.conf.erb +9 -4
  12. data/lib/capistrano/configs/nginx_base.conf.erb +1 -1
  13. data/lib/capistrano/configs/puma.rb.erb +64 -0
  14. data/lib/capistrano/configs/upstart.conf.erb +1 -1
  15. data/lib/capistrano/deploy_mate_capfile.rb +2 -2
  16. data/lib/capistrano/deploy_mate_defaults.rb +5 -4
  17. data/lib/capistrano/helpers.rb +4 -2
  18. data/lib/capistrano/modules/shell.rb +7 -0
  19. data/lib/capistrano/modules/user_management.rb +11 -0
  20. data/lib/capistrano/scripts/create_ubuntu_user.sh +9 -0
  21. data/lib/capistrano/scripts/set_defaults.sh +2 -1
  22. data/lib/capistrano/tasks/bluepill.rake +29 -5
  23. data/lib/capistrano/tasks/elasticsearch.rake +18 -0
  24. data/lib/capistrano/tasks/fail2ban.rake +22 -0
  25. data/lib/capistrano/tasks/logrotate.rake +1 -0
  26. data/lib/capistrano/tasks/machine.rake +99 -17
  27. data/lib/capistrano/tasks/nginx.rake +7 -4
  28. data/lib/capistrano/tasks/puma.rake +18 -0
  29. data/lib/capistrano/tasks/unicorn.rake +1 -17
  30. data/lib/capistrano/tasks/upstart.rake +2 -0
  31. data/lib/deploy_mate/tasks.rake +52 -45
  32. data/lib/deploy_mate/templates/Capfile.erb +9 -2
  33. data/lib/deploy_mate/templates/deploy/stage.rb.erb +4 -4
  34. data/lib/deploy_mate/templates/deploy.rb.erb +22 -4
  35. data/lib/deploy_mate/templates/deploy_mate.yml.erb +79 -0
  36. data/lib/deploy_mate.rb +9 -0
  37. metadata +19 -5
  38. data/lib/capistrano/configs/unicorn.pill.erb +0 -28
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ sudo mkdir -p /home/ubuntu/.ssh/
3
+ sudo groupadd ubuntu
4
+ sudo useradd ubuntu -g ubuntu -d /home/ubuntu -s /bin/bash
5
+ sudo adduser ubuntu sudo
6
+ sudo cp ~/.ssh/authorized_keys /home/ubuntu/.ssh/
7
+ sudo chown -R ubuntu:ubuntu /home/ubuntu
8
+ sudo echo "ubuntu ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ubuntu_no_sudo_password
9
+ sudo chmod 0440 /etc/sudoers.d/ubuntu_no_sudo_password
@@ -1,3 +1,4 @@
1
1
  #!/bin/bash
2
2
  source ~/.rvm/scripts/rvm
3
- rvm --default $1
3
+ rvm --default $1
4
+ echo "gem: --no-rdoc --no-ri" >> ~/.gemrc
@@ -1,27 +1,51 @@
1
1
  namespace :bluepill do
2
+ include Shell
2
3
 
3
4
  desc "Installs the application pill"
4
5
  task :setup do
5
6
  on roles(:app) do
6
7
  execute "mkdir -p #{shared_path}/config"
7
- template "unicorn.pill.erb", "#{shared_path}/config/unicorn.pill"
8
+ template "application.pill.erb", "#{shared_path}/config/#{fetch(:application)}.pill"
8
9
  end
9
10
  end
10
11
 
11
12
  desc "Starts bluepill"
12
13
  task :start do
13
14
  on roles(:app) do
14
- sudo "start bluepill"
15
+ if !bluepill_running?
16
+ sudo "start bluepill"
17
+ else
18
+ info "No need to start bluepill, it is running!"
19
+ end
15
20
  end
16
21
  end
17
22
 
18
- desc "Stops unicorn"
23
+ desc "Stops app server"
19
24
  task :stop do
20
25
  on roles(:app) do
21
- sudo "stop bluepill"
26
+ if bluepill_running?
27
+ sudo "stop bluepill"
28
+ else
29
+ "Can't stop bluepill because it's not running!"
30
+ end
22
31
  end
23
32
  end
24
33
 
34
+ desc "Restarts/Reloads app gracefully"
35
+ task :restart do
36
+ invoke "bluepill:start"
25
37
 
26
- end
38
+ on roles(:app) do
39
+ if bluepill_running?
40
+ if pill_running?(fetch(:app_server))
41
+ execute :rvmsudo, :bluepill, fetch(:application), :restart
42
+ else
43
+ execute :rvmsudo, :bluepill, fetch(:application), :start
44
+ end
45
+ end
46
+ end
27
47
 
48
+ invoke "nginx:reload"
49
+ end
50
+ before :restart, 'rvm:hook'
51
+ end
@@ -0,0 +1,18 @@
1
+ set_default(:elasticsearch_version, "1.7")
2
+
3
+ namespace :elasticsearch do
4
+ include Aptitude
5
+ task :install do
6
+ on roles(:search) do
7
+ unless is_package_installed?("elasticsearch")
8
+ apt_get_install("openjdk-7-jre-headless") unless is_package_installed?("openjdk-7-jre-headless")
9
+ execute "wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -"
10
+ sudo "add-apt-repository 'deb http://packages.elasticsearch.org/elasticsearch/#{fetch(:elasticsearch_version)}/debian stable main'"
11
+ apt_get_update
12
+ apt_get_install("elasticsearch")
13
+ sudo "update-rc.d elasticsearch defaults 95 10"
14
+ sudo :service, :elasticsearch, :start
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ namespace :fail2ban do
2
+ include Shell
3
+
4
+ desc "Installs the fail2ban configs"
5
+ task :setup do
6
+ on roles(:web) do
7
+ template "fail2ban-nginx-request-limit-jail.conf.erb", "/tmp/fail2ban_jail"
8
+ sudo "mv /tmp/fail2ban_jail /etc/fail2ban/jail.conf"
9
+ template "fail2ban-nginx-request-limit-jail.conf.erb", "/tmp/fail2ban_req_filter"
10
+ sudo "mv /tmp/fail2ban_req_filter /etc/fail2ban/filter.d/nginx-req-limit.conf"
11
+ end
12
+ end
13
+
14
+ desc "Restart fail2ban"
15
+ task :restart do
16
+ on roles(:web) do
17
+ sudo "service fail2ban restart"
18
+ end
19
+ end
20
+
21
+ after "fail2ban:setup", "fail2ban:restart"
22
+ end
@@ -1,4 +1,5 @@
1
1
  namespace :logrotate do
2
+ include Shell
2
3
 
3
4
  desc "Install the logrotate config"
4
5
  task :setup do
@@ -1,37 +1,59 @@
1
1
  namespace :machine do
2
2
  include Aptitude
3
+ include UserManagement
3
4
 
4
5
  desc "Sets up a blank Ubuntu to run our Rails-setup"
5
6
  task :init do
6
7
  on roles(:app) do
7
8
  apt_get_update
8
- invoke "machine:install:htop"
9
- invoke "machine:install:language_pack_de"
10
- invoke "machine:install:unattended_upgrades"
11
- invoke "machine:install:ntp"
12
- invoke "machine:install:git"
13
- invoke "machine:install:nginx"
14
- invoke "machine:install:fail2ban"
15
- invoke "machine:install:rvm"
16
- invoke "machine:install:ruby"
17
- invoke "machine:install:set_defaults"
18
- invoke "machine:install:bluepill"
19
- invoke "machine:install:bundler"
20
- invoke "machine:install:nodejs"
21
- invoke "machine:install:mysql_dev"
22
- end
9
+ end
10
+ invoke "machine:install:ssh_keys"
11
+ invoke "machine:install:htop"
12
+ invoke "machine:install:language_pack_de"
13
+ invoke "machine:install:unattended_upgrades"
14
+ invoke "machine:install:ntp"
15
+ invoke "machine:install:git"
16
+ invoke "machine:install:nginx"
17
+ invoke "machine:install:fail2ban"
18
+ invoke "machine:install:rvm"
19
+ invoke "machine:install:ruby"
20
+ invoke "machine:install:set_defaults"
21
+ invoke "machine:install:bluepill"
22
+ invoke "machine:install:bundler"
23
+ invoke "machine:install:nodejs"
24
+ invoke "machine:install:elasticsearch"
25
+ invoke "machine:install:imagemagick" if fetch(:imagemagick)
26
+ invoke "machine:install:memcached" if fetch(:memcached)
27
+ invoke "machine:install:mysql_dev" if fetch(:db_engine) == "mysql"
28
+ invoke "machine:install:postgres_dev" if fetch(:db_engine) == "postgresql"
29
+ end
30
+ before "machine:init", "machine:check_ubuntu_user"
31
+ before "deploy", "machine:check_ubuntu_user"
32
+
33
+ desc "Check if we are doing things as the correct user"
34
+ task :check_ubuntu_user do
35
+ on roles(:app) do
36
+ unless am_i?("ubuntu")
37
+ execute_script("create_ubuntu_user.sh") # Creates an Amazon AWS-style 'ubuntu'-user on machines with only 'root'
38
+ error "Please use a use a user named 'ubuntu' to login to the machine."
39
+ fail
40
+ end
41
+ end
23
42
  end
24
43
 
25
44
  desc "Install configs"
26
45
  task :setup do
27
46
  invoke "nginx:setup"
28
- invoke "unicorn:setup"
47
+ invoke "unicorn:setup" if fetch(:app_server) == "unicorn"
48
+ invoke "puma:setup" if fetch(:app_server) == "puma"
29
49
  invoke "upstart:setup"
30
50
  invoke "logrotate:setup"
51
+ invoke "fail2ban:setup"
31
52
  invoke "bluepill:setup"
32
53
  end
33
54
  before :setup, "deploy:ensure_folder"
34
55
 
56
+ desc "Install all dependencies"
35
57
  namespace :install do
36
58
  task :set_defaults do
37
59
  on roles(:app) do
@@ -42,6 +64,10 @@ namespace :machine do
42
64
  end
43
65
  end
44
66
 
67
+ task :elasticsearch do
68
+ invoke 'elasticsearch:install'
69
+ end
70
+
45
71
  task :language_pack_de do
46
72
  on roles(:app) do
47
73
  apt_get_install("language-pack-de") unless is_package_installed?("language-pack-de")
@@ -76,12 +102,31 @@ namespace :machine do
76
102
  end
77
103
  end
78
104
 
105
+ task :imagemagick do
106
+ on roles(:app) do
107
+ apt_get_install("imagemagick") unless is_package_installed?("imagemagick")
108
+ end
109
+ end
110
+
111
+ task :memcached do
112
+ on roles(:app) do
113
+ apt_get_install("memcached") unless is_package_installed?("memcached")
114
+ end
115
+ end
116
+
79
117
  task :mysql_dev do
80
118
  on roles(:app) do
81
119
  apt_get_install("libmysqlclient-dev") unless is_package_installed?("libmysqlclient-dev")
82
120
  end
83
121
  end
84
122
 
123
+ task :postgres_dev do
124
+ on roles(:app) do
125
+ apt_get_install("libpq-dev") unless is_package_installed?("libpq-dev")
126
+ apt_get_install("postgresql-client") unless is_package_installed?("postgresql-client")
127
+ end
128
+ end
129
+
85
130
  task :htop do
86
131
  on roles(:app) do
87
132
  apt_get_install("htop") unless is_package_installed?("htop")
@@ -97,6 +142,10 @@ namespace :machine do
97
142
  task :ntp do
98
143
  on roles(:app) do
99
144
  apt_get_install("ntp") unless is_package_installed?("ntp")
145
+ sudo "chmod 666 /etc/timezone"
146
+ execute 'echo "Europe/Berlin" > /etc/timezone'
147
+ sudo "chmod 644 /etc/timezone"
148
+ sudo "dpkg-reconfigure -f noninteractive tzdata"
100
149
  end
101
150
  end
102
151
 
@@ -123,6 +172,7 @@ namespace :machine do
123
172
  unless is_package_installed?("imagemagick")
124
173
  apt_get_install("imagemagick")
125
174
  apt_get_install("libmagickcore-dev")
175
+ apt_get_install("libmagickwand-dev")
126
176
  end
127
177
  end
128
178
  end
@@ -135,9 +185,41 @@ namespace :machine do
135
185
  end
136
186
  end
137
187
 
188
+ desc "Installs new SSH Keys"
189
+ task :ssh_keys do
190
+ on roles(:app) do
191
+ file_patterns = fetch(:ssh_file_names)
192
+
193
+ next puts("Skip SSH key installation") if file_patterns == []
194
+
195
+ puts "Installing SSH Keys from #{file_patterns.join(',')}..."
196
+
197
+ keys = []
198
+ file_patterns.each do |file_pattern|
199
+ Dir.glob(File.expand_path(file_pattern)).each do |file_name|
200
+ next if File.directory?(file_name)
201
+ key_as_string = File.read(file_name)
202
+
203
+ if key_as_string.start_with?("ssh-rsa")
204
+ keys << key_as_string
205
+ puts file_name
206
+ else
207
+ warn "#{file_name} is NO publickey"
208
+ end
209
+ end
210
+ end
211
+
212
+ fail "No ssh-keys found in #{file_patterns.join(',')}." unless keys.any?
213
+
214
+ upload!(StringIO.new(keys.join("")), 'new_keys')
215
+ sudo "rm ~/.ssh/authorized_keys"
216
+ sudo "mv new_keys ~/.ssh/authorized_keys"
217
+ end
218
+ end
219
+
138
220
  task :update_rvm_key do
139
221
  on roles(:app) do
140
- execute :gpg, "--keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3"
222
+ execute :gpg, "--keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3"
141
223
  end
142
224
  end
143
225
  before "machine:install:rvm", "machine:install:update_rvm_key"
@@ -1,28 +1,31 @@
1
1
  set_default(:nginx_server_name, "*.*")
2
2
 
3
3
  namespace :nginx do
4
+ include Shell
4
5
 
5
6
  desc "Installs the nginx configs"
6
7
  task :setup do
7
8
  on roles(:web) do
8
9
  template "nginx_base.conf.erb", "/tmp/nginx_conf"
9
10
  sudo "mv /tmp/nginx_conf /etc/nginx/nginx.conf"
11
+
10
12
  template "nginx_app.conf.erb", "/tmp/#{fetch(:application)}_conf"
11
13
  sudo "mv /tmp/#{fetch(:application)}_conf /etc/nginx/sites-available/#{fetch(:application)}.conf"
12
14
 
13
- if test("[ -f /etc/nginx/sites-enabled/default ]")
15
+ if file_exists? "/etc/nginx/sites-enabled/default"
14
16
  sudo "rm /etc/nginx/sites-enabled/default"
15
17
  end
16
18
 
17
- invoke "nginx:enable_site"
18
- invoke "nginx:reload"
19
+ execute "mkdir -p #{shared_path}/log"
19
20
  end
21
+ invoke "nginx:enable_site"
22
+ invoke "nginx:reload"
20
23
  end
21
24
 
22
25
  desc "Enable the app page for nginx"
23
26
  task :enable_site do
24
27
  on roles(:web) do
25
- unless test("[ -f /etc/nginx/sites-enabled/#{fetch(:application)}.conf ]")
28
+ unless file_exists? "/etc/nginx/sites-enabled/#{fetch(:application)}.conf"
26
29
  sudo "ln -sf /etc/nginx/sites-available/#{fetch(:application)}.conf /etc/nginx/sites-enabled/#{fetch(:application)}.conf"
27
30
  end
28
31
  end
@@ -0,0 +1,18 @@
1
+ set_default(:puma_workers, "5")
2
+ set_default(:puma_threads, "10")
3
+ set_default(:puma_timeout, "30")
4
+ set_default(:puma_worker_grace_time, "60")
5
+
6
+ namespace :puma do
7
+ include Bluepill
8
+ include Shell
9
+
10
+ desc "Installs the puma config"
11
+ task :setup do
12
+ on roles(:app) do
13
+ execute "mkdir -p #{shared_path}/config"
14
+ template "puma.rb.erb", "#{shared_path}/config/puma.rb"
15
+ end
16
+ end
17
+
18
+ end
@@ -4,6 +4,7 @@ set_default(:unicorn_worker_grace_time, "60")
4
4
 
5
5
  namespace :unicorn do
6
6
  include Bluepill
7
+ include Shell
7
8
 
8
9
  desc "Installs the unicorn config"
9
10
  task :setup do
@@ -13,21 +14,4 @@ namespace :unicorn do
13
14
  end
14
15
  end
15
16
 
16
- desc "Gracefully restarts unicorn"
17
- task :phased_restart do
18
- on roles(:app) do
19
- if bluepill_running?
20
- if pill_running?(:unicorn)
21
- execute :rvmsudo, :bluepill, :restart, :unicorn
22
- else
23
- execute :rvmsudo, :bluepill, :start, :unicorn
24
- end
25
- else
26
- invoke "bluepill:start"
27
- invoke "nginx:reload"
28
- end
29
- end
30
- end
31
- before :phased_restart, 'rvm:hook'
32
-
33
17
  end
@@ -1,6 +1,8 @@
1
1
  namespace :upstart do
2
2
  include Upstart
3
+ include Shell
3
4
 
5
+ # TODO: remove one of these - they do the same
4
6
  desc "Install the upstart config"
5
7
  task :setup do
6
8
  on roles(:app) do
@@ -1,46 +1,48 @@
1
- require 'readline'
2
-
3
1
  namespace :deploy_mate do
2
+ desc 'copy the default configuration file to config/deploy_mate.yml'
3
+ task :default_config do
4
+ @app_name = guess_app_name
5
+ @ruby_version = guess_ruby_version
6
+ @rails = to_h(rails?)
7
+ @imagemagick = to_h(imagemagick?)
8
+ @sidekiq = to_h(sidekiq?)
9
+ @memcached = to_h(memcached?)
4
10
 
5
- desc 'Installs the needed capistrano files to deploy with the mate.'
6
- task :install do |t,args|
7
- puts "I'm your DEPLOY_MATE."
8
- puts "We will setting up your deployment now."
9
-
10
- @app_name = ask("App-Name (for nginx, servers, etc.):", guess_app_name)
11
- @repo_url = ask("Url-Location of git-repo:", "git@github.com:hanseventures/#{@app_name}.git")
12
- @is_rails = yes_or_no?("Is this a RAILS project ?", (rails_present? ? "yes" : "no"))
13
-
14
- @stage_name = ask("Give the first stage a name:", "prestage")
15
- @ssh_name = ask("SSH-Hostname for the server:", "#{@app_name}-#{@stage_name}")
16
- @branch_name = ask("Branch to deploy '#{@stage_name}' from:", "dev")
17
- @host_name = ask("Web-URL for '#{@stage_name}':", "#{@stage_name}.#{@app_name}.com")
18
- @environment = ask("#{@stage_name}'s environment (RACK_ENV/RAILS_ENV):", "#{@stage_name}")
19
-
20
- puts "Aye!"
21
- puts "Worrrrking..."
11
+ puts "Creating default template:\n\n"
12
+ puts "\t" + config_template('deploy_mate.yml.erb', 'config/deploy_mate.yml')
13
+ puts "\nConfigure it and then run:\n\n\tbundle exec rake deploy_mate:install\n\n"
14
+ end
22
15
 
23
- config_template("Capfile.erb", "Capfile")
24
- sleep 1
25
- config_template("deploy.rb.erb", "config/deploy.rb")
26
- sleep 1
16
+ task :install do
17
+ @config = YAML.load_file(File.expand_path('config/deploy_mate.yml', ENV['PWD']))
18
+ puts "Creating capistrano deployment files:\n"
27
19
  FileUtils.mkdir_p("config/deploy") unless File.exists?("config/deploy")
28
- config_template("deploy/stage.rb.erb", "config/deploy/#{@stage_name}.rb")
29
- sleep 1
30
-
31
- puts "Arr, be dun working!"
20
+ puts config_template("Capfile.erb", "Capfile")
21
+ puts config_template("deploy.rb.erb", "config/deploy.rb")
22
+ puts config_template("deploy/stage.rb.erb", "config/deploy/#{@config['stage_name']}.rb")
32
23
  end
33
-
34
24
  end
35
25
 
36
26
  def config_template(from, to)
37
27
  erb = File.read(File.expand_path("../templates/#{from}", __FILE__))
38
28
  compiled = ERB.new(erb).result(binding)
39
29
  File.open(to, "wb") { |f| f.write(compiled) }
40
- puts "'#{to}'"
30
+ to
31
+ end
32
+
33
+ def sidekiq?
34
+ defined? Sidekiq
41
35
  end
42
36
 
43
- def rails_present?
37
+ def imagemagick?
38
+ defined? RMagick || defined? MiniMagick
39
+ end
40
+
41
+ def memcached?
42
+ defined? Dalli
43
+ end
44
+
45
+ def rails?
44
46
  defined? Rails
45
47
  end
46
48
 
@@ -48,21 +50,26 @@ def guess_app_name
48
50
  Dir.pwd.split(File::SEPARATOR).last
49
51
  end
50
52
 
51
- def yes_or_no?(prompt, default = nil)
52
- answer = "undefined"
53
- while(!["yes", "no"].include?(answer))
54
- answer = ask("#{prompt} [yes/no]:", (default == "yes" ? "yes" : "no"))
53
+ def guess_ruby_version
54
+ ruby_version = nil
55
+ ruby_version = cat_file(".ruby-version")
56
+ ruby_version.strip! if ruby_version
57
+ unless ruby_version
58
+ gem_file_content = cat_file("Gemfile")
59
+ if gem_file_content
60
+ match = gem_file_content.match("^ruby '(?<version>[0-9.]*)'")
61
+ if match
62
+ ruby_version = "ruby-" + match["version"]
63
+ end
64
+ end
55
65
  end
56
- (answer == "yes")
66
+ ruby_version
57
67
  end
58
68
 
59
- def ask(prompt, default = nil)
60
- if default
61
- Readline.pre_input_hook = -> {
62
- Readline.insert_text(default)
63
- Readline.redisplay
64
- }
65
- end
66
- data = Readline.readline("#{prompt}: ")
67
- return data.chomp
68
- end
69
+ def to_h(value)
70
+ value ? "yes" : "no"
71
+ end
72
+
73
+ def cat_file(filename)
74
+ File.open(filename, "rb") { |f| f.read } if File.exist?(filename)
75
+ end
@@ -1,5 +1,12 @@
1
1
  require 'capistrano/deploy_mate_capfile'
2
- <% if @is_rails %>
2
+ <% if @config['rails'] %>
3
3
  require 'capistrano/rails/assets'
4
4
  require 'capistrano/rails/migrations'
5
- <% end %>
5
+ <% end %>
6
+ Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
7
+
8
+ # Optionals
9
+ # Uncomment, if needed
10
+
11
+ # require "whenever/capistrano"
12
+ # before 'deploy:restart', 'deploy:migrate', 'whenever:update_crontab'
@@ -1,7 +1,7 @@
1
- server "<%= @ssh_name %>", roles: [:app, :web, :db], :primary => true
1
+ server "<%= @config['ssh_name'] %>", roles: [:app, :db, :web<% if @config['elasticsearch'] %>, :search<% end %>], :primary => true
2
2
 
3
3
  set :unicorn_workers, "2"
4
- set :nginx_server_name, "<%= @host_name %>"
4
+ set :nginx_server_name, "<%= @config['host_name'] %>"
5
5
 
6
- set :environment, "<%= @environment %>"
7
- set :branch, "<%= @branch_name %>"
6
+ set :environment, "<%= @config['environment'] %>"
7
+ set :branch, ENV.fetch("branch", "<%= @config['branch_name'] %>")
@@ -1,9 +1,27 @@
1
1
  # NOTE: copy this file to /config/deploy.rb
2
- set :application, '<%= @app_name %>'
2
+ set :application, '<%= @config['app_name'] %>'
3
3
 
4
4
  require "capistrano/deploy_mate_defaults"
5
5
 
6
+ set :rvm_ruby_version, '<%= @config['ruby_version'] %>'
7
+
6
8
  # Set app specific vars
7
- set :stages, %w(<%= @stage_name %>)
8
- set :default_stage, '<%= @stage_name %>'
9
- set :repo_url, '<%= @repo_url %>'
9
+ set :stages, %w(<%= @config['stage_name'] %>)
10
+ set :default_stage, '<%= @config['stage_name'] %>'
11
+ set :repo_url, '<%= @config['repo_url'] %>'
12
+ set :db_engine, '<%= @config['db_engine'] %>'
13
+ set :app_server, '<%= @config['app_server'] %>'
14
+
15
+ set :imagemagick, <%= @config['imagemagick'] %>
16
+ set :memcached, <%= @config['memcached'] %>
17
+ set :sidekiq, <%= @config['sidekiq'] %>
18
+
19
+ set :ssh_file_names, [<%= @config['ssh_file_names'].to_a.map { |file| "'#{file}'" }.join(', ') %>]
20
+
21
+ # Optionals
22
+ # Uncomment, if needed
23
+
24
+ # set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
25
+ # set :whenever_environment, fetch(:stage)
26
+ # set :whenever_roles, [:cronjobs]
27
+ # before "whenever:update_crontab", 'rvm:hook'
@@ -0,0 +1,79 @@
1
+ # This file represents your application deployment configuration and
2
+ # will be used to generate the capistrano deployment and server setup.
3
+ # Please go through this file and when you are ready execute:
4
+ #
5
+ # bundle exec rake deploy_mate:install
6
+
7
+ ---
8
+
9
+ # Name of the application, which is usually the same as the
10
+ # repository name.
11
+ app_name: <%= @app_name %>
12
+
13
+ # The url of your GIT repository.
14
+ repo_url: "git@github.com:your-github-name/<%= @app_name %>.git"
15
+
16
+ # For which stage should the server-setup/deployment be generated. It is
17
+ # recommended to start with a prestage system and afterwards configure
18
+ # the production system when it is ready.
19
+ stage_name: prestage
20
+
21
+ # Under which rails environment will the application run.
22
+ environment: prestage
23
+
24
+ # Which GIT branch should be deployed to the defined server by default?
25
+ # You can overrule this value by providing a branch on the deployment command:
26
+ #
27
+ # bundle exec cap prestage deploy branch=feature/xyz
28
+ branch_name: dev
29
+
30
+ # Which is the ssh shortcut to connect to the server. It should be configured
31
+ # in your ~/.ssh/config. You should be able to connect to the server using:
32
+ #
33
+ # ssh specified_ssh_name
34
+ #
35
+ ssh_name: prestage-server
36
+
37
+ # Since you are able to connect to the server with the specified ssh shortcurt,
38
+ # usually more persons should be able to access it. You can specify a list of
39
+ # public ssh keys which will be copied to the ~/.ssh/authorized_keys file on the
40
+ # server. If the list is empty, the current key setting will be left untouched on
41
+ # the server.
42
+ ssh_file_names:
43
+ - "~/.ssh/*.pub"
44
+
45
+ # Under which URL should your server be available? An IP address does the job
46
+ # too
47
+ host_name: example.com
48
+
49
+ # The ruby version, that will be installed and used on the server. It is used
50
+ # by RVM and must have a compatible syntax like '2.3.0' or 'ruby-2.3.0'.
51
+ ruby_version: <%= @ruby_version %>
52
+
53
+ # Currently there are two database engines supported: 'postgresql' and 'mysql'
54
+ db_engine: postgresql
55
+
56
+ # Currently there are two appservers supported: 'unicorn' and 'puma'.
57
+ # Remember to add the chosen appserver to your Gemfile if you are not
58
+ # already using it locally.
59
+ app_server: unicorn
60
+
61
+ # Are your running a rails application?
62
+ # Possible values 'yes' or 'no'.
63
+ rails: <%= @rails %>
64
+
65
+ # Are you depending on imagemagick for image manipulation (E.g. paperclip gem)?
66
+ # Possible values 'yes' or 'no'.
67
+ imagemagick: <%= @imagemagick %>
68
+
69
+ # Are you depending on sidekiq (E.g. as active job backend)?
70
+ # Possible values 'yes' or 'no'.
71
+ sidekiq: <%= @sidekiq %>
72
+
73
+ # Are you depending on elastic search?
74
+ # Possible values 'yes' or 'no'.
75
+ elasticsearch: no
76
+
77
+ # Are you depending on memcached for example as a cache store?
78
+ # Possible values 'yes' or 'no'.
79
+ memcached: <%= @memcached %>
@@ -0,0 +1,9 @@
1
+ if defined?(Rails)
2
+ module DeployMate
3
+ class Railtie < Rails::Railtie
4
+ rake_tasks do
5
+ load 'deploy_mate/tasks.rake'
6
+ end
7
+ end
8
+ end
9
+ end