taperole 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.tape/ansible.cfg +4 -0
  4. data/CONTRIBUTING.md +22 -0
  5. data/README.md +100 -0
  6. data/Vagrantfile +26 -0
  7. data/ansible.cfg +2 -0
  8. data/bin/tape +81 -0
  9. data/id_rsa_sb_basebox +27 -0
  10. data/lib/tape/ansible_runner.rb +84 -0
  11. data/lib/tape/installer.rb +154 -0
  12. data/lib/tape/qemu_provisioner.rb +167 -0
  13. data/lib/tape/vagrant_provisioner.rb +42 -0
  14. data/lib/tape.rb +76 -0
  15. data/requirements.yml +16 -0
  16. data/roles/after_deploy/tasks/main.yml +1 -0
  17. data/roles/backend_checkout/tasks/main.yml +21 -0
  18. data/roles/backend_config/defaults/main.yml +1 -0
  19. data/roles/backend_config/tasks/main.yml +49 -0
  20. data/roles/backend_config/templates/database.yml.j2 +8 -0
  21. data/roles/backend_config/templates/env_config.yml.j2 +2 -0
  22. data/roles/backend_install_essentials/meta/main.yml +5 -0
  23. data/roles/backend_install_essentials/tasks/main.yml +24 -0
  24. data/roles/backend_install_essentials/templates/memcached.j2 +7 -0
  25. data/roles/database_load/defaults/main.yml +3 -0
  26. data/roles/database_load/meta/main.yml +3 -0
  27. data/roles/database_load/tasks/db_reset.yml +14 -0
  28. data/roles/database_load/tasks/main.yml +21 -0
  29. data/roles/delayed_job/defaults/main.yml +2 -0
  30. data/roles/delayed_job/library/sudo_upstart +101 -0
  31. data/roles/delayed_job/tasks/main.yml +35 -0
  32. data/roles/delayed_job/templates/dj_runner_upstart.j2 +17 -0
  33. data/roles/deployer_user/files/id_rsa_digital_ocean.pub +1 -0
  34. data/roles/deployer_user/tasks/keys.yml +19 -0
  35. data/roles/deployer_user/tasks/main.yml +18 -0
  36. data/roles/frontend_deploy/handlers/main.yml +2 -0
  37. data/roles/frontend_deploy/tasks/main.yml +8 -0
  38. data/roles/general/meta/main.yml +3 -0
  39. data/roles/general/tasks/basic_packages.yml +3 -0
  40. data/roles/general/tasks/main.yml +6 -0
  41. data/roles/general/tasks/swapfile.yml +21 -0
  42. data/roles/monit_activate/tasks/main.yml +2 -0
  43. data/roles/monit_install/tasks/main.yml +19 -0
  44. data/roles/monit_install/templates/web_interface.j2 +2 -0
  45. data/roles/nginx/handlers/main.yml +2 -0
  46. data/roles/nginx/tasks/main.yml +30 -0
  47. data/roles/nginx/templates/nginx_monit.j2 +3 -0
  48. data/roles/nginx/templates/nginx_unicorn.j2 +55 -0
  49. data/roles/postgres/meta/main.yml +15 -0
  50. data/roles/redis/tasks/main.yml +15 -0
  51. data/roles/redis/templates/redis.j2 +10 -0
  52. data/roles/sidekiq/defaults/main.yml +2 -0
  53. data/roles/sidekiq/meta/main.yml +3 -0
  54. data/roles/sidekiq/tasks/main.yml +19 -0
  55. data/roles/sidekiq/templates/sidekiq.j2 +4 -0
  56. data/roles/unicorn_activate/defaults/main.yml +3 -0
  57. data/roles/unicorn_activate/tasks/main.yml +25 -0
  58. data/roles/unicorn_install/tasks/main.yml +24 -0
  59. data/roles/unicorn_install/templates/unicorn.rb.j2 +47 -0
  60. data/roles/unicorn_install/templates/unicorn_init.j2 +70 -0
  61. data/roles/unicorn_install/templates/unicorn_monit.j2 +5 -0
  62. data/taperole.gemspec +11 -0
  63. data/templates/base/deploy.example.yml +17 -0
  64. data/templates/base/hosts.example +7 -0
  65. data/templates/base/omnibox.example.yml +25 -0
  66. data/templates/base/tape_vars.example.yml +13 -0
  67. data/templates/static_html/deploy.example.yml +12 -0
  68. data/templates/static_html/omnibox.example.yml +15 -0
  69. data/templates/static_html/tape_vars.example.yml +7 -0
  70. data/vars/defaults.yml +31 -0
  71. metadata +117 -0
