capitate 0.1.9 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Capfile +3 -2
- data/History.txt +6 -0
- data/Manifest.txt +28 -11
- data/bin/capitate +13 -61
- data/config/hoe.rb +2 -2
- data/docs/nginx.README +12 -0
- data/docs/recipes/centos.txt +33 -0
- data/docs/recipes/deploy-pending.txt +25 -0
- data/docs/recipes/deploy-web.txt +33 -0
- data/docs/recipes/deploy.txt +159 -0
- data/docs/recipes/docs.txt +26 -0
- data/docs/recipes/imagemagick-centos.txt +20 -0
- data/docs/recipes/imagemagick.txt +8 -0
- data/docs/recipes/index.txt +26 -0
- data/docs/recipes/memcached-centos.txt +32 -0
- data/docs/recipes/memcached.txt +35 -0
- data/docs/recipes/mongrel_cluster-centos.txt +27 -0
- data/docs/recipes/mongrel_cluster.txt +40 -0
- data/docs/recipes/monit-centos.txt +32 -0
- data/docs/recipes/monit.txt +8 -0
- data/docs/recipes/mysql-centos.txt +22 -0
- data/docs/recipes/mysql.txt +58 -0
- data/docs/recipes/nginx-centos.txt +43 -0
- data/docs/recipes/nginx.txt +51 -0
- data/docs/recipes/rails.txt +58 -0
- data/docs/recipes/ruby-centos.txt +22 -0
- data/docs/recipes/ruby.txt +8 -0
- data/docs/recipes/sphinx-centos.txt +35 -0
- data/docs/recipes/sphinx.txt +89 -0
- data/lib/capitate/cap_ext/run_via.rb +14 -0
- data/lib/capitate/plugins/gem.rb +2 -3
- data/lib/capitate/plugins/prompt.rb +24 -0
- data/lib/capitate/plugins/script.rb +29 -15
- data/lib/capitate/plugins/templates.rb +45 -40
- data/lib/capitate/plugins/yum.rb +12 -22
- data/lib/capitate/task_node.rb +28 -9
- data/lib/capitate/version.rb +2 -2
- data/lib/capitate.rb +4 -5
- data/lib/deployment/deploy.rb +42 -0
- data/lib/deployment/install-centos-rubyweb.rb +131 -0
- data/lib/recipes/centos/centos.rb +30 -21
- data/lib/recipes/centos/imagemagick.rb +9 -8
- data/lib/recipes/centos/memcached.rb +11 -21
- data/lib/recipes/centos/mongrel_cluster.rb +7 -11
- data/lib/recipes/centos/monit.rb +13 -18
- data/lib/recipes/centos/mysql.rb +6 -9
- data/lib/recipes/centos/nginx.rb +17 -30
- data/lib/recipes/centos/ruby.rb +14 -19
- data/lib/recipes/centos/sphinx.rb +14 -28
- data/lib/recipes/docs.rb +22 -6
- data/lib/recipes/memcached.rb +14 -8
- data/lib/recipes/mongrel_cluster.rb +11 -14
- data/lib/recipes/mysql.rb +22 -40
- data/lib/recipes/nginx.rb +9 -4
- data/lib/recipes/rails.rb +53 -6
- data/lib/recipes/sphinx.rb +86 -17
- data/lib/templates/capistrano/Capfile +2 -6
- data/lib/templates/monit/cert.sh +1 -1
- data/lib/templates/mysql/install_db.sql.erb +2 -2
- data/lib/templates/sphinx/sphinx.conf.erb +28 -399
- data/lib/templates/sphinx/sphinx_app.initd.centos.erb +1 -1
- data/website/index.html +20 -34
- data/website/index.txt +12 -22
- data/website/stylesheets/screen.css +22 -11
- data/website/template.rhtml +7 -5
- data/website/template_recipe.rhtml +7 -3
- metadata +55 -15
- data/lib/capitate/plugins/package.rb +0 -30
- data/lib/capitate/plugins/profiles.rb +0 -33
- data/lib/capitate/plugins/wget.rb +0 -23
- data/lib/profiles/centos-sick.rb +0 -116
- data/lib/recipes/README +0 -5
- data/lib/recipes/centos/README +0 -3
- data/lib/recipes/gems.rb +0 -20
- data/lib/recipes/packages.rb +0 -39
- data/lib/recipes/recipes.rb +0 -30
- data/lib/templates/centos/setup_for_web.sh +0 -17
- data/lib/templates/centos/sudoers +0 -95
data/lib/recipes/centos/monit.rb
CHANGED
@@ -5,40 +5,35 @@ namespace :monit do
|
|
5
5
|
desc <<-DESC
|
6
6
|
Install monit.
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
monit_password
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
*monit_build_options*: Monit build options.\n
|
9
|
+
*monit_port*: Monit port. _Defaults to 2812_\n
|
10
|
+
@set :monit_port, 2812@\n
|
11
|
+
*monit_password*: Monit password. _Defaults to password prompt_\n
|
12
|
+
@set :monit_password, prompt.password('Monit admin password (to set): ')@\n
|
13
|
+
*monit_conf_dir*: Directory for monitrc files.\n
|
14
|
+
@set :monit_conf_dir, "/etc/monit"@\n
|
16
15
|
DESC
|
17
16
|
task :install do
|
18
17
|
|
19
18
|
# Settings
|
20
19
|
fetch_or_default(:monit_port, 2812)
|
21
|
-
fetch_or_default(:monit_password,
|
22
|
-
|
20
|
+
fetch_or_default(:monit_password, prompt.password('Monit admin password (to set): ', true))
|
21
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
22
|
+
fetch(:monit_build_options)
|
23
23
|
|
24
24
|
# Install dependencies
|
25
25
|
yum.install([ "flex", "byacc" ])
|
26
26
|
|
27
|
-
# Build options
|
28
|
-
monit_options = {
|
29
|
-
:url => "http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz"
|
30
|
-
}
|
31
|
-
|
32
27
|
# Build
|
33
|
-
script.make_install("monit",
|
28
|
+
script.make_install("monit", monit_build_options)
|
34
29
|
|
35
30
|
# Install initscript
|
36
31
|
put template.load("monit/monit.initd.centos.erb"), "/tmp/monit.initd"
|
37
|
-
|
32
|
+
run_via "install -o root /tmp/monit.initd /etc/init.d/monit && rm -f /tmp/monit.initd"
|
38
33
|
|
39
34
|
# Install monitrc
|
40
35
|
put template.load("monit/monitrc.erb"), "/tmp/monitrc"
|
41
|
-
|
36
|
+
run_via "mkdir -p #{monit_conf_dir} && install -o root -m 700 /tmp/monitrc /etc/monitrc && rm -f /tmp/monitrc"
|
42
37
|
|
43
38
|
# Patch initab
|
44
39
|
script.sh("monit/patch_inittab.sh")
|
data/lib/recipes/centos/mysql.rb
CHANGED
@@ -5,26 +5,23 @@ namespace :mysql do
|
|
5
5
|
desc <<-DESC
|
6
6
|
Install mysql.
|
7
7
|
|
8
|
-
mysql_admin_password_set
|
9
|
-
|
10
|
-
set :mysql_admin_password_set, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') }
|
11
|
-
|
8
|
+
*mysql_admin_password_set*: Mysql admin password (to set). _Defaults to password prompt._\n
|
9
|
+
<pre>set :mysql_admin_password_set, prompt.password('Mysql admin password (to set): ')</pre>\n
|
12
10
|
DESC
|
13
11
|
task :install do
|
14
12
|
|
15
13
|
# Settings
|
16
|
-
fetch_or_default(:mysql_admin_password_set,
|
17
|
-
Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') })
|
14
|
+
fetch_or_default(:mysql_admin_password_set, prompt.password('Mysql admin password (to set): ', true))
|
18
15
|
|
19
16
|
# Install through package manager
|
20
17
|
yum.install([ "mysql", "mysql-devel", "mysql-server" ])
|
21
18
|
|
22
19
|
# Install service
|
23
|
-
|
24
|
-
|
20
|
+
run_via "/sbin/chkconfig --level 345 mysqld on"
|
21
|
+
run_via "/sbin/service mysqld start"
|
25
22
|
|
26
23
|
# Set admin password
|
27
|
-
|
24
|
+
run_via "/usr/bin/mysqladmin -u root password #{mysql_admin_password_set}"
|
28
25
|
end
|
29
26
|
|
30
27
|
end
|
data/lib/recipes/centos/nginx.rb
CHANGED
@@ -4,26 +4,21 @@ namespace :nginx do
|
|
4
4
|
|
5
5
|
desc <<-DESC
|
6
6
|
Install nginx, conf, initscript, nginx user and service.
|
7
|
-
nginx_bin_path: Nginx sbin path. Defaults to /sbin/nginx
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
nginx_pid_path
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
nginx_prefix_path: Nginx install prefix. Defaults to /var/nginx
|
20
|
-
|
21
|
-
set :nginx_prefix_path, "/var/nginx"
|
22
|
-
|
8
|
+
*nginx_build_options*: Nginx build options.\n
|
9
|
+
*nginx_bin_path*: Nginx sbin path. _Defaults to /sbin/nginx_\n
|
10
|
+
@set :nginx_bin_path, "/sbin/nginx"@\n
|
11
|
+
*nginx_conf_path*: Path to nginx conf. _Defaults to /etc/nginx/nginx.conf_\n
|
12
|
+
@set :nginx_conf_path, "/etc/nginx/nginx.conf"@\n
|
13
|
+
*nginx_pid_path*: Path to nginx pid file. _Defaults to /var/run/nginx.pid_\n
|
14
|
+
@set :nginx_pid_path, "/var/run/nginx.pid"@\n
|
15
|
+
*nginx_prefix_path*: Nginx install prefix. _Defaults to /var/nginx_\n
|
16
|
+
@set :nginx_prefix_path, "/var/nginx"@\n
|
23
17
|
DESC
|
24
18
|
task :install do
|
25
19
|
|
26
20
|
# Settings
|
21
|
+
fetch(:nginx_build_options)
|
27
22
|
fetch_or_default(:nginx_bin_path, "/sbin/nginx")
|
28
23
|
fetch_or_default(:nginx_conf_path, "/etc/nginx/nginx.conf")
|
29
24
|
fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
|
@@ -32,30 +27,22 @@ namespace :nginx do
|
|
32
27
|
# Install dependencies
|
33
28
|
yum.install([ "pcre-devel", "openssl", "openssl-devel" ])
|
34
29
|
|
35
|
-
# Build options
|
36
|
-
nginx_options = {
|
37
|
-
:url => "http://sysoev.ru/nginx/nginx-0.5.35.tar.gz",
|
38
|
-
:configure_options => "--sbin-path=#{nginx_bin_path} --conf-path=#{nginx_conf_path} \
|
39
|
-
--pid-path=#{nginx_pid_path} --error-log-path=/var/log/nginx_master_error.log --lock-path=/var/lock/nginx \
|
40
|
-
--prefix=#{nginx_prefix_path} --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1 --with-http_ssl_module"
|
41
|
-
}
|
42
|
-
|
43
30
|
# Build
|
44
|
-
script.make_install("nginx",
|
31
|
+
script.make_install("nginx", nginx_build_options)
|
45
32
|
|
46
33
|
# Install initscript, and turn it on
|
47
34
|
put template.load("nginx/nginx.initd.erb"), "/tmp/nginx.initd"
|
48
|
-
|
49
|
-
|
35
|
+
run_via "install -o root /tmp/nginx.initd /etc/init.d/nginx && rm -f /tmp/nginx.initd"
|
36
|
+
run_via "/sbin/chkconfig --level 345 nginx on"
|
50
37
|
|
51
38
|
# Setup nginx
|
52
|
-
|
53
|
-
|
39
|
+
run_via "mkdir -p /etc/nginx/vhosts"
|
40
|
+
run_via "echo \"# Blank nginx conf; work-around for nginx conf include issue\" > /etc/nginx/vhosts/blank.conf"
|
54
41
|
put template.load("nginx/nginx.conf.erb", binding), "/tmp/nginx.conf"
|
55
|
-
|
42
|
+
run_via "install -o root -m 644 /tmp/nginx.conf #{nginx_conf_path} && rm -f /tmp/nginx.conf"
|
56
43
|
|
57
44
|
# Create nginx user
|
58
|
-
|
45
|
+
run_via "id nginx || /usr/sbin/adduser -r nginx"
|
59
46
|
end
|
60
47
|
|
61
48
|
# Restart nginx
|
data/lib/recipes/centos/ruby.rb
CHANGED
@@ -2,35 +2,30 @@ namespace :ruby do
|
|
2
2
|
|
3
3
|
namespace :centos do
|
4
4
|
|
5
|
-
desc
|
5
|
+
desc <<-DESC
|
6
|
+
Install ruby and rubygems.
|
7
|
+
|
8
|
+
*ruby_build_options*: Ruby build options.\n
|
9
|
+
*rubygems_build_options*: Rubygems build options.\n
|
10
|
+
DESC
|
6
11
|
task :install do
|
12
|
+
|
13
|
+
# Settings
|
14
|
+
fetch(:ruby_build_options)
|
15
|
+
fetch(:rubygems_build_options)
|
7
16
|
|
8
17
|
# Install dependencies
|
9
18
|
yum.install([ "zlib", "zlib-devel" ])
|
10
19
|
|
11
|
-
ruby_options = {
|
12
|
-
:url => "http://capigen.s3.amazonaws.com/ruby-1.8.6-p110.tar.gz",
|
13
|
-
:build_dest => "/usr/src",
|
14
|
-
:configure_options => "--prefix=/usr",
|
15
|
-
:clean => false
|
16
|
-
}
|
17
|
-
|
18
20
|
# Install ruby 1.8.6
|
19
|
-
script.make_install("ruby",
|
20
|
-
|
21
|
-
# Fix openssl
|
22
|
-
script.sh("ruby/fix_openssl.sh")
|
23
|
-
|
24
|
-
rubygems_options = {
|
25
|
-
:url => "http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz"
|
26
|
-
}
|
21
|
+
script.make_install("ruby", ruby_build_options)
|
27
22
|
|
28
23
|
# Install rubygems
|
29
|
-
script.install("rubygems",
|
30
|
-
|
24
|
+
script.install("rubygems", rubygems_build_options) do |dir|
|
25
|
+
run_via "echo 'Running setup...' && cd #{dir} && ruby setup.rb > install.log"
|
31
26
|
end
|
32
27
|
|
33
|
-
end
|
28
|
+
end
|
34
29
|
|
35
30
|
end
|
36
31
|
|
@@ -3,59 +3,45 @@ namespace :sphinx do
|
|
3
3
|
namespace :centos do
|
4
4
|
|
5
5
|
desc <<-DESC
|
6
|
-
Install sphinx
|
7
|
-
|
8
|
-
sphinx_prefix
|
9
|
-
|
10
|
-
set :sphinx_prefix, "/usr/local/sphinx"
|
11
|
-
|
6
|
+
Install sphinx.\n
|
7
|
+
*sphinx_build_options*: Sphinx build options.\n
|
8
|
+
*sphinx_prefix*: Sphinx install prefix. _Defaults to "/usr/local/sphinx"_\n
|
12
9
|
DESC
|
13
10
|
task :install do
|
14
11
|
|
15
12
|
# Settings
|
13
|
+
fetch(:sphinx_build_options)
|
16
14
|
fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
|
17
15
|
|
18
16
|
# Install dependencies
|
19
17
|
yum.install([ "gcc-c++" ])
|
20
18
|
|
21
|
-
# Build options
|
22
|
-
sphinx_options = {
|
23
|
-
:url => "http://www.sphinxsearch.com/downloads/sphinx-0.9.7.tar.gz",
|
24
|
-
:configure_options => "--with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql \
|
25
|
-
--prefix=#{sphinx_prefix}"
|
26
|
-
}
|
27
|
-
|
28
19
|
# Build
|
29
|
-
script.make_install("sphinx",
|
20
|
+
script.make_install("sphinx", sphinx_build_options)
|
30
21
|
end
|
31
22
|
|
32
23
|
desc <<-DESC
|
33
|
-
Setup sphinx for application
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
set :sphinx_prefix, "/usr/local/sphinx"
|
38
|
-
|
24
|
+
Setup sphinx for application.\n
|
25
|
+
*sphinx_prefix*: Sphinx install prefix. _Defaults to "/usr/local/sphinx"_\n
|
26
|
+
*sphinx_pid_path*: Directory to sphinx pid. _Defaults to "[shared_path]/pids/searchd.pid"_\n
|
27
|
+
*sphinx_conf_path*: Path to sphinx.conf. _Defaults to "[shared_path]/config/sphinx.conf"_\n
|
39
28
|
DESC
|
40
29
|
task :setup do
|
41
30
|
|
42
31
|
# Settings
|
43
32
|
fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
|
44
|
-
|
45
|
-
#
|
46
|
-
set :sphinx_bin_path, "#{sphinx_prefix}/bin"
|
47
|
-
set :sphinx_conf_path, "#{shared_path}/config/sphinx.conf"
|
48
|
-
set :sphinx_pid_path, "#{shared_path}/pids/searchd.pid"
|
33
|
+
fetch_or_default(:sphinx_pid_path, "#{shared_path}/pids/searchd.pid")
|
34
|
+
fetch_or_default(:sphinx_conf_path, "#{shared_path}/config/sphinx.conf")
|
49
35
|
|
50
36
|
# Install initscript
|
51
37
|
put template.load("sphinx/sphinx_app.initd.centos.erb"), "/tmp/sphinx.initd"
|
52
|
-
|
38
|
+
run_via "install -o root /tmp/sphinx.initd /etc/init.d/sphinx_#{application}"
|
53
39
|
|
54
40
|
# Enable service
|
55
|
-
|
41
|
+
run_via "/sbin/chkconfig --level 345 sphinx_#{application} on"
|
56
42
|
|
57
43
|
# Create app indexes dir
|
58
|
-
|
44
|
+
run_via "mkdir -p #{shared_path}/var/index"
|
59
45
|
end
|
60
46
|
end
|
61
47
|
|
data/lib/recipes/docs.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
namespace :docs do
|
2
2
|
|
3
|
-
desc
|
3
|
+
desc <<-DESC
|
4
|
+
Generate documentation for all currently loaded recipes. Assumes textile formatting.
|
5
|
+
|
6
|
+
*docs_recipes_dir*: Destination directory. _Defaults to "docs/recipes"_
|
7
|
+
|
8
|
+
@set :docs_recipes_dir, "docs/recipes"@
|
9
|
+
|
10
|
+
*docs_recipes_clear*: Whether to clear destination before generating.
|
11
|
+
|
12
|
+
@set :docs_recipes_clear, true@
|
13
|
+
|
14
|
+
DESC
|
4
15
|
task :recipes do
|
5
|
-
top_node = capitate.task_tree
|
6
16
|
|
7
|
-
|
8
|
-
|
9
|
-
|
17
|
+
# Settings
|
18
|
+
fetch_or_default(:docs_recipes_dir, "docs/recipes")
|
19
|
+
fetch_or_default(:docs_recipes_clear, true)
|
20
|
+
|
21
|
+
# Build task tree
|
22
|
+
top_node = capitate.task_tree
|
23
|
+
|
24
|
+
FileUtils.rm_rf(docs_recipes_dir) if docs_recipes_clear
|
25
|
+
FileUtils.mkdir_p(docs_recipes_dir)
|
10
26
|
|
11
|
-
top_node.write_doc(
|
27
|
+
top_node.write_doc(docs_recipes_dir, "index", "Recipes")
|
12
28
|
|
13
29
|
end
|
14
30
|
end
|
data/lib/recipes/memcached.rb
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
namespace :memcached do
|
2
2
|
|
3
3
|
desc <<-DESC
|
4
|
-
|
4
|
+
Generate and install memcached monitrc.
|
5
5
|
|
6
|
-
memcached_pid_path
|
6
|
+
*memcached_pid_path*: Path to memcached pid file. _Defaults to /var/run/memcached.pid_
|
7
7
|
|
8
|
-
|
8
|
+
@set :memcached_pid_path, "/var/run/memcached.pid"@
|
9
9
|
|
10
|
-
memcached_port
|
11
|
-
|
12
|
-
|
10
|
+
*memcached_port*: Memcached port. _Defaults to 11211_
|
11
|
+
|
12
|
+
@set :memcached_port, 11211@
|
13
|
+
|
14
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_
|
15
|
+
|
16
|
+
@set :monit_conf_dir, "/etc/monit"@
|
17
|
+
|
13
18
|
DESC
|
14
19
|
task :install_monit do
|
15
20
|
|
16
21
|
# Settings
|
17
22
|
fetch_or_default(:memcached_pid_path, "/var/run/memcached.pid")
|
18
23
|
fetch_or_default(:memcached_port, 11211)
|
24
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
19
25
|
|
20
|
-
put template.load("memcached/memcached.monitrc.erb"
|
21
|
-
|
26
|
+
put template.load("memcached/memcached.monitrc.erb"), "/tmp/memcached.monitrc"
|
27
|
+
run_via "install -o root /tmp/memcached.monitrc #{monit_conf_dir}/memcached.monitrc"
|
22
28
|
end
|
23
29
|
|
24
30
|
end
|
@@ -4,19 +4,15 @@ namespace :mongrel_cluster do
|
|
4
4
|
desc <<-DESC
|
5
5
|
Create monit configuration for mongrel cluster.
|
6
6
|
|
7
|
-
mongrel_size
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
mongrel_port
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
mongrel_config_script: Config script to load with mongrel.
|
17
|
-
|
18
|
-
set :mongrel_config_script, "config/mongrel_handler.rb"
|
19
|
-
|
7
|
+
*mongrel_size*: Number of mongrels.\n
|
8
|
+
@set :mongrel_size, 3@\n
|
9
|
+
*mongrel_port*: Starting port for mongrels. If there are 3 mongrels with port 9000, then instances
|
10
|
+
will be at 9000, 9001, and 9002\n
|
11
|
+
@set :mongrel_port, 9000@\n
|
12
|
+
*mongrel_config_script*: Config script to load with mongrel. _Defaults to nil_\n
|
13
|
+
@set :mongrel_config_script, "config/mongrel_handler.rb"@\n
|
14
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
|
15
|
+
@set :monit_conf_dir, "/etc/monit"@\n
|
20
16
|
DESC
|
21
17
|
task :setup_monit do
|
22
18
|
|
@@ -29,6 +25,7 @@ namespace :mongrel_cluster do
|
|
29
25
|
fetch(:mongrel_size)
|
30
26
|
fetch(:mongrel_port)
|
31
27
|
fetch_or_default(:mongrel_config_script, nil)
|
28
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
32
29
|
|
33
30
|
processes = []
|
34
31
|
ports = (0...mongrel_size).collect { |i| mongrel_port + i }
|
@@ -60,7 +57,7 @@ namespace :mongrel_cluster do
|
|
60
57
|
set :processes, processes
|
61
58
|
|
62
59
|
put template.load("mongrel/mongrel_cluster.monitrc.erb"), "/tmp/mongrel_cluster_#{application}.monitrc"
|
63
|
-
sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc /
|
60
|
+
sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc #{monit_conf_dir}/mongrel_cluster_#{application}.monitrc"
|
64
61
|
end
|
65
62
|
|
66
63
|
end
|
data/lib/recipes/mysql.rb
CHANGED
@@ -4,53 +4,35 @@ namespace :mysql do
|
|
4
4
|
desc <<-DESC
|
5
5
|
Install mysql monit hooks.
|
6
6
|
|
7
|
-
db_port
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
set :mysql_pid_path, "/var/run/mysqld/mysqld.pid"
|
14
|
-
|
7
|
+
*db_port*: Mysql port. _Defaults to 3306_\n
|
8
|
+
*mysql_pid_path*: Path to mysql pid file. _Defaults to /var/run/mysqld/mysqld.pid_\n
|
9
|
+
@set :mysql_pid_path, "/var/run/mysqld/mysqld.pid"@\n
|
10
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_\n
|
11
|
+
@set :monit_conf_dir, "/etc/monit"@\n
|
15
12
|
DESC
|
16
13
|
task :install_monit do
|
17
14
|
|
18
15
|
# Settings
|
19
16
|
fetch_or_default(:mysql_pid_path, "/var/run/mysqld/mysqld.pid")
|
20
|
-
fetch_or_default(:db_port, 3306)
|
17
|
+
fetch_or_default(:db_port, 3306)
|
18
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
21
19
|
|
22
20
|
put template.load("mysql/mysql.monitrc.erb", binding), "/tmp/mysql.monitrc"
|
23
|
-
|
21
|
+
run_via "install -o root /tmp/mysql.monitrc #{monit_conf_dir}/mysql.monitrc"
|
24
22
|
end
|
25
23
|
|
26
24
|
desc <<-DESC
|
27
|
-
Create database user, and
|
28
|
-
|
29
|
-
db_name
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
set :db_pass, "the_password"
|
40
|
-
|
41
|
-
web_host: Web host to provide access privileges to (if recipe used in context of web app).
|
42
|
-
Defaults to nil. TODO: Support multiple web hosts
|
43
|
-
|
44
|
-
set :web_host, 10.0.6.100
|
45
|
-
|
46
|
-
db_host: Database host (to provide itself with access).
|
47
|
-
|
48
|
-
set :db_host, 10.0.6.101
|
49
|
-
|
50
|
-
mysql_admin_password: Mysql admin password (to use to connect). Defaults to password prompt.
|
51
|
-
|
52
|
-
set :mysql_admin_password, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password: ') })
|
53
|
-
|
25
|
+
Create database, database user, and set grant permissions.
|
26
|
+
|
27
|
+
*db_name*: Database name (application).\n
|
28
|
+
*db_user*: Database user (application).\n
|
29
|
+
*db_pass*: Database password (application).\n
|
30
|
+
*grant_locations*: Grant locations. _Defaults to localhost_\n
|
31
|
+
@set :grant_locations, [ "localhost", "192.168.1.111" ]@\n
|
32
|
+
*grant_priv_type*: Grant privilege types. _Defaults to ALL_\n
|
33
|
+
@set :grant_priv_type, "ALL"@\n
|
34
|
+
*mysql_admin_password*: Mysql admin password (to use to connect). Defaults to password prompt.\n
|
35
|
+
@set :mysql_admin_password, prompt.password('Mysql admin password: '))@
|
54
36
|
DESC
|
55
37
|
task :setup do
|
56
38
|
|
@@ -58,9 +40,9 @@ namespace :mysql do
|
|
58
40
|
fetch(:db_name)
|
59
41
|
fetch(:db_user)
|
60
42
|
fetch(:db_pass)
|
61
|
-
|
62
|
-
fetch_or_default(:
|
63
|
-
fetch_or_default(:
|
43
|
+
fetch_or_default(:mysql_admin_password, prompt.password('Mysql admin password: '))
|
44
|
+
fetch_or_default(:grant_locations, [ "localhost" ])
|
45
|
+
fetch_or_default(:grant_priv_type, "ALL")
|
64
46
|
|
65
47
|
# Add localhost to grant locations
|
66
48
|
set :locations_for_grant, [ "localhost", web_host, db_host ].compact
|
data/lib/recipes/nginx.rb
CHANGED
@@ -4,18 +4,23 @@ namespace :nginx do
|
|
4
4
|
desc <<-DESC
|
5
5
|
Install nginx monit hooks.
|
6
6
|
|
7
|
-
nginx_pid_path
|
7
|
+
*nginx_pid_path*: Path to nginx pid file. _Defaults to /var/run/nginx.pid_
|
8
|
+
|
9
|
+
@set :nginx_pid_path, "/var/run/nginx.pid"@
|
10
|
+
|
11
|
+
*monit_conf_dir*: Destination for monitrc. _Defaults to "/etc/monit"_
|
12
|
+
|
13
|
+
@set :monit_conf_dir, "/etc/monit"@
|
8
14
|
|
9
|
-
set :nginx_pid_path, "/var/run/nginx.pid"
|
10
|
-
|
11
15
|
DESC
|
12
16
|
task :install_monit do
|
13
17
|
|
14
18
|
# Settings
|
15
19
|
fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
|
20
|
+
fetch_or_default(:monit_conf_dir, "/etc/monit")
|
16
21
|
|
17
22
|
put template.load("nginx/nginx.monitrc.erb", binding), "/tmp/nginx.monitrc"
|
18
|
-
|
23
|
+
run_via "install -o root /tmp/nginx.monitrc #{monit_conf_dir}/nginx.monitrc"
|
19
24
|
end
|
20
25
|
|
21
26
|
desc <<-DESC
|
data/lib/recipes/rails.rb
CHANGED
@@ -4,17 +4,17 @@ namespace :rails do
|
|
4
4
|
desc <<-DESC
|
5
5
|
Create database yaml in shared path.
|
6
6
|
|
7
|
-
db_name
|
7
|
+
*db_name*: Database name (rails).
|
8
8
|
|
9
|
-
|
9
|
+
@set :db_name, "app_db_name"@
|
10
10
|
|
11
|
-
db_user
|
11
|
+
*db_user*: Database user (rails).
|
12
12
|
|
13
|
-
|
13
|
+
@set :db_user, "app_db_user"@
|
14
14
|
|
15
|
-
db_pass
|
15
|
+
*db_pass*: Database password (rails).
|
16
16
|
|
17
|
-
|
17
|
+
@set :db_pass, "the_password"@
|
18
18
|
|
19
19
|
DESC
|
20
20
|
task :setup do
|
@@ -32,4 +32,51 @@ namespace :rails do
|
|
32
32
|
task :update_code do
|
33
33
|
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
34
34
|
end
|
35
|
+
|
36
|
+
desc <<-DESC
|
37
|
+
Tail production log files. (http://errtheblog.com/posts/19-streaming-capistrano)
|
38
|
+
DESC
|
39
|
+
task :tail_logs, :roles => :web do
|
40
|
+
run "tail -f #{shared_path}/log/production.log" do |channel, stream, data|
|
41
|
+
puts # for an extra line break before the host name
|
42
|
+
puts "#{channel[:host]}: #{data}"
|
43
|
+
break if stream == :err
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
desc <<-DESC
|
49
|
+
Check production log files in TextMate. (http://errtheblog.com/posts/19-streaming-capistrano)
|
50
|
+
DESC
|
51
|
+
task :mate_logs, :roles => :app do
|
52
|
+
|
53
|
+
require 'tempfile'
|
54
|
+
tmp = Tempfile.open('w')
|
55
|
+
logs = Hash.new { |h,k| h[k] = '' }
|
56
|
+
|
57
|
+
run "tail -n500 #{shared_path}/log/production.log" do |channel, stream, data|
|
58
|
+
logs[channel[:host]] << data
|
59
|
+
break if stream == :err
|
60
|
+
end
|
61
|
+
|
62
|
+
logs.each do |host, log|
|
63
|
+
tmp.write("--- #{host} ---\n\n")
|
64
|
+
tmp.write(log + "\n")
|
65
|
+
end
|
66
|
+
|
67
|
+
exec "mate -w #{tmp.path}"
|
68
|
+
tmp.close
|
69
|
+
end
|
70
|
+
|
71
|
+
desc <<-DESC
|
72
|
+
Remotely console. (http://errtheblog.com/posts/19-streaming-capistrano)
|
73
|
+
DESC
|
74
|
+
task :console, :roles => :app do
|
75
|
+
input = ''
|
76
|
+
run "cd #{current_path} && ./script/console #{ENV['RAILS_ENV']}" do |channel, stream, data|
|
77
|
+
next if data.chomp == input.chomp || data.chomp == ''
|
78
|
+
print data
|
79
|
+
channel.send_data(input = $stdin.gets) if data =~ /^(>|\?)>/
|
80
|
+
end
|
81
|
+
end
|
35
82
|
end
|