prun-ops 0.1.10 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30e419ead8e321fe23a896a7cd149daefda36a8a
4
- data.tar.gz: 2a83455e4ef99be353a03246097f8ca3419d0bfc
3
+ metadata.gz: 1fa149a50805a9dd853c00afe0bc120200091e9c
4
+ data.tar.gz: 76fb64a75dcdc544bd1e3ad3e2f4b5607737ed60
5
5
  SHA512:
6
- metadata.gz: 40d0008a6afdc8c606c28f63519f1b8aee0784f178bac1f8ae84368c0c97fcc9dcb850489a07a3f4929195c54e6cacccc07c432f2f246a4408602bfb130a56fc
7
- data.tar.gz: 43fa8b3dd27f16acfe039804609eae8e19ff8b63794bce76e3d500ef8bb7a08bcdc5ab927333ef4cfcccfc139c688595c3033b689f0ced0892887c0b35ba4f8d
6
+ metadata.gz: 8a8236ff360b1713e7c9543b759f08f913a19dd1ee34fe04e3680a560109b02c19f93619e3e9d8308cc8f94e656d468cb74c04cf6f1862454f64925944eeb05b
7
+ data.tar.gz: 640239f6a2d0271af6ec2b7e51da9f466f6b117584040e082cbb6c6ce139ecc19b044d6a703ec0f6011cd122821d3407e375704bee14c54a4d853696a83bf1ad
data/README.md CHANGED
@@ -2,16 +2,12 @@
2
2
 
3
3
  Covers all Deployment and maintainance Operations in a Ruby on Rails Application server:
4
4
 
5
- 1. DEPLOYMENT: Capistrano tasks to depoly your rails Apps.
5
+ 1. CONFIGURATION: Capistrano tasks to configure servers.
6
+ 1. DEPLOYMENT: Capistrano tasks to deploy your rails Apps.
6
7
  1. DIAGNOSIS: Capistrano diagnosis tools to guet your Apps status on real time.
7
8
  1. RELEASE: Rake tasks to manage and tag version number in your Apps (X.Y.Z).
8
9
  1. BACKUP: Backup policy for database and files in your Apps, using git as storage.
9
10
 
