deploy_mate 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +6 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +37 -0
- data/README.md +49 -0
- data/Rakefile +1 -0
- data/deploy-mate.gemspec +25 -0
- data/lib/capistrano/README.md +77 -0
- data/lib/capistrano/configs/logrotate.erb +22 -0
- data/lib/capistrano/configs/nginx_app.conf.erb +44 -0
- data/lib/capistrano/configs/nginx_base.conf.erb +48 -0
- data/lib/capistrano/configs/unicorn.pill.erb +28 -0
- data/lib/capistrano/configs/unicorn.rb.erb +31 -0
- data/lib/capistrano/configs/upstart.conf.erb +9 -0
- data/lib/capistrano/deploy_mate_capfile.rb +33 -0
- data/lib/capistrano/deploy_mate_defaults.rb +48 -0
- data/lib/capistrano/helpers.rb +20 -0
- data/lib/capistrano/modules/aptitude.rb +19 -0
- data/lib/capistrano/modules/bluepill.rb +11 -0
- data/lib/capistrano/modules/upstart.rb +7 -0
- data/lib/capistrano/scripts/install_ruby.sh +3 -0
- data/lib/capistrano/scripts/install_rvm.sh +4 -0
- data/lib/capistrano/scripts/set_defaults.sh +3 -0
- data/lib/capistrano/tasks/bluepill.rake +27 -0
- data/lib/capistrano/tasks/logrotate.rake +12 -0
- data/lib/capistrano/tasks/machine.rake +146 -0
- data/lib/capistrano/tasks/nginx.rake +74 -0
- data/lib/capistrano/tasks/rvm.rake +56 -0
- data/lib/capistrano/tasks/seeds.rake +16 -0
- data/lib/capistrano/tasks/unicorn.rake +33 -0
- data/lib/capistrano/tasks/upstart.rake +21 -0
- data/lib/deploy_mate/tasks.rake +68 -0
- data/lib/deploy_mate/templates/Capfile.erb +5 -0
- data/lib/deploy_mate/templates/deploy.rb.erb +9 -0
- data/lib/deploy_mate/templates/deploy/stage.rb.erb +7 -0
- metadata +136 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eba58d8742f1a363840c491e9787b2f6b2bab392
|
4
|
+
data.tar.gz: 58a9f883b30c90aa55acc9a7e458b6b89d424a52
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6fb3d87dabf2dbe71f468ab212dd243b16a4db3560ce262c05feaaf5d96564a59c67041e0102281f8f280b31c6c5e1130c810bb3826ec6b4cc39036f4f972d60
|
7
|
+
data.tar.gz: 660e5de498ccac52108eb8c1140eddb1d40c007e344a87c4ead92e8d623c46e7dfb41700085775057cf9e9f571276a6349dcea010f7a7c3abb41c6f3ad16ab0a
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
deploy-mate
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.2.0
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
deploy_mate (0.1)
|
5
|
+
capistrano (~> 3.0)
|
6
|
+
capistrano-bundler
|
7
|
+
capistrano-rails
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
capistrano (3.4.0)
|
13
|
+
i18n
|
14
|
+
rake (>= 10.0.0)
|
15
|
+
sshkit (~> 1.3)
|
16
|
+
capistrano-bundler (1.1.4)
|
17
|
+
capistrano (~> 3.1)
|
18
|
+
sshkit (~> 1.2)
|
19
|
+
capistrano-rails (1.1.2)
|
20
|
+
capistrano (~> 3.1)
|
21
|
+
capistrano-bundler (~> 1.1)
|
22
|
+
colorize (0.7.5)
|
23
|
+
i18n (0.7.0)
|
24
|
+
net-scp (1.2.1)
|
25
|
+
net-ssh (>= 2.6.5)
|
26
|
+
net-ssh (2.9.2)
|
27
|
+
rake (10.4.2)
|
28
|
+
sshkit (1.7.1)
|
29
|
+
colorize (>= 0.7.0)
|
30
|
+
net-scp (>= 1.1.2)
|
31
|
+
net-ssh (>= 2.8.0)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
deploy_mate!
|
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# The sturdy d'ploy-mate
|
2
|
+
<img src="http://hanseventures.s3.amazonaws.com/github/deploy-mate.jpg" width="300" />
|
3
|
+
> T'arrust me, bucko. I can do it.
|
4
|
+
|
5
|
+
This little gem can be added to your ruby-projects in order to **set up a working ruby-server** and **deploy** to it **Hanse Ventures'** style.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
Add this to your project's `Gemfile`:
|
9
|
+
|
10
|
+
```
|
11
|
+
gem 'deploy_mate', git: 'https://58341dac36402a0305899f85ff7c32265ee89109@github.com/hanseventures/deploy-mate'
|
12
|
+
```
|
13
|
+
and run `bundle install`.
|
14
|
+
|
15
|
+
After installing the gem you need to generate the files needed to be able to deploy with **capistrano**.
|
16
|
+
|
17
|
+
Add this at **the end** of your project's `Rakefile`:
|
18
|
+
```
|
19
|
+
load 'deploy_mate/tasks.rake'
|
20
|
+
```
|
21
|
+
then run
|
22
|
+
```
|
23
|
+
rake deploy_mate:install
|
24
|
+
````
|
25
|
+
|
26
|
+
Follow the instructions.
|
27
|
+
|
28
|
+
This will create the following files for you:
|
29
|
+
|
30
|
+
```
|
31
|
+
Capfile
|
32
|
+
config/deploy.rb
|
33
|
+
config/deploy/<your-stage>.rb
|
34
|
+
```
|
35
|
+
When done: **Remove** `load 'deploy_mate/tasks.rake'` from your `Rakefile`. It is not needed anymore and will otherwise only cause problems.
|
36
|
+
|
37
|
+
## Updating the gem
|
38
|
+
Should you need to update your `deploy_mate`-version (e.g. because somebody fixed a bug in the gem), run:
|
39
|
+
```
|
40
|
+
bundle update deploy_mate
|
41
|
+
```
|
42
|
+
This will bump you up to the latest repo-version.
|
43
|
+
|
44
|
+
## Setting up a server
|
45
|
+
1. Spawn yourself a basic **Ubuntu 14** at the provider of your choice.
|
46
|
+
2. Create a working SSH-configuration for that server and try it our using `ssh <your-server-name>`
|
47
|
+
3. Run `cap <your-stage> machine:init` to install the needed packages.
|
48
|
+
4. Run `cap <your-stage> machine:setup` the setup all needed configuration-files on the server
|
49
|
+
5. Run `cap <your-stage> deploy` and be done.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
load 'lib/deploy_mate/tasks.rake'
|
data/deploy-mate.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "deploy_mate"
|
3
|
+
s.version = "0.1"
|
4
|
+
|
5
|
+
s.authors = ["Tim Adler"]
|
6
|
+
s.date = %q{2015-04-02}
|
7
|
+
s.description = %q{This is how we deploy around here.}
|
8
|
+
s.summary = s.description
|
9
|
+
s.email = %q{tim.adler (at) hanseventures (dot) com}
|
10
|
+
s.license = "MIT"
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
s.homepage = %q{https://github.com/hanseventures/deploy-mate}
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
s.rubygems_version = %q{1.6.2}
|
17
|
+
|
18
|
+
s.add_dependency 'capistrano', '~> 3.0'
|
19
|
+
s.add_dependency 'capistrano-bundler'
|
20
|
+
s.add_dependency 'capistrano-rails'
|
21
|
+
s.add_dependency 'rake'
|
22
|
+
|
23
|
+
# s.add_development_dependency 'rake', '~> 10.1.0'
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# deploy-module
|
2
|
+
|
3
|
+
Deploy submodule for capistrano
|
4
|
+
|
5
|
+
## Howto
|
6
|
+
|
7
|
+
__NOTE:__ execute all commands in project root
|
8
|
+
|
9
|
+
### Prepare app
|
10
|
+
Add Depending gems to Gemfile
|
11
|
+
|
12
|
+
```
|
13
|
+
group :development do
|
14
|
+
gem 'capistrano', '~> 3.0'
|
15
|
+
gem 'capistrano-rvm', require: false
|
16
|
+
gem 'capistrano-rails', require: false
|
17
|
+
gem 'capistrano-bundler', require: false
|
18
|
+
end
|
19
|
+
gem 'therubyracer', platforms: :ruby
|
20
|
+
gem 'unicorn'
|
21
|
+
gem 'unicorn-rails'
|
22
|
+
|
23
|
+
```
|
24
|
+
Bundle and generate capistrano files
|
25
|
+
|
26
|
+
```
|
27
|
+
bundle
|
28
|
+
bundle exec cap install
|
29
|
+
```
|
30
|
+
|
31
|
+
Remove default capistrano dir (gets replaced by submodule)
|
32
|
+
|
33
|
+
```
|
34
|
+
rm -r lib/capistrano
|
35
|
+
```
|
36
|
+
|
37
|
+
__NOTE:__ remove ```lib/capistrano``` folder from git index if capistrano exists before
|
38
|
+
|
39
|
+
Init submodule and pull code
|
40
|
+
|
41
|
+
```
|
42
|
+
git submodule add git@github.com:hanseventures/deploy-module.git lib/capistrano/
|
43
|
+
cd lib/capistrano && git pull
|
44
|
+
```
|
45
|
+
|
46
|
+
Copy example files
|
47
|
+
|
48
|
+
```
|
49
|
+
cat lib/examples/Capfile > Capfile
|
50
|
+
cat lib/examples/deploy.rb > config/deploy.rb
|
51
|
+
cat lib/examples/stage.rb > config/deploy/production.rb
|
52
|
+
```
|
53
|
+
|
54
|
+
Add custom stages (e.g. 'prestage') and adjust the settings in ```config/deploy.rb```. Use the environment files in ```config/deploy/``` to fit your needs.
|
55
|
+
|
56
|
+
__NOTE:__ run ```cap -T``` to get a list of all possible capistrano commands
|
57
|
+
|
58
|
+
### Prepare server
|
59
|
+
|
60
|
+
Create folder structure (use prestage env for this example. Make sure ``` prestage.rb ``` exists in ```config/environments/``` __and__ ```config/deploy/```)
|
61
|
+
|
62
|
+
```
|
63
|
+
bundle exec cap prestage deploy:check
|
64
|
+
```
|
65
|
+
|
66
|
+
Install config files
|
67
|
+
|
68
|
+
```
|
69
|
+
bundle exec cap prestage install:configs
|
70
|
+
```
|
71
|
+
|
72
|
+
Deploy the app
|
73
|
+
|
74
|
+
```
|
75
|
+
bundle exec cap prestage deploy
|
76
|
+
```
|
77
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= shared_path %>/log/*.log {
|
2
|
+
size 300M
|
3
|
+
missingok
|
4
|
+
rotate 5
|
5
|
+
compress
|
6
|
+
delaycompress
|
7
|
+
notifempty
|
8
|
+
create 755 ubuntu www-data
|
9
|
+
sharedscripts
|
10
|
+
su ubuntu www-data
|
11
|
+
prerotate
|
12
|
+
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
|
13
|
+
run-parts /etc/logrotate.d/httpd-prerotate; \
|
14
|
+
fi; \
|
15
|
+
endscript
|
16
|
+
postrotate
|
17
|
+
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
|
18
|
+
endscript
|
19
|
+
lastaction
|
20
|
+
[ ! -f <%= shared_path %>/system/pids/unicorn.pid ] || kill -USR1 `cat <%= shared_path %>/system/pids/unicorn.pid`
|
21
|
+
endscript
|
22
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
upstream unicorn_upstream {
|
2
|
+
server unix:<%= shared_path %>/system/sockets/unicorn.sock;
|
3
|
+
}
|
4
|
+
|
5
|
+
server {
|
6
|
+
listen 80;
|
7
|
+
server_name <%= fetch(:nginx_server_name) %>;
|
8
|
+
|
9
|
+
client_max_body_size 10M;
|
10
|
+
|
11
|
+
# Logging
|
12
|
+
error_log <%= shared_path %>/log/nginx_error.log;
|
13
|
+
access_log <%= shared_path %>/log/nginx_access.log;
|
14
|
+
|
15
|
+
# Location of our static files
|
16
|
+
root <%= current_path %>/public;
|
17
|
+
|
18
|
+
location @<%= fetch(:application) %> {
|
19
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
20
|
+
proxy_set_header X-Forwarded-Proto http;
|
21
|
+
proxy_set_header Host $http_host;
|
22
|
+
proxy_redirect off;
|
23
|
+
|
24
|
+
proxy_pass http://unicorn_upstream;
|
25
|
+
break;
|
26
|
+
}
|
27
|
+
|
28
|
+
location ~ ^/assets/ {
|
29
|
+
gzip_static on;
|
30
|
+
expires max;
|
31
|
+
|
32
|
+
add_header Cache-Control public;
|
33
|
+
add_header ETag "";
|
34
|
+
|
35
|
+
break;
|
36
|
+
}
|
37
|
+
|
38
|
+
error_page 500 502 503 504 /500.html;
|
39
|
+
location = /500.html {
|
40
|
+
root <%= current_path %>/public;
|
41
|
+
}
|
42
|
+
|
43
|
+
try_files /maintenance.html $uri $uri/index.html $uri.html @<%= fetch(:application) %>;
|
44
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
user www-data;
|
2
|
+
worker_processes 2;
|
3
|
+
|
4
|
+
error_log /var/log/nginx/error.log;
|
5
|
+
pid /run/nginx.pid;
|
6
|
+
|
7
|
+
events {
|
8
|
+
worker_connections 2048;
|
9
|
+
}
|
10
|
+
|
11
|
+
http {
|
12
|
+
include /etc/nginx/mime.types;
|
13
|
+
default_type application/octet-stream;
|
14
|
+
|
15
|
+
access_log /var/log/nginx/access.log;
|
16
|
+
|
17
|
+
sendfile on;
|
18
|
+
tcp_nopush on;
|
19
|
+
tcp_nodelay off;
|
20
|
+
|
21
|
+
keepalive_timeout 30;
|
22
|
+
|
23
|
+
gzip on;
|
24
|
+
gzip_http_version 1.1;
|
25
|
+
gzip_comp_level 6;
|
26
|
+
gzip_proxied any;
|
27
|
+
gzip_types text/plain text/css text/xml text/javascript text/comma-separated-values
|
28
|
+
application/json application/x-javascript application/xml application/xml+rss;
|
29
|
+
|
30
|
+
# see http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
|
31
|
+
gzip_buffers 16 8k;
|
32
|
+
gzip_disable "MSIE [1-6].(?!.*SV1)";
|
33
|
+
|
34
|
+
large_client_header_buffers 10 8k;
|
35
|
+
|
36
|
+
# SSL optimizations & session cache
|
37
|
+
# see http://auxbuss.com/blog/posts/2011_06_28_ssl_session_caching_on_nginx/
|
38
|
+
ssl_session_cache shared:SSL:10m;
|
39
|
+
ssl_session_timeout 10m;
|
40
|
+
# SSL ciphers & protocols
|
41
|
+
# see http://www.hybridforge.com/blog/808/nginx/ssl-ciphers-pci-compliance/
|
42
|
+
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
|
43
|
+
ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;
|
44
|
+
ssl_prefer_server_ciphers on;
|
45
|
+
|
46
|
+
include /etc/nginx/conf.d/*.conf;
|
47
|
+
include /etc/nginx/sites-enabled/*;
|
48
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
shared_path = "<%= shared_path %>"
|
2
|
+
current_path = "<%= current_path %>"
|
3
|
+
|
4
|
+
Bluepill.application("<%= fetch(:application) %>", :log_file => "#{shared_path}/log/bluepill.log") do |app|
|
5
|
+
|
6
|
+
app.working_dir = current_path
|
7
|
+
app.uid = 'ubuntu'
|
8
|
+
app.gid = 'www-data'
|
9
|
+
app.process("unicorn") do |process|
|
10
|
+
process.pid_file = "#{shared_path}/system/pids/unicorn.pid"
|
11
|
+
process.environment = { 'BUNDLE_GEMFILE' => "#{current_path}/Gemfile" }
|
12
|
+
|
13
|
+
process.start_command = "/home/ubuntu/.rvm/wrappers/default/bundle exec unicorn -c #{shared_path}/config/unicorn.rb -E <%= fetch(:environment) %> -D"
|
14
|
+
process.stop_command = "kill -QUIT {{PID}}"
|
15
|
+
process.restart_command = "kill -USR2 {{PID}}"
|
16
|
+
|
17
|
+
process.start_grace_time = 10.seconds
|
18
|
+
process.stop_grace_time = 10.seconds
|
19
|
+
process.restart_grace_time = 10.seconds
|
20
|
+
|
21
|
+
process.monitor_children do |child_process|
|
22
|
+
child_process.stop_command = "kill -9 {{PID}}"
|
23
|
+
|
24
|
+
child_process.checks :mem_usage, :every => 30.seconds, :below => 500.megabytes, :times => [3,4], :fires => :stop
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# unicorn configuration
|
2
|
+
shared_path = "<%= shared_path %>"
|
3
|
+
pid_file = "#{shared_path}/system/pids/unicorn.pid"
|
4
|
+
|
5
|
+
working_directory "<%= current_path %>"
|
6
|
+
worker_processes <%= fetch(:unicorn_workers) %>
|
7
|
+
listen "#{shared_path}/system/sockets/unicorn.sock", :backlog => 64
|
8
|
+
timeout <%= fetch(:unicorn_timeout) %>
|
9
|
+
|
10
|
+
stdout_path "#{shared_path}/log/unicorn.log"
|
11
|
+
stderr_path "#{shared_path}/log/unicorn.log"
|
12
|
+
|
13
|
+
pid "#{shared_path}/system/pids/unicorn.pid"
|
14
|
+
|
15
|
+
preload_app true
|
16
|
+
|
17
|
+
before_fork do |server, worker|
|
18
|
+
old_pid = "#{pid_file}.oldbin"
|
19
|
+
if File.exists?(old_pid) && server.pid != old_pid
|
20
|
+
begin
|
21
|
+
Process.kill("QUIT", File.read(old_pid).to_i)
|
22
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
23
|
+
# someone else did the job for us
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
<% if defined? ActiveRecord::Base %>
|
28
|
+
after_fork do |server,worker|
|
29
|
+
ActiveRecord::Base.establish_connection
|
30
|
+
end
|
31
|
+
<% end %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Load DSL and Setup Up Stages
|
2
|
+
require 'capistrano/setup'
|
3
|
+
|
4
|
+
# Includes default deployment tasks
|
5
|
+
require 'capistrano/deploy'
|
6
|
+
|
7
|
+
# Includes tasks from other gems included in your Gemfile
|
8
|
+
#
|
9
|
+
# For documentation on these, see for example:
|
10
|
+
#
|
11
|
+
# https://github.com/capistrano/rvm
|
12
|
+
# https://github.com/capistrano/rbenv
|
13
|
+
# https://github.com/capistrano/chruby
|
14
|
+
# https://github.com/capistrano/bundler
|
15
|
+
# https://github.com/capistrano/rails
|
16
|
+
#
|
17
|
+
# require 'capistrano/rbenv'
|
18
|
+
# require 'capistrano/chruby'
|
19
|
+
|
20
|
+
require 'capistrano/bundler'
|
21
|
+
|
22
|
+
# Load helper file
|
23
|
+
require "capistrano/helpers.rb"
|
24
|
+
|
25
|
+
# Load custom modules with helper functions
|
26
|
+
%w(aptitude bluepill upstart).each do |m|
|
27
|
+
load File.expand_path("../modules/#{m}.rb", __FILE__)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
|
31
|
+
%w(bluepill logrotate machine nginx rvm unicorn upstart).each do |t|
|
32
|
+
import File.expand_path("../tasks/#{t}.rake", __FILE__)
|
33
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# This file contains default values for all projects
|
2
|
+
set :log_level, :info
|
3
|
+
|
4
|
+
set :user, "ubuntu"
|
5
|
+
set :group, "www-data"
|
6
|
+
|
7
|
+
set :pty, true
|
8
|
+
set :rvm_ruby_version, "ruby-2.2.0"
|
9
|
+
set :rvm_map_bins, %w{gem rake ruby rvmsudo bundle}
|
10
|
+
|
11
|
+
set :deploy_to, "/srv/#{fetch(:application)}"
|
12
|
+
set :linked_dirs, %w{bin log vendor/bundle system/pids system/sockets public/assets}
|
13
|
+
|
14
|
+
set :keep_releases, 3
|
15
|
+
set :ssh_options, { forward_agent: true }
|
16
|
+
|
17
|
+
# bundler config
|
18
|
+
set :bundle_flags, "--deployment"
|
19
|
+
set :bundle_without, %w{development test}.join(' ')
|
20
|
+
set :bundle_exec, "bundle exec"
|
21
|
+
|
22
|
+
namespace :deploy do
|
23
|
+
desc 'Restart application'
|
24
|
+
task :restart do
|
25
|
+
on roles(:app), in: :sequence, wait: 5 do
|
26
|
+
invoke "unicorn:phased_restart"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'Ensure that the app folder is present'
|
31
|
+
task :ensure_folder do
|
32
|
+
on roles(:app) do
|
33
|
+
sudo :mkdir, '-p', fetch(:deploy_to)
|
34
|
+
sudo :chown, "#{fetch(:user)}:#{fetch(:group)}", fetch(:deploy_to)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'Set app folder user:group permissions'
|
39
|
+
task :set_permissions do
|
40
|
+
on roles(:app) do
|
41
|
+
sudo :chown, '-R', "#{fetch(:user)}:#{fetch(:group)}", fetch(:deploy_to)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
after :publishing, :restart
|
46
|
+
before :check, :ensure_folder
|
47
|
+
before :check, :set_permissions
|
48
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Place all custom helper methods used in capistrano tasks here
|
2
|
+
# This file is loaded before the tasks
|
3
|
+
|
4
|
+
def template(from, to)
|
5
|
+
erb = File.read(File.expand_path("../configs/#{from}", __FILE__))
|
6
|
+
compiled = ERB.new(erb).result(binding)
|
7
|
+
io = StringIO.new(compiled)
|
8
|
+
upload! io, to
|
9
|
+
end
|
10
|
+
|
11
|
+
def set_default(name, *args, &block)
|
12
|
+
set(name, *args, &block) if fetch(name).nil?
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute_script(name, params = "")
|
16
|
+
upload! File.expand_path("../scripts/#{name}", __FILE__), "#{name}"
|
17
|
+
execute "chmod 755 #{name}"
|
18
|
+
execute "./#{name} #{params}"
|
19
|
+
execute "rm #{name}"
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Aptitude
|
2
|
+
|
3
|
+
def apt_get_update
|
4
|
+
sudo "apt-get -y update"
|
5
|
+
end
|
6
|
+
|
7
|
+
def apt_get_install(package_name)
|
8
|
+
sudo "apt-get -y install #{package_name}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def apt_get_remove(package_name)
|
12
|
+
sudo "sudo apt-get -y autoremove #{package_name}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def is_package_installed?(package_name)
|
16
|
+
!(/(Installed: \(none\)|Unable to locate package)/.match(capture("apt-cache policy #{package_name}")))
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
namespace :bluepill do
|
2
|
+
|
3
|
+
desc "Installs the application pill"
|
4
|
+
task :setup do
|
5
|
+
on roles(:app) do
|
6
|
+
execute "mkdir -p #{shared_path}/config"
|
7
|
+
template "unicorn.pill.erb", "#{shared_path}/config/unicorn.pill"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Starts bluepill"
|
12
|
+
task :start do
|
13
|
+
on roles(:app) do
|
14
|
+
sudo "start bluepill"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "Stops unicorn"
|
19
|
+
task :stop do
|
20
|
+
on roles(:app) do
|
21
|
+
sudo "stop bluepill"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
namespace :logrotate do
|
2
|
+
|
3
|
+
desc "Install the logrotate config"
|
4
|
+
task :setup do
|
5
|
+
on roles(:app) do
|
6
|
+
template "logrotate.erb", "/tmp/logrotate-#{fetch(:application)}"
|
7
|
+
sudo "mv /tmp/logrotate-#{fetch(:application)} /etc/logrotate.d/#{fetch(:application)}"
|
8
|
+
sudo "chown root:root /etc/logrotate.d/#{fetch(:application)}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
namespace :machine do
|
2
|
+
include Aptitude
|
3
|
+
|
4
|
+
desc "Sets up a blank Ubuntu to run our Rails-setup"
|
5
|
+
task :init do
|
6
|
+
on roles(:app) do
|
7
|
+
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
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "Install configs"
|
26
|
+
task :setup do
|
27
|
+
invoke "nginx:setup"
|
28
|
+
invoke "unicorn:setup"
|
29
|
+
invoke "upstart:setup"
|
30
|
+
invoke "logrotate:setup"
|
31
|
+
invoke "bluepill:setup"
|
32
|
+
end
|
33
|
+
before :setup, "deploy:ensure_folder"
|
34
|
+
|
35
|
+
namespace :install do
|
36
|
+
task :set_defaults do
|
37
|
+
on roles(:app) do
|
38
|
+
execute_script("set_defaults.sh", fetch(:rvm_ruby_version))
|
39
|
+
warn "--------------------------------------------------------------------------------------"
|
40
|
+
warn "Run 'dpkg-reconfigure -plow unattended-upgrades' to enable automatic security updates!"
|
41
|
+
warn "--------------------------------------------------------------------------------------"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
task :language_pack_de do
|
46
|
+
on roles(:app) do
|
47
|
+
apt_get_install("language-pack-de") unless is_package_installed?("language-pack-de")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
task :ruby do
|
52
|
+
on roles(:app) do
|
53
|
+
execute :rvm, :install, fetch(:rvm_ruby_version)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
before :ruby, 'rvm:hook'
|
57
|
+
|
58
|
+
task :bundler do
|
59
|
+
on roles(:app) do
|
60
|
+
execute :rvmsudo, :gem, :install, :bundler
|
61
|
+
end
|
62
|
+
end
|
63
|
+
before :bundler, 'rvm:hook'
|
64
|
+
|
65
|
+
task :bluepill do
|
66
|
+
on roles(:app) do
|
67
|
+
execute :rvmsudo, :gem, :install, :bluepill
|
68
|
+
sudo 'mkdir -p /var/run/bluepill'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
before :bluepill, 'rvm:hook'
|
72
|
+
|
73
|
+
task :rvm do
|
74
|
+
on roles(:app) do
|
75
|
+
execute_script("install_rvm.sh")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
task :mysql_dev do
|
80
|
+
on roles(:app) do
|
81
|
+
apt_get_install("libmysqlclient-dev") unless is_package_installed?("libmysqlclient-dev")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
task :htop do
|
86
|
+
on roles(:app) do
|
87
|
+
apt_get_install("htop") unless is_package_installed?("htop")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
task :nodejs do
|
92
|
+
on roles(:app) do
|
93
|
+
apt_get_install("nodejs") unless is_package_installed?("nodejs")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
task :ntp do
|
98
|
+
on roles(:app) do
|
99
|
+
apt_get_install("ntp") unless is_package_installed?("ntp")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
task :git do
|
104
|
+
on roles(:app) do
|
105
|
+
apt_get_install("git") unless is_package_installed?("git")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
task :nginx do
|
110
|
+
on roles(:app) do
|
111
|
+
apt_get_install("nginx") unless is_package_installed?("nginx")
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
task :fail2ban do
|
116
|
+
on roles(:app) do
|
117
|
+
apt_get_install("fail2ban") unless is_package_installed?("fail2ban")
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
task :imagemagick do
|
122
|
+
on roles(:app) do
|
123
|
+
unless is_package_installed?("imagemagick")
|
124
|
+
apt_get_install("imagemagick")
|
125
|
+
apt_get_install("libmagickcore-dev")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
task :unattended_upgrades do
|
131
|
+
on roles(:app) do
|
132
|
+
unless is_package_installed?("unattended-upgrades")
|
133
|
+
apt_get_install("unattended-upgrades")
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
task :update_rvm_key do
|
139
|
+
on roles(:app) do
|
140
|
+
execute :gpg, "--keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
before "machine:install:rvm", "machine:install:update_rvm_key"
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
set_default(:nginx_server_name, "*.*")
|
2
|
+
|
3
|
+
namespace :nginx do
|
4
|
+
|
5
|
+
desc "Installs the nginx configs"
|
6
|
+
task :setup do
|
7
|
+
on roles(:web) do
|
8
|
+
template "nginx_base.conf.erb", "/tmp/nginx_conf"
|
9
|
+
sudo "mv /tmp/nginx_conf /etc/nginx/nginx.conf"
|
10
|
+
template "nginx_app.conf.erb", "/tmp/#{fetch(:application)}_conf"
|
11
|
+
sudo "mv /tmp/#{fetch(:application)}_conf /etc/nginx/sites-available/#{fetch(:application)}.conf"
|
12
|
+
|
13
|
+
if test("[ -f /etc/nginx/sites-enabled/default ]")
|
14
|
+
sudo "rm /etc/nginx/sites-enabled/default"
|
15
|
+
end
|
16
|
+
|
17
|
+
invoke "nginx:enable_site"
|
18
|
+
invoke "nginx:reload"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Enable the app page for nginx"
|
23
|
+
task :enable_site do
|
24
|
+
on roles(:web) do
|
25
|
+
unless test("[ -f /etc/nginx/sites-enabled/#{fetch(:application)}.conf ]")
|
26
|
+
sudo "ln -sf /etc/nginx/sites-available/#{fetch(:application)}.conf /etc/nginx/sites-enabled/#{fetch(:application)}.conf"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
desc "Reload nginx"
|
32
|
+
task :reload do
|
33
|
+
on roles(:web) do
|
34
|
+
sudo "service nginx reload"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Restart nginx"
|
39
|
+
task :restart do
|
40
|
+
on roles(:web) do
|
41
|
+
sudo "service nginx restart"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
desc "Stop nginx"
|
46
|
+
task :stop do
|
47
|
+
on roles(:web) do
|
48
|
+
sudo "service nginx stop"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Start nginx"
|
53
|
+
task :start do
|
54
|
+
on roles(:web) do
|
55
|
+
sudo "service nginx start"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "Installs the ssl certificates"
|
60
|
+
task :ssl do
|
61
|
+
on roles(:web) do
|
62
|
+
sudo "mkdir -p /etc/nginx/ssl"
|
63
|
+
sudo "chmod 770 /etc/nginx/ssl"
|
64
|
+
sudo "chown #{fetch(:user)}:#{fetch(:group)} /etc/nginx/ssl"
|
65
|
+
|
66
|
+
%w(crt key).each do |type|
|
67
|
+
upload! "vendor/certs/#{fetch(:application)}.de.#{type}", "/etc/nginx/ssl/#{fetch(:application)}.de.#{type}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
after "nginx:setup", "nginx:reload"
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
RVM_SYSTEM_PATH = "/usr/local/rvm"
|
2
|
+
RVM_USER_PATH = "~/.rvm"
|
3
|
+
|
4
|
+
namespace :rvm do
|
5
|
+
desc "Prints the RVM and Ruby version on the target host"
|
6
|
+
task :check do
|
7
|
+
on roles(fetch(:rvm_roles, :all)) do
|
8
|
+
if fetch(:log_level) == :debug
|
9
|
+
puts capture(:rvm, "version")
|
10
|
+
puts capture(:rvm, "current")
|
11
|
+
puts capture(:ruby, "--version")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
before :check, :hook
|
17
|
+
|
18
|
+
task :hook do
|
19
|
+
on roles(fetch(:rvm_roles, :all)) do
|
20
|
+
rvm_path = fetch(:rvm_custom_path)
|
21
|
+
rvm_path ||= case fetch(:rvm_type)
|
22
|
+
when :auto
|
23
|
+
if test("[ -d #{RVM_USER_PATH} ]")
|
24
|
+
RVM_USER_PATH
|
25
|
+
elsif test("[ -d #{RVM_SYSTEM_PATH} ]")
|
26
|
+
RVM_SYSTEM_PATH
|
27
|
+
else
|
28
|
+
RVM_USER_PATH
|
29
|
+
end
|
30
|
+
when :system, :mixed
|
31
|
+
RVM_SYSTEM_PATH
|
32
|
+
else # :user
|
33
|
+
RVM_USER_PATH
|
34
|
+
end
|
35
|
+
|
36
|
+
set :rvm_path, rvm_path
|
37
|
+
end
|
38
|
+
|
39
|
+
SSHKit.config.command_map[:rvm] = "#{fetch(:rvm_path)}/bin/rvm"
|
40
|
+
|
41
|
+
rvm_prefix = "#{fetch(:rvm_path)}/bin/rvm #{fetch(:rvm_ruby_version)} do"
|
42
|
+
fetch(:rvm_map_bins).each do |command|
|
43
|
+
SSHKit.config.command_map.prefix[command.to_sym].unshift(rvm_prefix)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
before :deploy, 'rvm:hook'
|
49
|
+
|
50
|
+
namespace :load do
|
51
|
+
task :defaults do
|
52
|
+
set :rvm_map_bins, %w{gem rake ruby bundle}
|
53
|
+
set :rvm_type, :auto
|
54
|
+
set :rvm_ruby_version, "default"
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
set_default(:unicorn_workers, "5")
|
2
|
+
set_default(:unicorn_timeout, "30")
|
3
|
+
set_default(:unicorn_worker_grace_time, "60")
|
4
|
+
|
5
|
+
namespace :unicorn do
|
6
|
+
include Bluepill
|
7
|
+
|
8
|
+
desc "Installs the unicorn config"
|
9
|
+
task :setup do
|
10
|
+
on roles(:app) do
|
11
|
+
execute "mkdir -p #{shared_path}/config"
|
12
|
+
template "unicorn.rb.erb", "#{shared_path}/config/unicorn.rb"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
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
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
namespace :upstart do
|
2
|
+
include Upstart
|
3
|
+
|
4
|
+
desc "Install the upstart config"
|
5
|
+
task :setup do
|
6
|
+
on roles(:app) do
|
7
|
+
template "upstart.conf.erb", "/tmp/bluepill.conf"
|
8
|
+
sudo "mv /tmp/bluepill.conf /etc/init/"
|
9
|
+
sudo "chown root:root /etc/init/bluepill.conf"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
task :start do
|
14
|
+
on roles(:app) do
|
15
|
+
template "upstart.conf.erb", "/tmp/bluepill.conf"
|
16
|
+
sudo "mv /tmp/bluepill.conf /etc/init/"
|
17
|
+
sudo "chown root:root /etc/init/bluepill.conf"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'readline'
|
2
|
+
|
3
|
+
namespace :deploy_mate do
|
4
|
+
|
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..."
|
22
|
+
|
23
|
+
config_template("Capfile.erb", "Capfile")
|
24
|
+
sleep 1
|
25
|
+
config_template("deploy.rb.erb", "config/deploy.rb")
|
26
|
+
sleep 1
|
27
|
+
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!"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def config_template(from, to)
|
37
|
+
erb = File.read(File.expand_path("../templates/#{from}", __FILE__))
|
38
|
+
compiled = ERB.new(erb).result(binding)
|
39
|
+
File.open(to, "wb") { |f| f.write(compiled) }
|
40
|
+
puts "'#{to}'"
|
41
|
+
end
|
42
|
+
|
43
|
+
def rails_present?
|
44
|
+
defined? Rails
|
45
|
+
end
|
46
|
+
|
47
|
+
def guess_app_name
|
48
|
+
Dir.pwd.split(File::SEPARATOR).last
|
49
|
+
end
|
50
|
+
|
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"))
|
55
|
+
end
|
56
|
+
(answer == "yes")
|
57
|
+
end
|
58
|
+
|
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
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# NOTE: copy this file to /config/deploy.rb
|
2
|
+
set :application, '<%= @app_name %>'
|
3
|
+
|
4
|
+
require "capistrano/deploy_mate_defaults"
|
5
|
+
|
6
|
+
# Set app specific vars
|
7
|
+
set :stages, %w(<%= @stage_name %>)
|
8
|
+
set :default_stage, '<%= @stage_name %>'
|
9
|
+
set :repo_url, '<%= @repo_url %>'
|
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: deploy_mate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tim Adler
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-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.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: capistrano-bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: capistrano-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: This is how we deploy around here.
|
70
|
+
email: tim.adler (at) hanseventures (dot) com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- ".gitignore"
|
76
|
+
- ".rubocop.yml"
|
77
|
+
- ".ruby-gemset"
|
78
|
+
- ".ruby-version"
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- deploy-mate.gemspec
|
84
|
+
- lib/capistrano/README.md
|
85
|
+
- lib/capistrano/configs/logrotate.erb
|
86
|
+
- lib/capistrano/configs/nginx_app.conf.erb
|
87
|
+
- lib/capistrano/configs/nginx_base.conf.erb
|
88
|
+
- lib/capistrano/configs/unicorn.pill.erb
|
89
|
+
- lib/capistrano/configs/unicorn.rb.erb
|
90
|
+
- lib/capistrano/configs/upstart.conf.erb
|
91
|
+
- lib/capistrano/deploy_mate_capfile.rb
|
92
|
+
- lib/capistrano/deploy_mate_defaults.rb
|
93
|
+
- lib/capistrano/helpers.rb
|
94
|
+
- lib/capistrano/modules/aptitude.rb
|
95
|
+
- lib/capistrano/modules/bluepill.rb
|
96
|
+
- lib/capistrano/modules/upstart.rb
|
97
|
+
- lib/capistrano/scripts/install_ruby.sh
|
98
|
+
- lib/capistrano/scripts/install_rvm.sh
|
99
|
+
- lib/capistrano/scripts/set_defaults.sh
|
100
|
+
- lib/capistrano/tasks/bluepill.rake
|
101
|
+
- lib/capistrano/tasks/logrotate.rake
|
102
|
+
- lib/capistrano/tasks/machine.rake
|
103
|
+
- lib/capistrano/tasks/nginx.rake
|
104
|
+
- lib/capistrano/tasks/rvm.rake
|
105
|
+
- lib/capistrano/tasks/seeds.rake
|
106
|
+
- lib/capistrano/tasks/unicorn.rake
|
107
|
+
- lib/capistrano/tasks/upstart.rake
|
108
|
+
- lib/deploy_mate/tasks.rake
|
109
|
+
- lib/deploy_mate/templates/Capfile.erb
|
110
|
+
- lib/deploy_mate/templates/deploy.rb.erb
|
111
|
+
- lib/deploy_mate/templates/deploy/stage.rb.erb
|
112
|
+
homepage: https://github.com/hanseventures/deploy-mate
|
113
|
+
licenses:
|
114
|
+
- MIT
|
115
|
+
metadata: {}
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 2.4.6
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: This is how we deploy around here.
|
136
|
+
test_files: []
|