capitate 0.1.7

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 (101) hide show
  1. data/Capfile +24 -0
  2. data/History.txt +22 -0
  3. data/License.txt +20 -0
  4. data/Manifest.txt +100 -0
  5. data/README.txt +1 -0
  6. data/Rakefile +4 -0
  7. data/bin/capitate +46 -0
  8. data/config/hoe.rb +70 -0
  9. data/config/requirements.rb +17 -0
  10. data/lib/capitate/cap_ext/connections.rb +95 -0
  11. data/lib/capitate/cap_ext/extension_proxy.rb +15 -0
  12. data/lib/capitate/cap_ext/variables.rb +59 -0
  13. data/lib/capitate/config.rb +106 -0
  14. data/lib/capitate/plugins/base.rb +85 -0
  15. data/lib/capitate/plugins/gem.rb +25 -0
  16. data/lib/capitate/plugins/package.rb +30 -0
  17. data/lib/capitate/plugins/profiles.rb +33 -0
  18. data/lib/capitate/plugins/script.rb +118 -0
  19. data/lib/capitate/plugins/templates.rb +98 -0
  20. data/lib/capitate/plugins/wget.rb +23 -0
  21. data/lib/capitate/plugins/yum.rb +87 -0
  22. data/lib/capitate/recipes.rb +9 -0
  23. data/lib/capitate/version.rb +9 -0
  24. data/lib/capitate.rb +32 -0
  25. data/lib/doc/centos/memcached.yml +18 -0
  26. data/lib/doc/centos/mongrel_cluster.yml +11 -0
  27. data/lib/doc/centos/monit.yml +12 -0
  28. data/lib/doc/centos/mysql.yml +6 -0
  29. data/lib/doc/centos/nginx.yml +25 -0
  30. data/lib/doc/centos/sphinx.yml +14 -0
  31. data/lib/doc/gems.yml +7 -0
  32. data/lib/doc/install.yml +11 -0
  33. data/lib/doc/memcached.yml +13 -0
  34. data/lib/doc/mongrel_cluster.yml +12 -0
  35. data/lib/doc/mysql.yml +46 -0
  36. data/lib/doc/nginx.yml +23 -0
  37. data/lib/doc/packages.yml +17 -0
  38. data/lib/doc/rails.yml +15 -0
  39. data/lib/profiles/centos-sick.rb +114 -0
  40. data/lib/recipes/README +5 -0
  41. data/lib/recipes/centos/README +3 -0
  42. data/lib/recipes/centos/centos.rb +44 -0
  43. data/lib/recipes/centos/imagemagick.rb +19 -0
  44. data/lib/recipes/centos/memcached.rb +31 -0
  45. data/lib/recipes/centos/mongrel_cluster.rb +34 -0
  46. data/lib/recipes/centos/monit.rb +42 -0
  47. data/lib/recipes/centos/mysql.rb +25 -0
  48. data/lib/recipes/centos/nginx.rb +45 -0
  49. data/lib/recipes/centos/ruby.rb +37 -0
  50. data/lib/recipes/centos/sphinx.rb +49 -0
  51. data/lib/recipes/deploy.rb +18 -0
  52. data/lib/recipes/gems.rb +11 -0
  53. data/lib/recipes/install.rb +18 -0
  54. data/lib/recipes/memcached.rb +14 -0
  55. data/lib/recipes/mongrel_cluster.rb +33 -0
  56. data/lib/recipes/mysql.rb +33 -0
  57. data/lib/recipes/nginx.rb +40 -0
  58. data/lib/recipes/packages.rb +24 -0
  59. data/lib/recipes/rails.rb +20 -0
  60. data/lib/recipes/sphinx.rb +38 -0
  61. data/lib/templates/capistrano/Capfile +26 -0
  62. data/lib/templates/centos/setup_for_web.sh +17 -0
  63. data/lib/templates/centos/sudoers +95 -0
  64. data/lib/templates/memcached/memcached.initd.centos.erb +70 -0
  65. data/lib/templates/memcached/memcached.monitrc.erb +4 -0
  66. data/lib/templates/mongrel/mongrel_cluster.initd.erb +61 -0
  67. data/lib/templates/mongrel/mongrel_cluster.monitrc.erb +15 -0
  68. data/lib/templates/mongrel/mongrel_cluster.yml.erb +10 -0
  69. data/lib/templates/monit/cert.sh +14 -0
  70. data/lib/templates/monit/monit.cnf +34 -0
  71. data/lib/templates/monit/monit.initd.centos.erb +68 -0
  72. data/lib/templates/monit/monitrc.erb +28 -0
  73. data/lib/templates/monit/patch_inittab.sh +15 -0
  74. data/lib/templates/mysql/install_db.sql.erb +7 -0
  75. data/lib/templates/mysql/mysql.monitrc.erb +6 -0
  76. data/lib/templates/nginx/nginx.conf.erb +88 -0
  77. data/lib/templates/nginx/nginx.initd.erb +62 -0
  78. data/lib/templates/nginx/nginx.monitrc.erb +4 -0
  79. data/lib/templates/nginx/nginx_vhost.conf.erb +95 -0
  80. data/lib/templates/rails/database.yml.erb +42 -0
  81. data/lib/templates/ruby/fix_openssl.sh +12 -0
  82. data/lib/templates/sphinx/sphinx.conf.erb +498 -0
  83. data/lib/templates/sphinx/sphinx.monitrc.erb +4 -0
  84. data/lib/templates/sphinx/sphinx_app.initd.centos.erb +67 -0
  85. data/script/destroy +14 -0
  86. data/script/generate +14 -0
  87. data/script/txt2html +74 -0
  88. data/setup.rb +1585 -0
  89. data/tasks/capitate.rake +10 -0
  90. data/tasks/deployment.rake +34 -0
  91. data/tasks/environment.rake +7 -0
  92. data/tasks/website.rake +17 -0
  93. data/test/test_helper.rb +2 -0
  94. data/test/test_recipes.rb +11 -0
  95. data/test/test_templates.rb +29 -0
  96. data/website/index.html +161 -0
  97. data/website/index.txt +86 -0
  98. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  99. data/website/stylesheets/screen.css +138 -0
  100. data/website/template.rhtml +48 -0
  101. metadata +160 -0
