Empact-deprec 1.99.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. data/CHANGELOG +170 -0
  2. data/COPYING +19 -0
  3. data/LICENSE +339 -0
  4. data/README +136 -0
  5. data/THANKS +5 -0
  6. data/bin/depify +133 -0
  7. data/docs/ANNOUNCE.deprec2 +47 -0
  8. data/docs/README.install +88 -0
  9. data/docs/README.nagios +28 -0
  10. data/docs/README.rails +20 -0
  11. data/docs/README.svn +31 -0
  12. data/docs/ROADMAP.txt +74 -0
  13. data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
  14. data/docs/deprec-1.x/notes.txt +12 -0
  15. data/docs/deprec_banner.gif +0 -0
  16. data/lib/deprec.rb +8 -0
  17. data/lib/deprec/capistrano_extensions.rb +378 -0
  18. data/lib/deprec/recipes.rb +40 -0
  19. data/lib/deprec/recipes/aoe.rb +117 -0
  20. data/lib/deprec/recipes/apache.rb +179 -0
  21. data/lib/deprec/recipes/ar_sendmail.rb +65 -0
  22. data/lib/deprec/recipes/canonical.rb +57 -0
  23. data/lib/deprec/recipes/deprec.rb +155 -0
  24. data/lib/deprec/recipes/deprecated.rb +71 -0
  25. data/lib/deprec/recipes/example.rb +115 -0
  26. data/lib/deprec/recipes/git.rb +168 -0
  27. data/lib/deprec/recipes/gitosis.rb +47 -0
  28. data/lib/deprec/recipes/god.rb +107 -0
  29. data/lib/deprec/recipes/heartbeat.rb +138 -0
  30. data/lib/deprec/recipes/iptables.rb +53 -0
  31. data/lib/deprec/recipes/logrotate.rb +51 -0
  32. data/lib/deprec/recipes/lvm.rb +20 -0
  33. data/lib/deprec/recipes/memcached.rb +102 -0
  34. data/lib/deprec/recipes/mongrel.rb +209 -0
  35. data/lib/deprec/recipes/monit.rb +130 -0
  36. data/lib/deprec/recipes/mysql.rb +115 -0
  37. data/lib/deprec/recipes/nagios.rb +302 -0
  38. data/lib/deprec/recipes/network.rb +84 -0
  39. data/lib/deprec/recipes/nginx.rb +154 -0
  40. data/lib/deprec/recipes/ntp.rb +96 -0
  41. data/lib/deprec/recipes/php.rb +99 -0
  42. data/lib/deprec/recipes/postfix.rb +105 -0
  43. data/lib/deprec/recipes/rails.rb +302 -0
  44. data/lib/deprec/recipes/ruby.rb +66 -0
  45. data/lib/deprec/recipes/sphinx.rb +83 -0
  46. data/lib/deprec/recipes/ssh.rb +93 -0
  47. data/lib/deprec/recipes/svn.rb +169 -0
  48. data/lib/deprec/recipes/swiftiply.rb +108 -0
  49. data/lib/deprec/recipes/thin.rb +201 -0
  50. data/lib/deprec/recipes/trac.rb +277 -0
  51. data/lib/deprec/recipes/ubuntu.rb +20 -0
  52. data/lib/deprec/recipes/users.rb +90 -0
  53. data/lib/deprec/recipes/utils.rb +39 -0
  54. data/lib/deprec/recipes/xen.rb +259 -0
  55. data/lib/deprec/templates/aoe/aoe-init +55 -0
  56. data/lib/deprec/templates/aoe/fence_aoemask +351 -0
  57. data/lib/deprec/templates/apache/httpd-vhost-app.conf.erb +144 -0
  58. data/lib/deprec/templates/apache/httpd.conf +465 -0
  59. data/lib/deprec/templates/apache/index.html.erb +37 -0
  60. data/lib/deprec/templates/apache/master.css +72 -0
  61. data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
  62. data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
  63. data/lib/deprec/templates/coraid/aoe-init +55 -0
  64. data/lib/deprec/templates/deprec/caprc.erb +14 -0
  65. data/lib/deprec/templates/god/god-init-script +71 -0
  66. data/lib/deprec/templates/god/god-notifications +0 -0
  67. data/lib/deprec/templates/god/god_mongrel.erb +81 -0
  68. data/lib/deprec/templates/god/god_mysql.erb +50 -0
  69. data/lib/deprec/templates/god/god_nginx.erb +61 -0
  70. data/lib/deprec/templates/god/god_thin.erb +80 -0
  71. data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
  72. data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
  73. data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
  74. data/lib/deprec/templates/iptables/iptables.up.erb +41 -0
  75. data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
  76. data/lib/deprec/templates/memcached/memcached-init-script +65 -0
  77. data/lib/deprec/templates/memcached/memcached.conf.erb +46 -0
  78. data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
  79. data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
  80. data/lib/deprec/templates/mongrel/mongrel_cluster.logrotate.d +14 -0
  81. data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
  82. data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
  83. data/lib/deprec/templates/monit/monit-init-script +104 -0
  84. data/lib/deprec/templates/monit/monitrc.erb +227 -0
  85. data/lib/deprec/templates/monit/nothing +0 -0
  86. data/lib/deprec/templates/mysql/create_databases.sql +20 -0
  87. data/lib/deprec/templates/mysql/database.yml.prod +6 -0
  88. data/lib/deprec/templates/mysql/database.yml.stage +6 -0
  89. data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
  90. data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
  91. data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
  92. data/lib/deprec/templates/nagios/cgi.cfg.erb +321 -0
  93. data/lib/deprec/templates/nagios/commands.cfg.erb +240 -0
  94. data/lib/deprec/templates/nagios/contacts.cfg.erb +75 -0
  95. data/lib/deprec/templates/nagios/hosts.cfg.erb +70 -0
  96. data/lib/deprec/templates/nagios/htpasswd.users +1 -0
  97. data/lib/deprec/templates/nagios/localhost.cfg.erb +157 -0
  98. data/lib/deprec/templates/nagios/nagios.cfg.erb +1274 -0
  99. data/lib/deprec/templates/nagios/nagios_apache_vhost.conf.erb +45 -0
  100. data/lib/deprec/templates/nagios/nrpe.cfg.erb +208 -0
  101. data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
  102. data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
  103. data/lib/deprec/templates/nagios/services.cfg.erb +7 -0
  104. data/lib/deprec/templates/nagios/templates.cfg.erb +190 -0
  105. data/lib/deprec/templates/nagios/timeperiods.cfg.erb +94 -0
  106. data/lib/deprec/templates/network/hostname.erb +1 -0
  107. data/lib/deprec/templates/network/hosts.erb +2 -0
  108. data/lib/deprec/templates/network/interfaces.erb +18 -0
  109. data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
  110. data/lib/deprec/templates/nginx/mime.types.erb +70 -0
  111. data/lib/deprec/templates/nginx/nginx-init-script +62 -0
  112. data/lib/deprec/templates/nginx/nginx.conf.erb +53 -0
  113. data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
  114. data/lib/deprec/templates/nginx/nothing.conf +1 -0
  115. data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +45 -0
  116. data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
  117. data/lib/deprec/templates/postfix/aliases.erb +3 -0
  118. data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
  119. data/lib/deprec/templates/postfix/main.cf.erb +41 -0
  120. data/lib/deprec/templates/postfix/master.cf.erb +77 -0
  121. data/lib/deprec/templates/rails/database.yml.erb +6 -0
  122. data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
  123. data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
  124. data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
  125. data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
  126. data/lib/deprec/templates/swiftiply/swiftiply-init-script +61 -0
  127. data/lib/deprec/templates/swiftiply/swiftiply.yml.erb +11 -0
  128. data/lib/deprec/templates/thin/thin-init-script +51 -0
  129. data/lib/deprec/templates/thin/thin.yml.erb +11 -0
  130. data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
  131. data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
  132. data/lib/deprec/templates/trac/trac.ini.erb +169 -0
  133. data/lib/deprec/templates/trac/trac_deprec.png +0 -0
  134. data/lib/deprec/templates/trac/tracd-init.erb +43 -0
  135. data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
  136. data/lib/deprec/templates/xen/15-disable-hwclock +40 -0
  137. data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
  138. data/lib/deprec/templates/xen/xen-tools.conf.erb +220 -0
  139. data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
  140. data/lib/deprec/templates/xen/xend-init.erb +69 -0
  141. data/lib/deprec/templates/xen/xendomains.erb +137 -0
  142. data/lib/deprec/templates/xen/xm.tmpl.erb +85 -0
  143. data/lib/vmbuilder_plugins/all.rb +20 -0
  144. data/lib/vmbuilder_plugins/apt.rb +93 -0
  145. data/lib/vmbuilder_plugins/emerge.rb +76 -0
  146. data/lib/vmbuilder_plugins/gem.rb +90 -0
  147. data/lib/vmbuilder_plugins/std.rb +203 -0
  148. metadata +207 -0