@@ -0,0 +1,55 @@
1
+ {% if be_app_repo is defined %}
2
+ upstream unicorn {
3
+ server unix:{{unicorn_sockfile}} fail_timeout=0;
4
+ }
5
+ {% endif %}
6
+
7
+ server {
8
+ listen 80 default deferred;
9
+
10
+ # server_name example.com;
11
+
12
+ {% if fe_app_local_path is defined%}
13
+ root {{ fe_app_path }};
14
+ {% else %}
15
+ root {{ be_app_path }}/public;
16
+ {% endif %}
17
+
18
+ if (-f $document_root/system/maintenance.html) {
19
+ return 503;
20
+ }
21
+ error_page 503 @maintenance;
22
+ location @maintenance {
23
+ rewrite ^(.*)$ /system/maintenance.html last;
24
+ break;
25
+ }
26
+
27
+ location ^~ /assets/ {
28
+ gzip_static on;
29
+ expires max;
30
+ add_header Cache-Control public;
31
+ }
32
+
33
+ {% if be_app_repo is defined %}
34
+ try_files $uri/index.html $uri @unicorn;
35
+ location @unicorn {
36
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
37
+ proxy_set_header Host $http_host;
38
+ proxy_redirect off;
39
+ proxy_pass http://unicorn;
40
+ }
41
+ {% endif %}
42
+
43
+ error_page 500 502 503 504 /500.html;
44
+ client_max_body_size 4G;
45
+ keepalive_timeout 10;
46
+
47
+ if (-f $document_root/system/maintenance.html) {
48
+ return 503;
49
+ }
50
+ error_page 503 @maintenance;
51
+ location @maintenance {
52
+ rewrite ^(.*)$ /system/maintenance.html last;
53
+ break;
54
+ }
55
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ dependencies:
3
+ - role: lxhunter.apt
4
+ - role: ANXS.postgresql
5
+ postgresql_databases:
6
+ - name: "{{ app_name }}_{{ be_app_env }}"
7
+ postgresql_users:
8
+ - name: deployer
9
+ pass: "{{ database_password }}"
10
+ encrypted: yes
11
+ postgresql_user_privileges:
12
+ - name: deployer
13
+ db: "{{ app_name }}_{{ be_app_env }}"
14
+ role_attr_flags: CREATEDB,LOGIN,REPLICATION,SUPERUSER
15
+ postgresql_ext_install_dev_headers: yes
@@ -0,0 +1,15 @@
1
+ - name: Get PPA for latest Redis
2
+ apt_repository: repo='ppa:rwky/redis' state=present
3
+
4
+ - name: Install Redis
5
+ apt: name=redis-server state=latest
6
+
7
+ - name: Register with monit
8
+ template: src=redis.j2
9
+ dest=/etc/monit/conf.d/redis
10
+ mode=u=rw,g=r,o=r
11
+ register: redis_monit_config
12
+
13
+ - name: Reload Monit
14
+ command: bash -lc "monit reload"
15
+ when: redis_monit_config.changed
@@ -0,0 +1,10 @@
1
+ check process redis-server
2
+ with pidfile "/var/run/redis/redis.pid"
3
+ start program = "/etc/init.d/redis-server start"
4
+ stop program = "/etc/init.d/redis-server stop"
5
+ if 2 restarts within 3 cycles then timeout
6
+ if totalmem > 100 Mb then alert
7
+ if children > 255 for 5 cycles then stop
8
+ if cpu usage > 95% for 3 cycles then restart
9
+ if failed host 127.0.0.1 port 6379 then restart
10
+ if 5 restarts within 5 cycles then timeout
@@ -0,0 +1,2 @@
1
+ start_sidekiq_cmd: "/bin/bash -lc 'cd {{ be_app_path }} && bundle exec sidekiq -d -L log/sidekiq.log -e {{ be_app_env }} -P tmp/sidekiq.pid'"
2
+ stop_sidekiq_cmd: "/bin/bash -lc 'cd {{ be_app_path }} && bundle exec sidekiqctl stop tmp/sidekiq.pid'"
@@ -0,0 +1,3 @@
1
+ ---
2
+ dependencies:
3
+ - role: redis
@@ -0,0 +1,19 @@
1
+ - name: Register with monit
2
+ template: src=sidekiq.j2
3
+ dest=/etc/monit/conf.d/sidekiq
4
+ mode=u=rw,g=r,o=r
5
+ register: sidekiq_monit_config
6
+
7
+ - name: Reload Monit
8
+ command: bash -lc "monit reload"
9
+ when: sidekiq_monit_config.changed
10
+
11
+ - name: Stop sidekiq
12
+ remote_user: "{{deployer_user.name}}"
13
+ command: bash -lc "sudo monit stop sidekiq"
14
+ tags: [be_deploy, unicorn_stop]
15
+
16
+ - name: Start sidekiq
17
+ remote_user: "{{deployer_user.name}}"
18
+ command: bash -lc "sudo monit start sidekiq"
19
+ tags: [be_deploy, unicorn_start]
@@ -0,0 +1,4 @@
1
+ check process sidekiq
2
+ with pidfile {{ be_app_path }}/tmp/sidekiq.pid
3
+ start program = "{{ start_sidekiq_cmd }}" as uid deployer and gid deployer with timeout 90 seconds
4
+ stop program = "{{ stop_sidekiq_cmd }}" as uid deployer and gid deployer with timeout 90 seconds
@@ -0,0 +1,3 @@
1
+ force_unicorn_restart: false
2
+ force_unicorn_reload: false
3
+ kill_unicorn: false
@@ -0,0 +1,25 @@
1
+ - name: Ensure tmp dir present for unicorn pids
2
+ file: state=directory path={{be_app_path}}/tmp/unicorn owner={{ deployer_user.name }}
3
+ tags: [be_deploy]
4
+
5
+ - name: Ensure unicorn is running
6
+ remote_user: "{{ deployer_user.name }}"
7
+ command: bash -lc "sudo monit start unicorn"
8
+ tags: [be_deploy,unicorn_start]
9
+
10
+ - name: Restart Unicorn
11
+ remote_user: "{{ deployer_user.name }}"
12
+ command: bash -lc "sudo monit restart unicorn"
13
+ tags: [unicorn_restart,be_deploy]
14
+
15
+ - name: Ensure unicorn is stopped
16
+ remote_user: "{{ deployer_user.name }}"
17
+ command: bash -lc "sudo monit restart unicorn"
18
+ when: kill_unicorn
19
+ tags: [unicorn_stop]
20
+
21
+ - name: Force stop unicorn
22
+ remote_user: "{{ deployer_user.name }}"
23
+ command: bash -lc "service unicorn_{{ app_name }} stop"
24
+ when: kill_unicorn
25
+ tags: [unicorn_force_stop]
@@ -0,0 +1,24 @@
1
+ - name: Install unicorn init.d script
2
+ template: src=unicorn_init.j2
3
+ dest=/etc/init.d/unicorn_{{app_name}}
4
+ mode=u=rw,g=rx,o=rx
5
+
6
+ - name: register unicorn init.d script
7
+ command: initctl reload-configuration
8
+
9
+ - name: Set up unicorn log dir
10
+ file: path={{be_app_path}}/log state=directory owner=deployer
11
+
12
+ - name: Install unicorn config
13
+ template: src=unicorn.rb.j2
14
+ dest={{be_app_path}}/config/unicorn.rb
15
+
16
+ - name: Register monit config files
17
+ template: src=unicorn_monit.j2
18
+ dest=/etc/monit/conf.d/unicorn
19
+ mode=u=rw,g=r,o=r
20
+ register: unicorn_monit_config
21
+
22
+ - name: Reload Monit
23
+ command: bash -lc "monit reload"
24
+ when: unicorn_monit_config.changed
@@ -0,0 +1,47 @@
1
+ worker_processes {{ unicorn_workers }}
2
+ working_directory "{{ be_app_path }}"
3
+ pid "{{ be_app_path }}/tmp/unicorn.pid"
4
+ stderr_path "{{ be_app_path }}/log/unicorn.log"
5
+ stdout_path "{{ be_app_path }}/log/unicorn.log"
6
+
7
+ # Please read this and understand the risk you take by enabling preload_app
8
+ # http://unicorn.bogomips.org/Unicorn/Configurator.html#method-i-preload_app
9
+ preload_app false
10
+
11
+ timeout 30
12
+
13
+ listen "{{ unicorn_sockfile }}"
14
+
15
+ before_exec do |server|
16
+ ENV["BUNDLE_GEMFILE"] = "#{Rails.root}/Gemfile"
17
+ end
18
+
19
+ GC.respond_to?(:copy_on_write_friendly=) and
20
+ GC.copy_on_write_friendly = true
21
+
22
+ check_client_connection false
23
+
24
+ before_fork do |server, worker|
25
+ defined?(ActiveRecord::Base) and
26
+ ActiveRecord::Base.connection.disconnect!
27
+
28
+ old_pid = "#{server.config[:pid]}.oldbin"
29
+ if old_pid != server.pid
30
+ begin
31
+ sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
32
+ Process.kill(sig, File.read(old_pid).to_i)
33
+ rescue Errno::ENOENT, Errno::ESRCH
34
+ end
35
+ end
36
+
37
+ # Throttle the master from forking too quickly by sleeping. Due
38
+ # to the implementation of standard Unix signal handlers, this
39
+ # helps (but does not completely) prevent identical, repeated signals
40
+ # from being lost when the receiving process is busy.
41
+ sleep 1
42
+ end
43
+
44
+ after_fork do |server, worker|
45
+ defined?(ActiveRecord::Base) and
46
+ ActiveRecord::Base.establish_connection
47
+ end
@@ -0,0 +1,70 @@
1
+ #!/bin/sh
2
+
3
+ set -u
4
+
5
+ TIMEOUT=${TIMEOUT-60}
6
+ RBENV_ROOT="{{ rbenv_root }}"
7
+ PATH="$RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH"
8
+ APP_ROOT="{{be_app_path}}"
9
+ APP_USER="{{ deployer_user.name }}"
10
+ PID="$APP_ROOT/tmp/unicorn.pid"
11
+ CMD="$APP_ROOT/bin/unicorn -E {{be_app_env}} -D -c $APP_ROOT/config/unicorn.rb"
12
+
13
+ action="$1"
14
+ old_pid="$PID.oldbin"
15
+
16
+ cd $APP_ROOT || exit 1
17
+
18
+ sig () {
19
+ test -s "$PID" && kill -$1 `cat $PID`
20
+ }
21
+
22
+ oldsig () {
23
+ test -s $old_pid && kill -$1 `cat $old_pid`
24
+ }
25
+
26
+ case $action in
27
+ start)
28
+ sig 0 && echo >&2 "Already running" && exit 0
29
+ rm -f $PID && $CMD
30
+ ;;
31
+ stop)
32
+ sig QUIT && echo "Stopping" && exit 0
33
+ echo >&2 "Unicorn master process with ID `cat $PID` not found (see: $PID)"
34
+ ;;
35
+ force-stop)
36
+ pkill -9 -f "unicorn master" && echo "Forcing a stop\n" && rm -f $PID && echo "Cleaning up pid" && exit 0
37
+ ;;
38
+ restart|reload)
39
+ sig HUP && echo reloaded OK && exit 0
40
+ echo >&2 "Couldn't reload, starting '$CMD' instead"
41
+ $CMD
42
+ ;;
43
+ upgrade)
44
+ if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
45
+ then
46
+ n=$TIMEOUT
47
+ while test -s $old_pid && test $n -ge 0
48
+ do
49
+ printf '.' && sleep 1 && n=$(( $n - 1 ))
50
+ done
51
+ echo
52
+
53
+ if test $n -lt 0 && test -s $old_pid
54
+ then
55
+ echo >&2 "$old_pid still exists after $TIMEOUT seconds"
56
+ exit 1
57
+ fi
58
+ exit 0
59
+ fi
60
+ echo >&2 "Couldn't upgrade, starting '$CMD' instead"
61
+ $CMD
62
+ ;;
63
+ reopen-logs)
64
+ sig USR1
65
+ ;;
66
+ *)
67
+ echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
68
+ exit 1
69
+ ;;
70
+ esac
@@ -0,0 +1,5 @@
1
+ check process unicorn with pidfile {{ be_app_path }}/tmp/unicorn.pid
2
+ start program "/etc/init.d/unicorn_{{ app_name }} start" as uid deployer and gid deployer with timeout 90 seconds
3
+ restart program "/etc/init.d/unicorn_{{ app_name }} restart" as uid deployer and gid deployer with timeout 90 seconds
4
+ stop program "/etc/init.d/unicorn_{{ app_name }} stop" as uid deployer and gid deployer with timeout 90 seconds
5
+ if 5 restarts within 5 cycles then timeout
data/taperole.gemspec ADDED
@@ -0,0 +1,11 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "taperole"
3
+ spec.version = '1.0.0'
4
+ spec.authors = ['Jack Forrest', 'Smashing Boxes', 'Brandon Mathis']
5
+ spec.email = ['jack@smashingboxes.com', 'brandon@sbox.es']
6
+ spec.summary = 'A tool for provisioning and deploying boxes for hosting Rails apps'
7
+ spec.license = 'MIT'
8
+
9
+ spec.files = `git ls-files`.split("\n")
10
+ spec.executables = 'tape'
11
+ end
@@ -0,0 +1,17 @@
1
+ #TODO Make sure that secrets is ignored
2
+ ---
3
+ - hosts: omnibox
4
+
5
+ vars_files:
6
+ - "{{tape_dir}}/vars/defaults.yml"
7
+ - tape_vars.yml
8
+
9
+ user: "{{ deployer_user.name }}"
10
+
11
+ roles:
12
+ - backend_checkout
13
+ - backend_config
14
+ - database_load
15
+ - unicorn_activate
16
+ - frontend_deploy
17
+ - delayed_job
@@ -0,0 +1,7 @@
1
+ # Base Example
2
+ [omnibox]
3
+ 0.0.0.0 be_app_env=SOME_ENV be_app_branch=SOME_BRANCH
4
+
5
+ # Vagrant Example
6
+ # [omnibox]
7
+ # localhost:2222 ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
@@ -0,0 +1,25 @@
1
+ ---
2
+ - hosts: omnibox
3
+ user: root
4
+
5
+ vars_files:
6
+ - "{{tape_dir}}/vars/defaults.yml"
7
+ - tape_vars.yml
8
+
9
+ roles:
10
+ - general
11
+ - monit_install
12
+ - postgres
13
+ - nginx
14
+ - backend_install_essentials
15
+ - deployer_user
16
+ - backend_checkout
17
+ - unicorn_install
18
+ - backend_config
19
+ - database_load
20
+ - unicorn_activate
21
+ - frontend_deploy
22
+ # - delayed_job
23
+ # - sidekiq
24
+ # - redis
25
+ - monit_activate # Run Last
@@ -0,0 +1,13 @@
1
+ app_name:
2
+
3
+ # Rails App Configs
4
+ be_app_repo:
5
+ be_app_env: production
6
+ be_app_branch: master
7
+
8
+ # HTML/JS App Configs
9
+ # Uncomment if you want to deploy a JS/HTML App
10
+ # fe_app_local_path: /path/to/built/js/app/
11
+
12
+ dev_key_files:
13
+ - dev_keys/key.pub
@@ -0,0 +1,12 @@
1
+ #TODO Make sure that secrets is ignored
2
+ ---
3
+ - hosts: omnibox
4
+
5
+ vars_files:
6
+ - "{{tape_dir}}/vars/defaults.yml"
7
+ - tape_vars.yml
8
+
9
+ user: "{{ deployer_user.name }}"
10
+
11
+ roles:
12
+ - frontend_deploy
@@ -0,0 +1,15 @@
1
+ ---
2
+ - hosts: omnibox
3
+ user: root
4
+
5
+ vars_files:
6
+ - "{{tape_dir}}/vars/defaults.yml"
7
+ - tape_vars.yml
8
+
9
+ roles:
10
+ - general
11
+ - monit_install
12
+ - nginx
13
+ - deployer_user
14
+ - frontend_deploy
15
+ - monit_activate # Run Last
@@ -0,0 +1,7 @@
1
+ app_name:
2
+
3
+ # App Configs
4
+ fe_app_local_path: /path/to/built/js/app
5
+
6
+ dev_key_files:
7
+ - dev_keys/key.pub
data/vars/defaults.yml ADDED
@@ -0,0 +1,31 @@
1
+ be_app_path: "/home/{{ deployer_user.name }}/{{ app_name }}"
2
+
3
+ fe_app_name: "{{ app_name }}_fe"
4
+ fe_app_path: "/home/{{ deployer_user.name }}/{{ fe_app_name }}"
5
+
6
+ deployer_user:
7
+ name: deployer
8
+ groups:
9
+ - deployer
10
+ - staff
11
+
12
+ # Path where this playbook is being run from
13
+ local_dir: "{{lookup('env', 'PWD')}}"
14
+
15
+ unicorn_workers: "{{ansible_processor_cores * 2}}"
16
+ unicorn_sockfile: /tmp/unicorn_{{ app_name }}.sock
17
+
18
+ swap_file:
19
+ path: /swp
20
+ size_kb: "{{ 1024 * 1024 }}"
21
+
22
+ # echo 'password' | md5
23
+ database_password: 286755fad04869ca523320acce0dc6a4
24
+
25
+ enabled_delayed_job: false
26
+
27
+ precompile_assets: true
28
+
29
+ # Sets server_name in the nginx sites-enabled file
30
+ app_url: false
31
+
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: taperole
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jack Forrest
8
+ - Smashing Boxes
9
+ - Brandon Mathis
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-03-14 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description:
16
+ email:
17
+ - jack@smashingboxes.com
18
+ - brandon@sbox.es
19
+ executables:
20
+ - tape
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - ".gitignore"
25
+ - ".tape/ansible.cfg"
26
+ - CONTRIBUTING.md
27
+ - README.md
28
+ - Vagrantfile
29
+ - ansible.cfg
30
+ - bin/tape
31
+ - id_rsa_sb_basebox
32
+ - lib/tape.rb
33
+ - lib/tape/ansible_runner.rb
34
+ - lib/tape/installer.rb
35
+ - lib/tape/qemu_provisioner.rb
36
+ - lib/tape/vagrant_provisioner.rb
37
+ - requirements.yml
38
+ - roles/after_deploy/tasks/main.yml
39
+ - roles/backend_checkout/tasks/main.yml
40
+ - roles/backend_config/defaults/main.yml
41
+ - roles/backend_config/tasks/main.yml
42
+ - roles/backend_config/templates/database.yml.j2
43
+ - roles/backend_config/templates/env_config.yml.j2
44
+ - roles/backend_install_essentials/meta/main.yml
45
+ - roles/backend_install_essentials/tasks/main.yml
46
+ - roles/backend_install_essentials/templates/memcached.j2
47
+ - roles/database_load/defaults/main.yml
48
+ - roles/database_load/meta/main.yml
49
+ - roles/database_load/tasks/db_reset.yml
50
+ - roles/database_load/tasks/main.yml
51
+ - roles/delayed_job/defaults/main.yml
52
+ - roles/delayed_job/library/sudo_upstart
53
+ - roles/delayed_job/tasks/main.yml
54
+ - roles/delayed_job/templates/dj_runner_upstart.j2
55
+ - roles/deployer_user/files/id_rsa_digital_ocean.pub
56
+ - roles/deployer_user/tasks/keys.yml
57
+ - roles/deployer_user/tasks/main.yml
58
+ - roles/frontend_deploy/handlers/main.yml
59
+ - roles/frontend_deploy/tasks/main.yml
60
+ - roles/general/meta/main.yml
61
+ - roles/general/tasks/basic_packages.yml
62
+ - roles/general/tasks/main.yml
63
+ - roles/general/tasks/swapfile.yml
64
+ - roles/monit_activate/tasks/main.yml
65
+ - roles/monit_install/tasks/main.yml
66
+ - roles/monit_install/templates/web_interface.j2
67
+ - roles/nginx/handlers/main.yml
68
+ - roles/nginx/tasks/main.yml
69
+ - roles/nginx/templates/nginx_monit.j2
70
+ - roles/nginx/templates/nginx_unicorn.j2
71
+ - roles/postgres/meta/main.yml
72
+ - roles/redis/tasks/main.yml
73
+ - roles/redis/templates/redis.j2
74
+ - roles/sidekiq/defaults/main.yml
75
+ - roles/sidekiq/meta/main.yml
76
+ - roles/sidekiq/tasks/main.yml
77
+ - roles/sidekiq/templates/sidekiq.j2
78
+ - roles/unicorn_activate/defaults/main.yml
79
+ - roles/unicorn_activate/tasks/main.yml
80
+ - roles/unicorn_install/tasks/main.yml
81
+ - roles/unicorn_install/templates/unicorn.rb.j2
82
+ - roles/unicorn_install/templates/unicorn_init.j2
83
+ - roles/unicorn_install/templates/unicorn_monit.j2
84
+ - taperole.gemspec
85
+ - templates/base/deploy.example.yml
86
+ - templates/base/hosts.example
87
+ - templates/base/omnibox.example.yml
88
+ - templates/base/tape_vars.example.yml
89
+ - templates/static_html/deploy.example.yml
90
+ - templates/static_html/omnibox.example.yml
91
+ - templates/static_html/tape_vars.example.yml
92
+ - vars/defaults.yml
93
+ homepage:
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: A tool for provisioning and deploying boxes for hosting Rails apps
117
+ test_files: []