@@ -0,0 +1,17 @@
1
+ install:
2
+ packages_type: |
3
+ Package manager type.
4
+ Currently can only be :yum.
5
+ TODO: Support more package managers.
6
+
7
+ set :packages_type, :yum
8
+
9
+ packages_remove: |
10
+ Packages to remove
11
+
12
+ set :packages_remove, [ "openoffice.org-*", "ImageMagick" ]
13
+
14
+ packages_add: |
15
+ Packages to add.
16
+
17
+ set :packages_add, [ "gcc", "kernel-devel", "libevent-devel", "libxml2-devel" ]
data/lib/doc/rails.yml ADDED
@@ -0,0 +1,15 @@
1
+ setup:
2
+ db_name: |
3
+ Database name (rails).
4
+
5
+ set :db_name, "app_db_name"
6
+
7
+ db_user: |
8
+ Database user (rails).
9
+
10
+ set :db_user, "app_db_user"
11
+
12
+ db_pass: |
13
+ Database password (rails).
14
+
15
+ set :db_pass, "the_password"
@@ -0,0 +1,114 @@
1
+ #
2
+ # This is an EXAMPLE profile.
3
+ #
4
+ # Profile for sick rails app on centos 5.1
5
+ # Profiles are basically a beefed up deploy.rb
6
+ #
7
+
8
+ set :description, "Sick project deployment for centos 5.1 image"
9
+
10
+ #set :install_user, "root"
11
+
12
+ set :recipes, [
13
+ "centos:setup_for_web",
14
+ "packages:install",
15
+ "centos:ruby:install",
16
+ "centos:nginx:install",
17
+ "centos:mysql:install",
18
+ "centos:sphinx:install",
19
+ "centos:monit:install",
20
+ "centos:imagemagick:install",
21
+ "centos:memcached:install",
22
+ "nginx:install_monit",
23
+ "mysql:install_monit",
24
+ "memcached:install_monit",
25
+ "gems:install",
26
+ "centos:cleanup"
27
+ ]
28
+
29
+ #
30
+ # Settings for recipes
31
+ #
32
+
33
+ # For packages:install
34
+ set :packages_type, :yum
35
+ set :packages_remove, [ "openoffice.org-*", "ImageMagick" ]
36
+ set :packages_add, [
37
+ "gcc", "kernel-devel", "libevent-devel", "libxml2-devel",
38
+ "openssl", "openssl-devel",
39
+ "aspell", "aspell-devel", "aspell-en", "aspell-es",
40
+ ]
41
+
42
+ # For gem:install
43
+ set :gem_list, [
44
+ "rake",
45
+ "mysql -- --with-mysql-include=/usr/include/mysql --with-mysql-lib=/usr/lib/mysql --with-mysql-config",
46
+ "raspell",
47
+ "rmagick",
48
+ "mongrel",
49
+ "mongrel_cluster",
50
+ "json"
51
+ ]
52
+
53
+ # For monit:install
54
+ set :monit_port, 2812 # Capistrano::CLI.ui.ask('Monit port: ')
55
+ set :monit_password, Proc.new { Capistrano::CLI.ui.ask('Monit admin password (to set): ') }
56
+
57
+ # For nginx:install
58
+ set :nginx_bin_path, "/sbin/nginx"
59
+ set :nginx_conf_path, "/etc/nginx/nginx.conf"
60
+ set :nginx_pid_path, "/var/run/nginx.pid"
61
+ set :nginx_prefix_path, "/var/nginx"
62
+
63
+ # For mysql:install
64
+ set :mysql_admin_password_set, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') }
65
+ set :mysql_pid_path, "/var/run/mysqld/mysqld.pid"
66
+ set :db_port, 3306 # Capistrano::CLI.ui.ask('Mysql port: ')
67
+
68
+ # For sphinx:install
69
+ set :sphinx_prefix, "/usr/local/sphinx"
70
+
71
+ # For memcached:install
72
+ set :memcached_pid_path, "/var/run/memcached.pid"
73
+ set :memcached_memory, 64
74
+ set :memcached_port, 11211
75
+
76
+
77
+ #
78
+ # Settings for generating project Capfile
79
+ #
80
+
81
+ set :application, "sick"
82
+ set :user, "sick"
83
+ set :deploy_to, "/var/www/apps/sick"
84
+ set :web_host, "WEB_HOST"
85
+ set :db_host, "DB_HOST"
86
+ set :db_user, "sick"
87
+ set :db_pass, ""
88
+ set :db_name, "sick"
89
+ # db_port set already
90
+ set :sphinx_host, "SPHINX_HOST"
91
+ set :sphinx_port, 3312
92
+ set :repository, "REPOSITORY"
93
+ set :mongrel_port, 12000
94
+ set :mongrel_size, 3
95
+ set :domain_name, "localhost"
96
+ set :mysql_admin_password, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password: ') }
97
+
98
+ set :deploy_via, :copy
99
+ set :copy_strategy, :export
100
+
101
+ role :web, "WEB_URL"
102
+ role :db, "DB_URL", :primary => true
103
+
104
+
105
+ # Callbacks
106
+ before "deploy:setup", "centos:add_user_for_app"
107
+
108
+ after "deploy:setup", "mysql:setup", "rails:setup", "mongrel_cluster:setup_monit",
109
+ "nginx:setup_mongrel", "centos:sphinx:setup"
110
+
111
+ after "deploy:update_code", "rails:update_code", "sphinx:update_code"
112
+
113
+ # Auto cleanup after deploy
114
+ after "deploy", "deploy:cleanup"
@@ -0,0 +1,5 @@
1
+ = Recipes
2
+ * Install tasks are one time tasks (per OS).
3
+ * Setup tasks are one time tasks (per application).
4
+ * Update code tasks are called after each deploy (per application).
5
+ * Scripts and templates are in capitate/lib/templates.
@@ -0,0 +1,3 @@
1
+ Recipes specific to Centos.
2
+
3
+ Tested on Centos 5.1
@@ -0,0 +1,44 @@
1
+ # Custom tasks for centos OS profiles
2
+ namespace :centos do
3
+
4
+ desc "Setup centos for web"
5
+ task :setup_for_web do
6
+ put template.load("centos/sudoers"), "/tmp/sudoers"
7
+ script.sh("centos/setup_for_web.sh")
8
+ end
9
+
10
+ desc "Cleanup"
11
+ task :cleanup do
12
+ yum.clean
13
+ # TODO: Add cleanup tasks here
14
+ end
15
+
16
+ # Add user for an application
17
+ desc "Add user (adds to admin group)"
18
+ task :add_user_for_app do
19
+
20
+ # Settings
21
+ user = fetch(:user)
22
+ fetch_or_default(:install_user, "root")
23
+
24
+ with_user(install_user) do
25
+
26
+ sudo "id sick || /usr/sbin/adduser -d #{deploy_to} -G admin #{user}"
27
+ sudo "chmod a+rx #{deploy_to}"
28
+
29
+ new_password = Capistrano::CLI.password_prompt("Password for user (#{user}): ")
30
+
31
+ sudo "passwd #{user}" do |channel, stream, data|
32
+ logger.info data
33
+
34
+ if data =~ /password:/i
35
+ channel.send_data "#{new_password}\n"
36
+ channel.send_data "#{new_password}\n"
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,19 @@
1
+ namespace :centos do
2
+ namespace :imagemagick do
3
+
4
+ task :install do
5
+
6
+ # Install dependencies
7
+ yum.install([ "libjpeg-devel", "libpng-devel", "glib2-devel", "fontconfig-devel", "zlib-devel",
8
+ "libwmf-devel", "freetype-devel", "libtiff-devel" ])
9
+
10
+ imagemagick_options = {
11
+ :url => "ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz",
12
+ :unpack_dir => "ImageMagick-*"
13
+ }
14
+
15
+ script.make_install("imagemagick", imagemagick_options)
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ namespace :centos do
2
+
3
+ namespace :memcached do
4
+
5
+ desc "Install memcached"
6
+ task :install do
7
+
8
+ # Settings
9
+ fetch_or_default(:memcached_pid_path, "/var/run/memcached.pid")
10
+ fetch_or_default(:memcached_port, 11211)
11
+ fetch(:memcached_memory)
12
+
13
+ # Build options
14
+ memcached_options = {
15
+ :url => "http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz",
16
+ :configure_options => "--prefix=/usr/local"
17
+ }
18
+
19
+ # Build
20
+ script.make_install("memcached", memcached_options)
21
+
22
+ # Install initscript, service
23
+ put template.load("memcached/memcached.initd.centos.erb"), "/tmp/memcached.initd"
24
+ sudo "install -o root /tmp/memcached.initd /etc/init.d/memcached && rm -f /tmp/memcached.initd"
25
+ sudo "/sbin/chkconfig --level 345 memcached on"
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,34 @@
1
+ namespace :centos do
2
+
3
+ namespace :mongrel_cluster do
4
+
5
+ after "centos:mongrel_cluster:setup", "mongrel_cluster:setup_monit"
6
+
7
+ desc "Create mongrel cluster"
8
+ task :setup do
9
+
10
+ # Settings
11
+ fetch(:mongrel_size)
12
+ fetch(:mongrel_port)
13
+
14
+ run "mkdir -p #{shared_path}/config"
15
+
16
+ # Mongrel cluster config needs its own config directory
17
+ mongrel_config_path = "#{shared_path}/config/mongrel"
18
+ run "mkdir -p #{mongrel_config_path}"
19
+
20
+ pid_path = "#{shared_path}/pids"
21
+
22
+ put template.load("mongrel/mongrel_cluster.initd.erb", binding), "/tmp/mongrel_cluster_#{application}.initd"
23
+ put template.load("mongrel/mongrel_cluster.yml.erb", binding), "#{mongrel_config_path}/mongrel_cluster.yml"
24
+
25
+ # Setup the mongrel_cluster init script
26
+ sudo "install -o root /tmp/mongrel_cluster_#{application}.initd /etc/init.d/mongrel_cluster_#{application}"
27
+
28
+ sudo "/sbin/chkconfig --level 345 mongrel_cluster_#{application} on"
29
+ end
30
+
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,42 @@
1
+ namespace :centos do
2
+
3
+ namespace :monit do
4
+
5
+ desc "Install monit"
6
+ task :install do
7
+
8
+ # Settings
9
+ fetch_or_default(:monit_port, 2812)
10
+ fetch_or_default(:monit_password,
11
+ Proc.new { Capistrano::CLI.ui.ask('Monit admin password (to set): ') })
12
+
13
+ # Install dependencies
14
+ yum.install([ "flex", "byacc" ])
15
+
16
+ # Build options
17
+ monit_options = {
18
+ :url => "http://www.tildeslash.com/monit/dist/monit-4.10.1.tar.gz"
19
+ }
20
+
21
+ # Build
22
+ script.make_install("monit", monit_options)
23
+
24
+ # Install initscript
25
+ put template.load("monit/monit.initd.centos.erb"), "/tmp/monit.initd"
26
+ sudo "install -o root /tmp/monit.initd /etc/init.d/monit && rm -f /tmp/monit.initd"
27
+
28
+ # Install monitrc
29
+ put template.load("monit/monitrc.erb"), "/tmp/monitrc"
30
+ sudo "mkdir -p /etc/monit && install -o root -m 700 /tmp/monitrc /etc/monitrc && rm -f /tmp/monitrc"
31
+
32
+ # Patch initab
33
+ script.sh("monit/patch_inittab.sh")
34
+
35
+ # Build cert
36
+ put template.load("monit/monit.cnf"), "/tmp/monit.cnf"
37
+ script.sh("monit/cert.sh")
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,25 @@
1
+ namespace :centos do
2
+
3
+ namespace :mysql do
4
+
5
+ desc "Install mysql"
6
+ task :install do
7
+
8
+ # Settings
9
+ fetch_or_default(:mysql_admin_password_set,
10
+ Proc.new { Capistrano::CLI.ui.ask('Mysql admin password (to set): ') })
11
+
12
+ # Install through package manager
13
+ yum.install([ "mysql", "mysql-devel", "mysql-server" ])
14
+
15
+ # Install service
16
+ sudo "/sbin/chkconfig --level 345 mysqld on"
17
+ sudo "/sbin/service mysqld start"
18
+
19
+ # Set admin password
20
+ sudo "/usr/bin/mysqladmin -u root password #{mysql_admin_password_set}"
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,45 @@
1
+ namespace :centos do
2
+
3
+ namespace :nginx do
4
+
5
+ desc "Install nginx, conf, initscript, nginx user and service"
6
+ task :install do
7
+
8
+ # Settings
9
+ fetch_or_default(:nginx_bin_path, "/sbin/nginx")
10
+ fetch_or_default(:nginx_conf_path, "/etc/nginx/nginx.conf")
11
+ fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
12
+ fetch_or_default(:nginx_prefix_path, "/var/nginx")
13
+
14
+ # Install dependencies
15
+ yum.install([ "pcre-devel", "openssl", "openssl-devel" ])
16
+
17
+ # Build options
18
+ nginx_options = {
19
+ :url => "http://sysoev.ru/nginx/nginx-0.5.35.tar.gz",
20
+ :configure_options => "--sbin-path=#{nginx_bin_path} --conf-path=#{nginx_conf_path} \
21
+ --pid-path=#{nginx_pid_path} --error-log-path=/var/log/nginx_master_error.log --lock-path=/var/lock/nginx \
22
+ --prefix=#{nginx_prefix_path} --with-md5=auto/lib/md5 --with-sha1=auto/lib/sha1 --with-http_ssl_module"
23
+ }
24
+
25
+ # Build
26
+ script.make_install("nginx", nginx_options)
27
+
28
+ # Install initscript, and turn it on
29
+ put template.load("nginx/nginx.initd.erb"), "/tmp/nginx.initd"
30
+ sudo "install -o root /tmp/nginx.initd /etc/init.d/nginx && rm -f /tmp/nginx.initd"
31
+ sudo "/sbin/chkconfig --level 345 nginx on"
32
+
33
+ # Setup nginx
34
+ sudo "mkdir -p /etc/nginx/vhosts"
35
+ sudo "echo \"# Blank nginx conf; work-around for nginx conf include issue\" > /etc/nginx/vhosts/blank.conf"
36
+ put template.load("nginx/nginx.conf.erb", binding), "/tmp/nginx.conf"
37
+ sudo "install -o root -m 644 /tmp/nginx.conf #{nginx_conf_path} && rm -f /tmp/nginx.conf"
38
+
39
+ # Create nginx user
40
+ sudo "id nginx || /usr/sbin/adduser -r nginx"
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,37 @@
1
+ namespace :centos do
2
+
3
+ namespace :ruby do
4
+
5
+ desc "Install ruby and rubygems"
6
+ task :install do
7
+
8
+ # Install dependencies
9
+ yum.install([ "zlib", "zlib-devel" ])
10
+
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
+ # Install ruby 1.8.6
19
+ script.make_install("ruby", ruby_options)
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
+ }
27
+
28
+ # Install rubygems
29
+ script.install("rubygems", rubygems_options) do |dir|
30
+ sudo "echo 'Running setup...' && cd #{dir} && ruby setup.rb > install.log"
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,49 @@
1
+ namespace :centos do
2
+
3
+ namespace :sphinx do
4
+
5
+ desc "Install sphinx"
6
+ task :install do
7
+
8
+ # Settings
9
+ fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
10
+
11
+ # Install dependencies
12
+ yum.install([ "gcc-c++" ])
13
+
14
+ # Build options
15
+ sphinx_options = {
16
+ :url => "http://www.sphinxsearch.com/downloads/sphinx-0.9.7.tar.gz",
17
+ :configure_options => "--with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib/mysql \
18
+ --prefix=#{sphinx_prefix}"
19
+ }
20
+
21
+ # Build
22
+ script.make_install("sphinx", sphinx_options)
23
+ end
24
+
25
+ desc "Setup sphinx for application"
26
+ after "centos:sphinx:setup", "sphinx:setup_monit"
27
+ task :setup do
28
+
29
+ # Settings
30
+ fetch_or_default(:sphinx_prefix, "/usr/local/sphinx")
31
+
32
+ # Derived settings
33
+ set :sphinx_bin_path, "#{sphinx_prefix}/bin"
34
+ set :sphinx_conf_path, "#{shared_path}/config/sphinx.conf"
35
+ set :sphinx_pid_path, "#{shared_path}/pids/searchd.pid"
36
+
37
+ # Install initscript
38
+ put template.load("sphinx/sphinx_app.initd.centos.erb"), "/tmp/sphinx.initd"
39
+ sudo "install -o root /tmp/sphinx.initd /etc/init.d/sphinx_#{application}"
40
+
41
+ # Enable service
42
+ sudo "/sbin/chkconfig --level 345 sphinx_#{application} on"
43
+
44
+ # Create app indexes dir
45
+ run "mkdir -p #{shared_path}/var/index"
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,18 @@
1
+ # Override default deploy tasks here (using Monit).
2
+ # If not using monit, use service start/stop:
3
+ # sudo "/sbin/service mongrel_cluster_#{application} restart"
4
+ namespace :deploy do
5
+
6
+ task :restart, :roles => :web do
7
+ sudo "/usr/local/bin/monit -g mongrel_cluster_#{application} restart all"
8
+ end
9
+
10
+ task :start, :roles => :web do
11
+ sudo "/usr/local/bin/monit -g mongrel_cluster_#{application} start all"
12
+ end
13
+
14
+ task :stop, :roles => :web do
15
+ sudo "/usr/local/bin/monit -g mongrel_cluster_#{application} stop all"
16
+ end
17
+
18
+ end
@@ -0,0 +1,11 @@
1
+ namespace :gems do
2
+
3
+ desc "Install gems"
4
+ task :install do
5
+ # Settings
6
+ fetch(:gem_list)
7
+
8
+ gemc.install(gem_list)
9
+ end
10
+
11
+ end
@@ -0,0 +1,18 @@
1
+ namespace :install do
2
+
3
+ task :default do
4
+
5
+ # Settings
6
+ fetch(:recipes)
7
+ fetch_or_default(:install_user, "root")
8
+
9
+ # Change user to install user for this recipes run
10
+ set_user(install_user)
11
+
12
+ # These run after install task and install all the apps
13
+ recipes.each do |task_name|
14
+ after "install", task_name
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,14 @@
1
+ namespace :memcached do
2
+
3
+ desc "Install memcached monit hooks"
4
+ task :install_monit do
5
+
6
+ # Settings
7
+ fetch_or_default(:memcached_pid_path, "/var/run/memcached.pid")
8
+ fetch_or_default(:memcached_port, 11211)
9
+
10
+ put template.load("memcached/memcached.monitrc.erb", binding), "/tmp/memcached.monitrc"
11
+ sudo "install -o root /tmp/memcached.monitrc /etc/monit/memcached.monitrc"
12
+ end
13
+
14
+ end
@@ -0,0 +1,33 @@
1
+ # Create init script
2
+ namespace :mongrel_cluster do
3
+
4
+ desc "Create monit configuration for mongrel cluster"
5
+ task :setup_monit do
6
+
7
+ # See http://www.igvita.com/2006/11/07/monit-makes-mongrel-play-nice/
8
+
9
+ # TODO: For depends on memcached setting
10
+ # See http://blog.labratz.net/articles/2007/5/1/monit-for-your-uptime
11
+
12
+ # Settings
13
+ fetch(:mongrel_size)
14
+ fetch(:mongrel_port)
15
+
16
+ processes = []
17
+ ports = (0...mongrel_size).collect { |i| mongrel_port + i }
18
+ ports.each do |port|
19
+
20
+ pid_path = "#{shared_path}/pids/mongrel.#{port}.pid"
21
+ start_options = "-d -e production -a 127.0.0.1 -c #{current_path} --user #{user} --group #{user} -p #{port} -P #{pid_path} -l log/mongrel.#{port}.log"
22
+ stop_options = "-p #{port} -P #{pid_path}"
23
+
24
+ processes << { :port => port, :start_options => start_options, :stop_options => stop_options, :name => "/usr/bin/mongrel_rails", :pid_path => pid_path }
25
+ end
26
+
27
+ set :processes, processes
28
+
29
+ put template.load("mongrel/mongrel_cluster.monitrc.erb"), "/tmp/mongrel_cluster_#{application}.monitrc"
30
+ sudo "install -o root /tmp/mongrel_cluster_#{application}.monitrc /etc/monit/mongrel_cluster_#{application}.monitrc"
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ # Mysql recipes
2
+ namespace :mysql do
3
+
4
+ desc "Install mysql monit hooks"
5
+ task :install_monit do
6
+
7
+ # Settings
8
+ fetch_or_default(:mysql_pid_path, "/var/run/mysqld/mysqld.pid")
9
+ fetch_or_default(:db_port, 3306)
10
+
11
+ put template.load("mysql/mysql.monitrc.erb", binding), "/tmp/mysql.monitrc"
12
+ sudo "install -o root /tmp/mysql.monitrc /etc/monit/mysql.monitrc"
13
+ end
14
+
15
+ desc "Create database user, and database with appropriate permissions"
16
+ task :setup do
17
+
18
+ # Settings
19
+ fetch(:db_name)
20
+ fetch(:db_user)
21
+ fetch(:db_pass)
22
+ fetch(:db_host)
23
+ fetch_or_default(:mysql_admin_password, Proc.new { Capistrano::CLI.ui.ask('Mysql admin password: ') })
24
+ fetch_or_default(:web_host, nil)
25
+
26
+ # Add localhost to grant locations
27
+ set :locations_for_grant, [ "localhost", web_host, db_host ].compact
28
+
29
+ put template.load("mysql/install_db.sql.erb"), "/tmp/install_db_#{application}.sql"
30
+ run "mysql -u root -p#{mysql_admin_password} < /tmp/install_db_#{application}.sql"
31
+ end
32
+
33
+ end
@@ -0,0 +1,40 @@
1
+ # Nginx recipes
2
+ namespace :nginx do
3
+
4
+ # Callbacks
5
+ after "nginx:setup", "nginx:restart"
6
+
7
+ desc "Install nginx monit hooks"
8
+ task :install_monit do
9
+
10
+ # Settings
11
+ fetch_or_default(:nginx_pid_path, "/var/run/nginx.pid")
12
+
13
+ put template.load("nginx/nginx.monitrc.erb", binding), "/tmp/nginx.monitrc"
14
+ sudo "install -o root /tmp/nginx.monitrc /etc/monit/nginx.monitrc"
15
+ end
16
+
17
+ desc "Create and update the nginx vhost include"
18
+ task :setup_mongrel do
19
+
20
+ # Settings
21
+ fetch(:mongrel_size)
22
+ fetch(:mongrel_port)
23
+ fetch(:domain_name)
24
+
25
+ set :ports, (0...mongrel_size).collect { |i| mongrel_port + i }
26
+ set :public_path, current_path + "/public"
27
+
28
+ run "mkdir -p #{shared_path}/config"
29
+ put template.load("nginx/nginx_vhost.conf.erb"), "/tmp/nginx_#{application}.conf"
30
+
31
+ sudo "install -o root /tmp/nginx_#{application}.conf /etc/nginx/vhosts/#{application}.conf"
32
+ end
33
+
34
+ # Restart nginx
35
+ task :restart do
36
+ # TODO: Monit
37
+ sudo "/sbin/service nginx restart"
38
+ end
39
+
40
+ end