@@ -0,0 +1,96 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+ namespace :deprec do
4
+ namespace :ntp do
5
+
6
+
7
+ # Install
8
+
9
+ desc "Install ntp"
10
+ task :install do
11
+ install_deps
12
+ end
13
+
14
+ # install dependencies for nginx
15
+ task :install_deps do
16
+ apt.install( {:base => %w(ntp)}, :stable )
17
+ end
18
+
19
+
20
+ # Configure
21
+
22
+ SYSTEM_CONFIG_FILES[:ntp] = [
23
+
24
+ {:template => 'ntp.conf.erb',
25
+ :path => '/etc/ntp.conf',
26
+ :mode => 0755,
27
+ :owner => 'root:root'}
28
+ ]
29
+
30
+ desc "Generate ntp config from template."
31
+ task :config_gen do
32
+ SYSTEM_CONFIG_FILES[:ntp].each do |file|
33
+ deprec2.render_template(:ntp, file)
34
+ end
35
+ end
36
+
37
+ desc "Push ntp config files to server"
38
+ task :config do
39
+ deprec2.push_configs(:ntp, SYSTEM_CONFIG_FILES[:ntp])
40
+ end
41
+
42
+ desc 'Enable ntp start scripts on server.'
43
+ task :activate, :roles => :web do
44
+ send(run_method, "update-rc.d ntp defaults")
45
+ end
46
+
47
+ desc 'Disable ntp start scripts on server.'
48
+ task :deactivate, :roles => :web do
49
+ send(run_method, "update-rc.d -f ntp remove")
50
+ end
51
+
52
+
53
+ # Control
54
+
55
+ desc "Start ntp"
56
+ task :start do
57
+ send(run_method, "/etc/init.d/ntp start")
58
+ end
59
+
60
+ desc "Stop ntp"
61
+ task :stop do
62
+ send(run_method, "/etc/init.d/ntp stop")
63
+ end
64
+
65
+ desc "Restart ntp"
66
+ task :restart do
67
+ send(run_method, "/etc/init.d/ntp restart")
68
+ end
69
+
70
+ desc "Reload ntp"
71
+ task :reload do
72
+ puts "use 'restart' instead"
73
+ exit 1
74
+ end
75
+
76
+ task :backup, :roles => :web do
77
+ # there's nothing to backup for ntp
78
+ end
79
+
80
+ task :restore, :roles => :web do
81
+ # there's nothing to store for ntp
82
+ end
83
+
84
+ end
85
+ end
86
+ end
87
+
88
+
89
+ # Some nice nagios checks
90
+ #
91
+ # Check important hosts have expected DNS
92
+ #
93
+ # root@sm02:/usr/local/nagios/libexec# ./check_dns --hostname=astro.blocksglobal.com --expected-address=116.240.200.167
94
+ # DNS OK: 0.009 seconds response time. astro.blocksglobal.com returns 116.240.200.167|time=0.008744s;;;0.000000
95
+ #
96
+ #
@@ -0,0 +1,99 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+ namespace :deprec do
4
+ namespace :php do
5
+
6
+ desc "Install PHP from source"
7
+ task :install do
8
+ version = 'php-5.2.4'
9
+ set :src_package, {
10
+ :file => version + '.tar.gz',
11
+ :md5sum => '0826e231c3148b29fd039d7a8c893ad3 php-5.2.4.tar.gz',
12
+ :dir => version,
13
+ :url => "http://www.php.net/distributions/#{version}.tar.gz",
14
+ :unpack => "tar zxf #{version}.tar.gz;",
15
+ :configure => %w(
16
+ ./configure
17
+ --prefix=/usr/local/php
18
+ --with-apxs2=/usr/local/apache2/bin/apxs
19
+ --disable-ipv6
20
+ --enable-sockets
21
+ --enable-soap
22
+ --with-pcre-regex
23
+ --with-mysql
24
+ --with-zlib
25
+ --with-gettext
26
+ --with-sqlite
27
+ --enable-sqlite-utf8
28
+ --with-openssl
29
+ --with-mcrypt
30
+ --with-ncurses
31
+ --with-jpeg-dir=/usr
32
+ --with-gd
33
+ --with-ctype
34
+ --enable-mbstring
35
+ --with-curl==/usr/lib
36
+ ;
37
+ ).reject{|arg| arg.match '#'}.join(' '),
38
+ :make => 'make;',
39
+ :install => 'make install;',
40
+ :post_install => ""
41
+ }
42
+ install_deps
43
+ run "export CFLAGS=-O2;"
44
+ deprec2.download_src(src_package, src_dir)
45
+ deprec2.install_from_src(src_package, src_dir)
46
+ deprec2.append_to_file_if_missing('/usr/local/apache2/conf/httpd.conf', 'AddType application/x-httpd-php .php')
47
+ end
48
+
49
+ # install dependencies for php
50
+ task :install_deps do
51
+ puts "This function should be overridden by your OS plugin!"
52
+ apt.install( {:base => %w(zlib1g-dev zlib1g openssl libssl-dev
53
+ flex libcurl3 libcurl3-dev libmcrypt-dev libmysqlclient15-dev libncurses5-dev
54
+ libxml2-dev libjpeg62-dev libpng12-dev)}, :stable )
55
+ end
56
+
57
+ desc "generate config file for php"
58
+ task :config_gen do
59
+ # not yet implemented
60
+ end
61
+
62
+ desc "deploy config file for php"
63
+ task :config, :roles => :web do
64
+ # not yet implemented
65
+ end
66
+
67
+ task :start, :roles => :web do
68
+ # not applicable
69
+ end
70
+
71
+ task :stop, :roles => :web do
72
+ # not applicable
73
+ end
74
+
75
+ task :restart, :roles => :web do
76
+ # not applicable
77
+ end
78
+
79
+ desc "enable php in webserver"
80
+ task :activate, :roles => :web do
81
+ # not yet implemented
82
+ end
83
+
84
+ desc "disable php in webserver"
85
+ task :deactivate, :roles => :web do
86
+ # not yet implemented
87
+ end
88
+
89
+ task :backup, :roles => :web do
90
+ # not applicable
91
+ end
92
+
93
+ task :restore, :roles => :web do
94
+ # not applicable
95
+ end
96
+
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,105 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+ # XXX not complete
4
+ namespace :deprec do
5
+ namespace :postfix do
6
+
7
+ desc "Install Postfix"
8
+ task :install, :roles => :web do
9
+ install_deps
10
+ end
11
+
12
+ # Install dependencies for Postfix
13
+ task :install_deps do
14
+ apt.install( {:base => %w(postfix)}, :stable )
15
+ end
16
+
17
+ SYSTEM_CONFIG_FILES[:postfix] = [
18
+
19
+ {:template => "main.cf.erb",
20
+ :path => '/etc/postfix/main.cf',
21
+ :mode => 0644,
22
+ :owner => 'root:root'},
23
+
24
+ {:template => "master.cf.erb",
25
+ :path => '/etc/postfix/master.cf',
26
+ :mode => 0644,
27
+ :owner => 'root:root'},
28
+
29
+ {:template => "dynamicmaps.cf.erb",
30
+ :path => '/etc/postfix/dynamicmaps.cf',
31
+ :mode => 0644,
32
+ :owner => 'root:root'},
33
+
34
+ {:template => "aliases.erb",
35
+ :path => '/etc/aliases',
36
+ :mode => 0644,
37
+ :owner => 'root:root'}
38
+
39
+ ]
40
+
41
+ desc "Generate configuration file(s) for XXX from template(s)"
42
+ task :config_gen do
43
+ SYSTEM_CONFIG_FILES[:postfix].each do |file|
44
+ deprec2.render_template(:postfix, file)
45
+ end
46
+ end
47
+
48
+ desc 'Deploy configuration files(s) for XXX'
49
+ task :config, :roles => :mail do
50
+ deprec2.push_configs(:postfix, SYSTEM_CONFIG_FILES[:postfix])
51
+ send(run_method, "/usr/bin/newaliases")
52
+ end
53
+
54
+ desc "Start Postfix"
55
+ task :start, :roles => :mail do
56
+ send(run_method, "/etc/init.d/postfix start")
57
+ end
58
+
59
+ desc "Stop Postfix"
60
+ task :stop, :roles => :mail do
61
+ send(run_method, "/etc/init.d/postfix stop")
62
+ end
63
+
64
+ desc "Restart Postfix"
65
+ task :restart, :roles => :mail do
66
+ send(run_method, "/etc/init.d/postfix restart")
67
+ end
68
+
69
+ desc "Reload Postfix"
70
+ task :reload, :roles => :mail do
71
+ send(run_method, "/etc/init.d/postfix reload")
72
+ end
73
+
74
+ task :activate, :roles => :web do
75
+ end
76
+
77
+ task :deactivate, :roles => :web do
78
+ end
79
+
80
+ task :backup, :roles => :web do
81
+ end
82
+
83
+ task :restore, :roles => :web do
84
+ end
85
+
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+ # Capistrano::Configuration.instance(:must_exist).load do
92
+ #
93
+ # namespace :deprec do namespace :nginx do
94
+ #
95
+ # #Craig: I've kept this generic rather than calling the task setup postfix.
96
+ # # if people want other smtp servers, it could be configurable
97
+ # desc "install and configure postfix"
98
+ # task :setup_smtp_server do
99
+ # install_postfix
100
+ # set :postfix_destination_domains, [domain] + apache_server_aliases
101
+ # deprec.render_template_to_file('postfix_main', '/etc/postfix/main.cf')
102
+ # end
103
+ #
104
+ # end end
105
+ # end
@@ -0,0 +1,302 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+
4
+ set :database_yml_in_scm, true
5
+ set :app_symlinks, nil
6
+ set :rails_env, 'production'
7
+ set :gems_for_project, nil # Array of gems to be installed for app
8
+ set :shared_dirs, nil # Array of directories that should be created under shared/
9
+ # and linked to in the project
10
+
11
+ PROJECT_CONFIG_FILES[:rails] = [
12
+
13
+ {:template => 'database.yml.erb',
14
+ :path => 'database.yml',
15
+ :mode => 0644,
16
+ :owner => 'root:root'}
17
+
18
+ ]
19
+
20
+ PROJECT_CONFIG_FILES[:nginx] = [
21
+
22
+ {:template => 'rails_nginx_vhost.conf.erb',
23
+ :path => "rails_nginx_vhost.conf",
24
+ :mode => 0644,
25
+ :owner => 'root:root'}
26
+ ]
27
+
28
+ # Hook into the default capistrano deploy tasks
29
+ before 'deploy:setup', :except => { :no_release => true } do
30
+ top.deprec.rails.setup_user_perms
31
+ top.deprec.rails.setup_paths
32
+ top.deprec.rails.setup_shared_dirs
33
+ top.deprec.rails.install_gems_for_project
34
+ end
35
+
36
+ # Override default cap task using sudo to create dir
37
+ namespace :deploy do
38
+ task :setup, :except => { :no_release => true } do
39
+ dirs = [deploy_to, releases_path, shared_path]
40
+ dirs += %w(system log pids).map { |d| File.join(shared_path, d) }
41
+ sudo "sh -c 'umask 02 && mkdir -p #{dirs.join(' ')}'"
42
+ end
43
+ end
44
+
45
+ after 'deploy:setup', :except => { :no_release => true } do
46
+ top.deprec.rails.setup_servers
47
+ top.deprec.rails.create_config_dir
48
+ end
49
+
50
+ after 'deploy:symlink', :roles => :app do
51
+ top.deprec.rails.symlink_shared_dirs
52
+ top.deprec.rails.symlink_database_yml unless database_yml_in_scm
53
+ top.deprec.thin.set_perms_for_thin_dirs
54
+ end
55
+
56
+ after :deploy, :roles => :app do
57
+ deploy.cleanup
58
+ end
59
+
60
+ # redefine the reaper
61
+ namespace :deploy do
62
+ task :restart do
63
+ top.deprec.thin.restart
64
+ top.deprec.nginx.restart
65
+ end
66
+ end
67
+
68
+ namespace :deprec do
69
+ namespace :rails do
70
+
71
+ task :install, :roles => :app do
72
+ install_deps
73
+ install_gems
74
+ end
75
+
76
+ task :install_deps do
77
+ apt.install( {:base => %w(libmysqlclient15-dev sqlite3 libsqlite3-ruby libsqlite3-dev)}, :stable )
78
+ end
79
+
80
+ # install some required ruby gems
81
+ task :install_gems do
82
+ gem2.install 'sqlite3-ruby'
83
+ gem2.install 'mysql'
84
+ gem2.install 'rails'
85
+ gem2.install 'rspec' # seems to be required to run rake db:migrate (???)
86
+ # gem2.install 'builder' # XXX ? needed ?
87
+ end
88
+
89
+ task :install_gems_for_project do
90
+ if gems_for_project
91
+ gems_for_project.each { |gem| gem2.install(gem) }
92
+ end
93
+ end
94
+
95
+ task :config_gen do
96
+ PROJECT_CONFIG_FILES[:nginx].each do |file|
97
+ deprec2.render_template(:nginx, file)
98
+ end
99
+
100
+ top.deprec.thin.config_gen_project
101
+ end
102
+
103
+ task :config, :roles => [:app, :web] do
104
+ deprec2.push_configs(:nginx, PROJECT_CONFIG_FILES[:nginx])
105
+ top.deprec.thin.config_project
106
+ symlink_nginx_vhost
107
+ symlink_logrotate_config
108
+ end
109
+
110
+ task :symlink_nginx_vhost, :roles => :web do
111
+ sudo "ln -sf #{deploy_to}/nginx/rails_nginx_vhost.conf #{nginx_vhost_dir}/#{application}.conf"
112
+ end
113
+
114
+ task :symlink_logrotate_config, :roles => :web do
115
+ sudo "ln -sf #{deploy_to}/nginx/logrotate.conf /etc/logrotate.d/nginx-#{application}"
116
+ end
117
+
118
+ task :create_config_dir do
119
+ deprec2.mkdir("#{shared_path}/config", :group => group, :mode => 0775, :via => :sudo)
120
+ end
121
+
122
+ # create deployment group and add current user to it
123
+ task :setup_user_perms do
124
+ deprec2.groupadd(group)
125
+ deprec2.add_user_to_group(user, group)
126
+ deprec2.groupadd(thin_group)
127
+ deprec2.add_user_to_group(user, thin_group)
128
+ # we've just added ourself to a group - need to teardown connection
129
+ # so that next command uses new session where we belong in group
130
+ deprec2.teardown_connections
131
+ end
132
+
133
+ # Setup database server.
134
+ task :setup_db, :roles => :db, :only => { :primary => true } do
135
+ top.deprec.mysql.setup
136
+ end
137
+
138
+ # setup extra paths required for deployment
139
+ task :setup_paths, :roles => :app do
140
+ deprec2.mkdir(deploy_to, :mode => 0775, :group => group, :via => :sudo)
141
+ deprec2.mkdir(shared_path, :mode => 0775, :group => group, :via => :sudo)
142
+ end
143
+
144
+ # Symlink list of files and dirs from shared to current
145
+ #
146
+ # XXX write up explanation
147
+ #
148
+ desc "Setup shared dirs"
149
+ task :setup_shared_dirs, :roles => [:app, :web] do
150
+ if shared_dirs
151
+ shared_dirs.each { |dir| deprec2.mkdir( "#{shared_path}/#{dir}", :via => :sudo ) }
152
+ end
153
+ end
154
+ #
155
+ desc "Symlink shared dirs."
156
+ task :symlink_shared_dirs, :roles => [:app, :web] do
157
+ if shared_dirs
158
+ shared_dirs.each do |dir|
159
+ path = File.split(dir)[0]
160
+ if path != '.'
161
+ deprec2.mkdir("#{current_path}/#{path}")
162
+ end
163
+ run "ln -nfs #{shared_path}/#{dir} #{current_path}/#{dir}"
164
+ end
165
+ end
166
+ end
167
+
168
+ # desc "Symlink shared files."
169
+ # task :symlink_shared_files, :roles => [:app, :web] do
170
+ # if shared_files
171
+ # shared_files.each { |file| run "ln -nfs #{shared_path}/#{file} #{current_path}/#{file}" }
172
+ # end
173
+ # end
174
+
175
+ # database.yml stuff
176
+ #
177
+ task :generate_database_yml, :roles => :app do
178
+ host = Capistrano::CLI.ui.ask 'Enter database host' do |q| q.default = 'localhost' end
179
+ db_name = Capistrano::CLI.ui.ask 'Enter database name' do |q| q.default = "#{application}_#{rails_env}" end
180
+ user = Capistrano::CLI.ui.ask 'Enter database user' do |q| q.default = 'root' end
181
+ pass = Capistrano::CLI.ui.ask 'Enter database pass' do |q| q.default = '' end
182
+ adapter = Capistrano::CLI.ui.ask 'Enter database adapter' do |q| q.default = 'mysql' end
183
+ socket = Capistrano::CLI.ui.ask 'Enter database socket' do |q| q.default = '' end
184
+
185
+ SYSTEM_CONFIG_FILES[:rails].each do |file|
186
+ deprec2.render_template(:rails, file)
187
+ end
188
+ deprec2.push_configs(:thin, SYSTEM_CONFIG_FILES[:thin])
189
+ run "mkdir -p #{deploy_to}/#{shared_dir}/config"
190
+ put database_configuration, "#{deploy_to}/#{shared_dir}/config/database.yml"
191
+ end
192
+
193
+ desc "Link in the production database.yml"
194
+ task :symlink_database_yml, :roles => :app do
195
+ run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
196
+ end
197
+
198
+ desc <<-DESC
199
+ install_rails_stack takes a stock standard ubuntu 'gutsy' 7.10 server
200
+ and installs everything needed to be a Rails machine
201
+ DESC
202
+ task :install_rails_stack do
203
+
204
+ # Generate configs first in case user input is required
205
+ # Then we can go make a cup of tea.
206
+ top.deprec.nginx.config_gen
207
+ top.deprec.logrotate.config_gen
208
+ top.deprec.thin.config_gen_system
209
+ # top.deprec.mongrel.config_gen_system
210
+ # top.deprec.monit.config_gen
211
+
212
+ # Nginx as our web frontend
213
+ top.deprec.nginx.install
214
+ top.deprec.nginx.config
215
+
216
+ # Subversion
217
+ top.deprec.svn.install
218
+
219
+ # Ruby
220
+ top.deprec.ruby.install
221
+ top.deprec.rubygems.install
222
+
223
+ # Backend agnostic load balancing with Swiftiply
224
+ top.deprec.swiftiply.install
225
+
226
+ # Mongrel as our app server
227
+ top.deprec.mongrel.install
228
+ top.deprec.mongrel.config_system
229
+
230
+ # Thin as our app server
231
+ top.deprec.thin.install
232
+ top.deprec.thin.config_system
233
+
234
+ =begin
235
+ # Monit
236
+ top.deprec.monit.install
237
+ top.deprec.monit.config
238
+
239
+ # God
240
+ top.deprec.god.install
241
+ top.deprec.god.config_gen
242
+ top.deprec.god.config
243
+ =end
244
+
245
+ # Install mysql
246
+ top.deprec.mysql.install
247
+ top.deprec.mysql.start
248
+
249
+ # Install rails
250
+ top.deprec.rails.install
251
+
252
+ # Install logrotate
253
+ top.deprec.logrotate.install
254
+ top.deprec.logrotate.config
255
+
256
+ end
257
+
258
+ desc "setup and configure servers"
259
+ task :setup_servers do
260
+ top.deprec.nginx.activate
261
+ top.deprec.swiftiply.config_gen
262
+ top.deprec.swiftiply.config
263
+ top.deprec.thin.config_gen_system
264
+ top.deprec.thin.config_system
265
+ top.deprec.thin.activate_system
266
+ top.deprec.rails.config_gen
267
+ top.deprec.rails.config
268
+ end
269
+ end
270
+
271
+ namespace :db do
272
+
273
+ desc "Create database"
274
+ task :create, :roles => :db do
275
+ run "cd #{deploy_to}/current && rake db:create RAILS_ENV=#{rails_env}"
276
+ end
277
+
278
+ desc "Run database migrations"
279
+ task :migrate, :roles => :db do
280
+ run "cd #{deploy_to}/current && rake db:migrate RAILS_ENV=#{rails_env}"
281
+ end
282
+
283
+ desc "Run database migrations"
284
+ task :schema_load, :roles => :db do
285
+ run "cd #{deploy_to}/current && rake db:schema:load RAILS_ENV=#{rails_env}"
286
+ end
287
+
288
+ desc "Roll database back to previous migration"
289
+ task :rollback, :roles => :db do
290
+ run "cd #{deploy_to}/current && rake db:rollback RAILS_ENV=#{rails_env}"
291
+ end
292
+
293
+ end
294
+
295
+
296
+ namespace :deploy do
297
+ task :restart, :roles => :app, :except => { :no_release => true } do
298
+ top.deprec.thin.restart
299
+ end
300
+ end
301
+ end
302
+ end