10
- Based on:
11
-
12
- * [PRUN Docker image](https://registry.hub.docker.com/u/jlebrijo/prun/).
13
- * [PRUN Chef recipe](https://github.com/jlebrijo/prun-cfg).
14
-
15
11
  ## Installation
16
12
 
17
13
  Add this line to your application's Gemfile:
@@ -58,9 +54,32 @@ server "example.com", user: 'root', roles: %w{web app db}, port: 2222
58
54
 
59
55
  Note: Remember change this line in production.rb file: `config.assets.compile = true`
60
56
 
57
+ ### Configuration
58
+
59
+ Main task is `cap [stg] config`
60
+
61
+ Secondary tasks:
62
+
63
+ * `cap [stg] ubuntu:install` initial ubuntu dependencies
64
+ * `cap [stg] ruby:install` install ruby on .ruby-version version
65
+ * `cap [stg] rails:prepare` install rails dependencies
66
+ * `cap [stg] postgres:install` install and configure postgres
67
+ * `cap [stg] postgres:[start|stop|restart]` start/stop postgres
68
+ * `cap [stg] nginx:install` install and configure nginx
69
+ * `cap [stg] nginx:[start|stop|restart]` start/stop nginx
70
+ * `cap [stg] nodejs:install` install node
71
+ * `cap [stg] app:prepare` create init scripts
72
+ * `cap [stg] app:db_prepare` database first load
73
+ * `cap [stg] nginx:cert` create SSL certificates with [Let's Encrypt](https://letsencrypt.org/)
74
+ * `cap [stg] nginx:ssl` configure nginx with SSL certificates
75
+
61
76
  ### Deployment
62
77
 
63
- * `cap [stg] deploy:cold` first time deployment with schema:load and seeds (replacing db:migrate)
78
+ Main task is `cap [stg] deploy`
79
+
80
+ Secondary tasks:
81
+
82
+ * `cap [stg] deploy:upload_linked_files` uploads configuration files defined as linked_files
64
83
  * `cap [stg] deploy` deploy your app as usual
65
84
  * `cap [stg] deploy:restart` restart thin server of this application
66
85
  * `cap [stg] deploy:stop` stop thin server
@@ -129,8 +148,6 @@ Some capistrano commands useful to connect to server and help with the problem s
129
148
 
130
149
  ### Monitoring
131
150
 
132
- Recommend to configure your Rails server with [PRUN Chef recipe](https://github.com/jlebrijo/prun-cfg).
133
-
134
151
  At this moment we are implementing [NewRelic](http://newrelic.com/) monitoring, including as dependency ['newrelic_rpm'](https://github.com/newrelic/rpm) gem. To configure yourproject you just need to create an account at [NewRelic](http://newrelic.com/) and follow the instructions (creating a 'config/newrelic.yml file with your license_key).
135
152
 
136
153
  ### TODO: Configuration management
@@ -221,4 +238,8 @@ require 'capistrano/prun-ops'
221
238
 
222
239
  ### v0.1.6
223
240
 
224
- * Add `cap stage rake[db:create]` to execute a rake task in remote server.
241
+ * Add `cap stage rake[db:create]` to execute a rake task in remote server.
242
+
243
+ ### v0.2.0
244
+
245
+ * Configuration tasks: Add `cap stage config` and other tasks.
@@ -16,23 +16,19 @@ namespace :deploy do
16
16
  end
17
17
  end
18
18
 
19
- after :publishing, :restart
20
-
21
- desc 'Deploy app for first time'
22
- task :cold do
23
- invoke 'deploy:starting'
24
- invoke 'deploy:started'
25
- invoke 'deploy:updating'
26
- invoke 'bundler:install'
27
- invoke 'deploy:db_reset' # This replaces deploy:migrations
28
- invoke 'deploy:compile_assets'
29
- invoke 'deploy:normalize_assets'
30
- invoke 'deploy:publishing'
31
- invoke 'deploy:published'
32
- invoke 'deploy:finishing'
33
- invoke 'deploy:finished'
19
+ task :upload_linked_files do
20
+ on roles :app do
21
+ shared = "/var/www/#{fetch :application}/shared"
22
+ fetch(:linked_files).each do |f|
23
+ execute "mkdir -p #{shared}/#{File.dirname f}"
24
+ upload! f, "#{shared}/#{f}"
25
+ end
26
+ end
34
27
  end
35
28
 
29
+ after :publishing, :upload_linked_files
30
+ after :publishing, :restart
31
+
36
32
  desc 'Create database'
37
33
  task :db_create do
38
34
  on roles(:db) do
@@ -0,0 +1,32 @@
1
+ namespace :app do
2
+
3
+ task :prepare do
4
+ on roles :web do
5
+ template 'app_init.sh', "/etc/init.d/#{fetch :application}"
6
+ execute <<-EOBLOCK
7
+ sudo thin config -C /etc/thin/#{fetch :application}.yml -c /var/www/#{fetch :application}/current -l log/thin.log -e #{fetch :stage} --servers 1 --port 3000
8
+ sudo chmod a+x /etc/init.d/#{fetch :application}
9
+ sudo update-rc.d #{fetch :application} defaults
10
+ sudo systemctl daemon-reload
11
+ EOBLOCK
12
+ end
13
+ end
14
+
15
+ task :db_prepare do
16
+ invoke 'deploy:starting'
17
+ invoke 'deploy:started'
18
+ invoke 'deploy:updating'
19
+ invoke 'bundler:install'
20
+ if Rails.application.config.respond_to? :backup_repo
21
+ invoke 'backup:restore'
22
+ else
23
+ invoke 'deploy:db_create'
24
+ invoke 'deploy:migrate'
25
+ invoke 'deploy:db_seed'
26
+ end
27
+ end
28
+
29
+ task :test do
30
+ end
31
+
32
+ end
@@ -0,0 +1,11 @@
1
+ task :config do
2
+ invoke 'ubuntu:install'
3
+ invoke 'ruby:install'
4
+ invoke 'rails:prepare'
5
+ invoke 'postgres:install'
6
+ invoke 'nginx:install'
7
+ invoke 'nodejs:install'
8
+ invoke 'app:prepare'
9
+ invoke 'deploy:upload_linked_files'
10
+ invoke 'app:db_prepare'
11
+ end
@@ -0,0 +1,49 @@
1
+ namespace :mysql do
2
+ task :install do
3
+ on roles :db do
4
+ not_if 'which mysql' do
5
+ execute <<-EOBLOCK
6
+ debconf-set-selections <<< 'mysql-server mysql-server/root_password password #{fetch :my_pass}'
7
+ debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password #{fetch :my_pass}'
8
+ apt-get install -y mysql-server mysql-client libmysqlclient-dev
9
+ EOBLOCK
10
+ end
11
+
12
+ not_if "mysql --user='root' --password='#{fetch :my_pass}' --execute='show databases;' | grep #{fetch :application}" do
13
+ execute <<-EOBLOCK
14
+ mysql --user='root' --password='#{fetch :my_pass}' --execute='create database #{fetch :application};'
15
+ mysql --user='root' --password='#{fetch :my_pass}' --execute="grant all on #{fetch :application}.* to #{fetch :my_user}@'%' identified by '#{fetch :my_pass}';"
16
+ EOBLOCK
17
+ end
18
+
19
+ invoke 'mysql:restart'
20
+ end
21
+ end
22
+
23
+
24
+ task :test do
25
+ on roles :db do
26
+ not_if "echo ''" do
27
+ p 'executing ......'
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+ %w(start stop restart).each do |action|
34
+ desc "MySQL"
35
+ task :"#{action}" do
36
+ on roles(:app) do
37
+ execute "sudo service mysql #{action}"
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def not_if(command)
44
+ begin
45
+ yield unless execute command
46
+ rescue Exception
47
+ yield
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ namespace :nginx do
2
+ task :install do
3
+ on roles :web do
4
+ execute 'sudo apt-get install -y nginx'
5
+ execute 'sed -i "s/# server_names_hash_bucket_size 64/server_names_hash_bucket_size 64/" /etc/nginx/nginx.conf'
6
+ template 'vhost.conf', '/etc/nginx/conf.d/vhost.conf'
7
+
8
+ invoke 'nginx:restart'
9
+ end
10
+ end
11
+
12
+ task :cert do
13
+ on roles(:web) do |host|
14
+ run_locally do
15
+ run_in host, <<-EOBLOCK
16
+ cd /usr/local/sbin
17
+ sudo wget https://dl.eff.org/certbot-auto
18
+ sudo chmod a+x /usr/local/sbin/certbot-auto
19
+ mkdir /var/www/#{fetch :application}/current/public/.well-known
20
+ sudo certbot-auto certonly -a webroot --webroot-path=/var/www/#{fetch :application}/current/public -d #{host.hostname}
21
+ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
22
+ EOBLOCK
23
+ end
24
+ end
25
+ end
26
+
27
+ task :ssl do
28
+ on roles(:web) do |host|
29
+ template 'vhost_ssl.conf', '/etc/nginx/conf.d/vhost.conf'
30
+ invoke 'nginx:restart'
31
+ end
32
+ end
33
+
34
+ %w(start stop restart status).each do |action|
35
+ desc "Nginx"
36
+ task :"#{action}" do
37
+ on roles(:app) do
38
+ execute "sudo service nginx #{action}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ namespace :nodejs do
2
+ task :install do
3
+ on roles :app do
4
+ execute 'curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash'
5
+ #sed -i "s/[ -z "$PS1" ] && return/# [ -z "$PS1" ] && return/g" /root/.bashrc
6
+ execute <<-EOBLOCK
7
+ export NVM_DIR="$HOME/.nvm"
8
+ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
9
+ nvm install node
10
+ npm install -g bower
11
+ EOBLOCK
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,42 @@
1
+ namespace :postgres do
2
+ task :install do
3
+ stage = fetch(:stage).to_s
4
+ config = Rails.configuration.database_configuration
5
+ version = config[stage]["version"]
6
+ username = config[stage]["username"]
7
+ password = config[stage]["password"]
8
+
9
+ on roles :db do
10
+ execute <<-EOBLOCK
11
+ sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
12
+ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
13
+ sudo apt-get update
14
+ export LANGUAGE=en_US.UTF-8
15
+ sudo apt-get -y install postgresql-#{version} libpq-dev
16
+ EOBLOCK
17
+
18
+ execute <<-EOBLOCK
19
+ sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = 'localhost'/" /etc/postgresql/#{version}/main/postgresql.conf
20
+ sudo sed -i "s/local all all peer/local all all md5/" /etc/postgresql/#{version}/main/pg_hba.conf
21
+ sudo sed -i "s/ssl = true/ssl = false/" /etc/postgresql/#{version}/main/postgresql.conf
22
+ sudo service postgresql restart
23
+ EOBLOCK
24
+
25
+ ## Rewrite postgres password:
26
+ execute <<-EOBLOCK
27
+ sudo -u postgres psql -c "ALTER USER #{username} WITH PASSWORD '#{password}';"
28
+ EOBLOCK
29
+
30
+ invoke 'postgres:restart'
31
+ end
32
+ end
33
+
34
+ %w(start stop restart).each do |action|
35
+ desc "PostgreSQL"
36
+ task :"#{action}" do
37
+ on roles(:app) do
38
+ execute "sudo service postgresql #{action}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,15 @@
1
+ namespace :rails do
2
+ task :prepare do
3
+ on roles :app do
4
+ execute <<-EOBLOCK
5
+ echo gem: --no-ri --no-rdoc > /root/.gemrc
6
+ gem install bundler
7
+ gem install rack -v 1.6.0
8
+ gem install thin -v 1.6.3
9
+ thin install
10
+ /usr/sbin/update-rc.d -f thin defaults
11
+ EOBLOCK
12
+ execute 'apt-get install -y imagemagick libmagickwand-dev'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ namespace :ruby do
2
+ task :install do
3
+ ruby_version = File.read('.ruby-version').strip[/\Aruby-(.*)\.\d\Z/,1]
4
+ on roles :app do
5
+ execute <<-EOBLOCK
6
+ sudo apt-add-repository -y ppa:brightbox/ruby-ng
7
+ apt-get update
8
+ sudo apt-get install -y ruby#{ruby_version} ruby#{ruby_version}-dev
9
+ EOBLOCK
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ #!/bin/sh
2
+ # Starts and stops $APP
3
+ # Adding a Service to Default runlevels
4
+ # update-rc.d $APP defaults
5
+ #
6
+
7
+ APP=<%= fetch :application%>
8
+ ENV=<%= fetch :stage%>
9
+
10
+ case "$1" in
11
+ start)
12
+ cd /var/www/$APP/current && RAILS_ENV=$ENV bundle exec thin start -C /etc/thin/$APP.yml
13
+ ;;
14
+
15
+ stop)
16
+ cd /var/www/$APP/current && RAILS_ENV=$ENV bundle exec thin stop -C /etc/thin/$APP.yml
17
+ ;;
18
+
19
+ restart)
20
+ $0 stop
21
+ $0 start
22
+ ;;
23
+
24
+ *)
25
+ echo "Usage: $0 {start|stop|restart|status}"
26
+ exit 1
27
+ esac
@@ -0,0 +1,26 @@
1
+ upstream <%= fetch :application%> {
2
+ server localhost:3000;
3
+ }
4
+
5
+
6
+ server {
7
+ server_name <%= host.hostname %>;
8
+ root /var/www/<%= fetch :application%>/current/public;
9
+
10
+ location @<%= fetch :application%> {
11
+ proxy_pass http://<%= fetch :application%>;
12
+ proxy_set_header Host $host;
13
+ proxy_set_header X-Real-IP $remote_addr;
14
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
15
+ proxy_read_timeout 90;
16
+ }
17
+ location / {
18
+ try_files $uri @<%= fetch :application%> ;
19
+ index index.html index.htm index.php;
20
+ }
21
+ location /status {
22
+ stub_status on;
23
+ allow all;
24
+ }
25
+
26
+ }
@@ -0,0 +1,47 @@
1
+ upstream <%= fetch :application%> {
2
+ server localhost:3000;
3
+ }
4
+
5
+
6
+ server {
7
+ listen 443 ssl;
8
+ server_name <%= host.hostname %>;
9
+ root /var/www/<%= fetch :application%>/current/public;
10
+
11
+ ssl_certificate /etc/letsencrypt/live/<%= host.hostname %>/fullchain.pem;
12
+ ssl_certificate_key /etc/letsencrypt/live/<%= host.hostname %>/privkey.pem;
13
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
14
+ ssl_prefer_server_ciphers on;
15
+ ssl_dhparam /etc/ssl/certs/dhparam.pem;
16
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
17
+ ssl_session_timeout 1d;
18
+ ssl_session_cache shared:SSL:50m;
19
+ ssl_stapling on;
20
+ ssl_stapling_verify on;
21
+ add_header Strict-Transport-Security max-age=15768000;
22
+
23
+ location @<%= fetch :application%> {
24
+ proxy_pass http://<%= fetch :application%>;
25
+ proxy_set_header Host $host;
26
+ proxy_set_header X-Real-IP $remote_addr;
27
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
28
+ proxy_read_timeout 90;
29
+ }
30
+ location / {
31
+ try_files $uri @<%= fetch :application%> ;
32
+ index index.html index.htm index.php;
33
+ }
34
+ location /status {
35
+ stub_status on;
36
+ allow all;
37
+ }
38
+ location ~ /.well-known {
39
+ allow all;
40
+ }
41
+ }
42
+
43
+ server {
44
+ listen 80;
45
+ server_name <%= host.hostname %>;
46
+ return 301 https://$host$request_uri;
47
+ }
@@ -0,0 +1,15 @@
1
+ namespace :ubuntu do
2
+ task :install do
3
+ on roles :app do
4
+ execute 'apt-get -y update'
5
+ # Pre-requirements
6
+ execute <<-EOBLOCK
7
+ apt-get install -y git build-essential libsqlite3-dev libssl-dev gawk g++ vim
8
+ apt-get install -y libreadline6-dev libyaml-dev sqlite3 autoconf libgdbm-dev
9
+ apt-get install -y libcurl3 libcurl3-gnutls libcurl4-openssl-dev
10
+ apt-get install -y libncurses5-dev automake libtool bison pkg-config libffi-dev
11
+ apt-get install -y software-properties-common
12
+ EOBLOCK
13
+ end
14
+ end
15
+ end
@@ -1 +1,10 @@
1
- Dir.glob("#{File.dirname(__FILE__)}/*.rake").each { |r| load r }
1
+ Dir.glob("#{File.dirname(__FILE__)}/*.rake").each { |r| load r }
2
+ Dir.glob("#{File.dirname(__FILE__)}/config/*.rake").each { |r| load r }
3
+
4
+ ## Common libraries
5
+ def template(template_name, target_path)
6
+ file = File.read("#{File.dirname(__FILE__)}/config/templates/#{template_name}.erb")
7
+ template = ERB.new file, nil, "%"
8
+ rendered = template.result(binding)
9
+ upload! StringIO.new(rendered), target_path
10
+ end
@@ -1,3 +1,3 @@
1
1
  module PrunOps
2
- VERSION = "0.1.10"
2
+ VERSION = "0.2.0"
3
3
  end
data/prun-ops.gemspec CHANGED
@@ -20,7 +20,8 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.6"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
 
23
- spec.add_runtime_dependency "capistrano-rails"
24
- spec.add_runtime_dependency "thin"
25
- spec.add_runtime_dependency "newrelic_rpm"
23
+ spec.add_runtime_dependency 'capistrano', '~> 3.8'
24
+ spec.add_runtime_dependency 'capistrano-rails'
25
+ spec.add_runtime_dependency 'thin'
26
+ spec.add_runtime_dependency 'newrelic_rpm'
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prun-ops
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Lebrijo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-05 00:00:00.000000000 Z
11
+ date: 2018-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capistrano
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.8'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.8'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: capistrano-rails
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -96,6 +110,18 @@ files:
96
110
  - Rakefile
97
111
  - lib/capistrano/all.rake
98
112
  - lib/capistrano/backup.rake
113
+ - lib/capistrano/config/app.rake
114
+ - lib/capistrano/config/config.rake
115
+ - lib/capistrano/config/mysql.rake
116
+ - lib/capistrano/config/nginx.rake
117
+ - lib/capistrano/config/nodejs.rake
118
+ - lib/capistrano/config/postgres.rake
119
+ - lib/capistrano/config/rails.rake
120
+ - lib/capistrano/config/ruby.rake
121
+ - lib/capistrano/config/templates/app_init.sh.erb
122
+ - lib/capistrano/config/templates/vhost.conf.erb
123
+ - lib/capistrano/config/templates/vhost_ssl.conf.erb
124
+ - lib/capistrano/config/ubuntu.rake
99
125
  - lib/capistrano/diagnosis.rake
100
126
  - lib/capistrano/git.rake
101
127
  - lib/capistrano/prun-ops.rb