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.
- data/CHANGELOG +170 -0
- data/COPYING +19 -0
- data/LICENSE +339 -0
- data/README +136 -0
- data/THANKS +5 -0
- data/bin/depify +133 -0
- data/docs/ANNOUNCE.deprec2 +47 -0
- data/docs/README.install +88 -0
- data/docs/README.nagios +28 -0
- data/docs/README.rails +20 -0
- data/docs/README.svn +31 -0
- data/docs/ROADMAP.txt +74 -0
- data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
- data/docs/deprec-1.x/notes.txt +12 -0
- data/docs/deprec_banner.gif +0 -0
- data/lib/deprec.rb +8 -0
- data/lib/deprec/capistrano_extensions.rb +378 -0
- data/lib/deprec/recipes.rb +40 -0
- data/lib/deprec/recipes/aoe.rb +117 -0
- data/lib/deprec/recipes/apache.rb +179 -0
- data/lib/deprec/recipes/ar_sendmail.rb +65 -0
- data/lib/deprec/recipes/canonical.rb +57 -0
- data/lib/deprec/recipes/deprec.rb +155 -0
- data/lib/deprec/recipes/deprecated.rb +71 -0
- data/lib/deprec/recipes/example.rb +115 -0
- data/lib/deprec/recipes/git.rb +168 -0
- data/lib/deprec/recipes/gitosis.rb +47 -0
- data/lib/deprec/recipes/god.rb +107 -0
- data/lib/deprec/recipes/heartbeat.rb +138 -0
- data/lib/deprec/recipes/iptables.rb +53 -0
- data/lib/deprec/recipes/logrotate.rb +51 -0
- data/lib/deprec/recipes/lvm.rb +20 -0
- data/lib/deprec/recipes/memcached.rb +102 -0
- data/lib/deprec/recipes/mongrel.rb +209 -0
- data/lib/deprec/recipes/monit.rb +130 -0
- data/lib/deprec/recipes/mysql.rb +115 -0
- data/lib/deprec/recipes/nagios.rb +302 -0
- data/lib/deprec/recipes/network.rb +84 -0
- data/lib/deprec/recipes/nginx.rb +154 -0
- data/lib/deprec/recipes/ntp.rb +96 -0
- data/lib/deprec/recipes/php.rb +99 -0
- data/lib/deprec/recipes/postfix.rb +105 -0
- data/lib/deprec/recipes/rails.rb +302 -0
- data/lib/deprec/recipes/ruby.rb +66 -0
- data/lib/deprec/recipes/sphinx.rb +83 -0
- data/lib/deprec/recipes/ssh.rb +93 -0
- data/lib/deprec/recipes/svn.rb +169 -0
- data/lib/deprec/recipes/swiftiply.rb +108 -0
- data/lib/deprec/recipes/thin.rb +201 -0
- data/lib/deprec/recipes/trac.rb +277 -0
- data/lib/deprec/recipes/ubuntu.rb +20 -0
- data/lib/deprec/recipes/users.rb +90 -0
- data/lib/deprec/recipes/utils.rb +39 -0
- data/lib/deprec/recipes/xen.rb +259 -0
- data/lib/deprec/templates/aoe/aoe-init +55 -0
- data/lib/deprec/templates/aoe/fence_aoemask +351 -0
- data/lib/deprec/templates/apache/httpd-vhost-app.conf.erb +144 -0
- data/lib/deprec/templates/apache/httpd.conf +465 -0
- data/lib/deprec/templates/apache/index.html.erb +37 -0
- data/lib/deprec/templates/apache/master.css +72 -0
- data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
- data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
- data/lib/deprec/templates/coraid/aoe-init +55 -0
- data/lib/deprec/templates/deprec/caprc.erb +14 -0
- data/lib/deprec/templates/god/god-init-script +71 -0
- data/lib/deprec/templates/god/god-notifications +0 -0
- data/lib/deprec/templates/god/god_mongrel.erb +81 -0
- data/lib/deprec/templates/god/god_mysql.erb +50 -0
- data/lib/deprec/templates/god/god_nginx.erb +61 -0
- data/lib/deprec/templates/god/god_thin.erb +80 -0
- data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
- data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
- data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
- data/lib/deprec/templates/iptables/iptables.up.erb +41 -0
- data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
- data/lib/deprec/templates/memcached/memcached-init-script +65 -0
- data/lib/deprec/templates/memcached/memcached.conf.erb +46 -0
- data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster.logrotate.d +14 -0
- data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
- data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
- data/lib/deprec/templates/monit/monit-init-script +104 -0
- data/lib/deprec/templates/monit/monitrc.erb +227 -0
- data/lib/deprec/templates/monit/nothing +0 -0
- data/lib/deprec/templates/mysql/create_databases.sql +20 -0
- data/lib/deprec/templates/mysql/database.yml.prod +6 -0
- data/lib/deprec/templates/mysql/database.yml.stage +6 -0
- data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
- data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
- data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
- data/lib/deprec/templates/nagios/cgi.cfg.erb +321 -0
- data/lib/deprec/templates/nagios/commands.cfg.erb +240 -0
- data/lib/deprec/templates/nagios/contacts.cfg.erb +75 -0
- data/lib/deprec/templates/nagios/hosts.cfg.erb +70 -0
- data/lib/deprec/templates/nagios/htpasswd.users +1 -0
- data/lib/deprec/templates/nagios/localhost.cfg.erb +157 -0
- data/lib/deprec/templates/nagios/nagios.cfg.erb +1274 -0
- data/lib/deprec/templates/nagios/nagios_apache_vhost.conf.erb +45 -0
- data/lib/deprec/templates/nagios/nrpe.cfg.erb +208 -0
- data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
- data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
- data/lib/deprec/templates/nagios/services.cfg.erb +7 -0
- data/lib/deprec/templates/nagios/templates.cfg.erb +190 -0
- data/lib/deprec/templates/nagios/timeperiods.cfg.erb +94 -0
- data/lib/deprec/templates/network/hostname.erb +1 -0
- data/lib/deprec/templates/network/hosts.erb +2 -0
- data/lib/deprec/templates/network/interfaces.erb +18 -0
- data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
- data/lib/deprec/templates/nginx/mime.types.erb +70 -0
- data/lib/deprec/templates/nginx/nginx-init-script +62 -0
- data/lib/deprec/templates/nginx/nginx.conf.erb +53 -0
- data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
- data/lib/deprec/templates/nginx/nothing.conf +1 -0
- data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +45 -0
- data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
- data/lib/deprec/templates/postfix/aliases.erb +3 -0
- data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
- data/lib/deprec/templates/postfix/main.cf.erb +41 -0
- data/lib/deprec/templates/postfix/master.cf.erb +77 -0
- data/lib/deprec/templates/rails/database.yml.erb +6 -0
- data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
- data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
- data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
- data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
- data/lib/deprec/templates/swiftiply/swiftiply-init-script +61 -0
- data/lib/deprec/templates/swiftiply/swiftiply.yml.erb +11 -0
- data/lib/deprec/templates/thin/thin-init-script +51 -0
- data/lib/deprec/templates/thin/thin.yml.erb +11 -0
- data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
- data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
- data/lib/deprec/templates/trac/trac.ini.erb +169 -0
- data/lib/deprec/templates/trac/trac_deprec.png +0 -0
- data/lib/deprec/templates/trac/tracd-init.erb +43 -0
- data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
- data/lib/deprec/templates/xen/15-disable-hwclock +40 -0
- data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
- data/lib/deprec/templates/xen/xen-tools.conf.erb +220 -0
- data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
- data/lib/deprec/templates/xen/xend-init.erb +69 -0
- data/lib/deprec/templates/xen/xendomains.erb +137 -0
- data/lib/deprec/templates/xen/xm.tmpl.erb +85 -0
- data/lib/vmbuilder_plugins/all.rb +20 -0
- data/lib/vmbuilder_plugins/apt.rb +93 -0
- data/lib/vmbuilder_plugins/emerge.rb +76 -0
- data/lib/vmbuilder_plugins/gem.rb +90 -0
- data/lib/vmbuilder_plugins/std.rb +203 -0
- 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
|