centostrano 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -63,16 +63,13 @@ Capistrano::Configuration.instance(:must_exist).load do
63
63
  top.centos.rubygems.install
64
64
 
65
65
  # Stop and deactivate apache 2
66
- deprec2.for_roles('web') do
67
- top.centos.apache.stop
68
- top.centos.apache.deactivate
69
- end
70
-
66
+ top.centos.apache.stop
67
+ top.centos.apache.deactivate
68
+
71
69
  # Install nginx
72
- deprec2.for_roles('web') do
73
- top.centos.nginx.install
74
- end
75
-
70
+ top.centos.nginx.install
71
+
72
+ # XXX check this out before removing - Mike
76
73
  deprec2.for_roles('app') do
77
74
  top.centos.svn.install
78
75
  top.centos.git.install
@@ -81,16 +78,10 @@ Capistrano::Configuration.instance(:must_exist).load do
81
78
  top.centos.rails.install
82
79
  end
83
80
 
84
- deprec2.for_roles('web,app') do
85
- top.centos.logrotate.install
86
- end
81
+ top.centos.logrotate.install
87
82
 
88
- # Install database separately
89
- # deprec2.for_roles('db') do
90
- # top.centos.mysql.install
91
- # top.centos.mysql.start
92
- # end
93
-
83
+ top.centos.mysql.install
84
+ top.centos.mysql.start
94
85
  end
95
86
 
96
87
  task :install_rails_stack do
@@ -98,7 +89,7 @@ Capistrano::Configuration.instance(:must_exist).load do
98
89
  install_stack
99
90
  end
100
91
 
101
- task :install_gems_for_project do
92
+ task :install_gems_for_project, :roles => :app do
102
93
  if gems_for_project
103
94
  gems_for_project.each { |gem| gem2.install(gem) }
104
95
  end
@@ -123,7 +114,6 @@ Capistrano::Configuration.instance(:must_exist).load do
123
114
  deprec2.render_template(:nginx, file)
124
115
  end
125
116
  top.centos.mongrel.config_gen_project
126
- top.centos.mongrel.config_project
127
117
  end
128
118
 
129
119
  desc "Push out config files for rails app."
@@ -131,23 +121,23 @@ Capistrano::Configuration.instance(:must_exist).load do
131
121
  deprec2.push_configs(:nginx, PROJECT_CONFIG_FILES[:nginx])
132
122
  top.centos.mongrel.config_project
133
123
  symlink_nginx_vhost
134
- symlink_logrotate_config
124
+ symlink_nginx_logrotate_config
135
125
  end
136
126
 
137
127
  task :symlink_nginx_vhost, :roles => :web do
138
128
  sudo "ln -sf #{deploy_to}/nginx/rails_nginx_vhost.conf #{nginx_vhost_dir}/#{application}.conf"
139
129
  end
140
130
 
141
- task :symlink_logrotate_config, :roles => :web do
131
+ task :symlink_nginx_logrotate_config, :roles => :web do
142
132
  sudo "ln -sf #{deploy_to}/nginx/logrotate.conf /etc/logrotate.d/nginx-#{application}"
143
133
  end
144
134
 
145
- task :create_config_dir do
135
+ task :create_config_dir, :roles => :app do
146
136
  deprec2.mkdir("#{shared_path}/config", :group => group, :mode => 0775, :via => :sudo)
147
137
  end
148
138
 
149
139
  desc "Create deployment group and add current user to it"
150
- task :setup_user_perms do
140
+ task :setup_user_perms, :roles => [:app, :web] do
151
141
  deprec2.groupadd(group)
152
142
  deprec2.add_user_to_group(user, group)
153
143
  deprec2.groupadd(mongrel_group)
@@ -169,7 +159,7 @@ Capistrano::Configuration.instance(:must_exist).load do
169
159
  end
170
160
 
171
161
  # setup extra paths required for deployment
172
- task :setup_paths, :roles => :app do
162
+ task :setup_paths, :roles => [:app, :web] do
173
163
  deprec2.mkdir(deploy_to, :mode => 0775, :group => group, :via => :sudo)
174
164
  deprec2.mkdir(shared_path, :mode => 0775, :group => group, :via => :sudo)
175
165
  end
@@ -9,7 +9,7 @@ Capistrano::Configuration.instance(:must_exist).load do
9
9
  :md5sum => "c36e011733a3a3be6f43ba27b7cd7485 ruby-1.8.6-p111.tar.gz",
10
10
  :dir => 'ruby-1.8.6-p111',
11
11
  :url => "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p111.tar.gz",
12
- :unpack => "tar zxf ruby-1.8.6-p111.tar.gz; cd ruby-1.8.6-p111; wget -q -O - wget http://blog.phusion.nl/assets/r8ee-security-patch-20080623-2.txt | patch -p1",
12
+ :unpack => "tar zxf ruby-1.8.6-p111.tar.gz; cd ruby-1.8.6-p111; wget -q -O - wget http://blog.phusion.nl/assets/r8ee-security-patch-20080623-2.txt | patch -p1;",
13
13
  :configure => %w(
14
14
  ./configure
15
15
  --with-install-readline
@@ -28,7 +28,7 @@ Capistrano::Configuration.instance(:must_exist).load do
28
28
  end
29
29
 
30
30
  task :install_deps do
31
- apt.install( {:base => %w(pcre* gcc make openssl openssl-devel readline-devel)}, :stable )
31
+ apt.install( {:base => %w(pcre* gcc make openssl openssl-devel readline-devel patch)}, :stable )
32
32
  end
33
33
 
34
34
  end
@@ -39,13 +39,13 @@ Capistrano::Configuration.instance(:must_exist).load do
39
39
  namespace :rubygems do
40
40
 
41
41
  SRC_PACKAGES[:rubygems] = {
42
- :filename => 'rubygems-1.2.0.tgz',
43
- :md5sum => "b77a4234360735174d1692e6fc598402 rubygems-1.2.0.tgz",
44
- :dir => 'rubygems-1.2.0',
45
- :url => "http://rubyforge.org/frs/download.php/38646/rubygems-1.2.0.tgz",
46
- :unpack => "tar zxf rubygems-1.2.0.tgz;",
42
+ :filename => 'rubygems-1.3.1.tgz',
43
+ :md5sum => "a04ee6f6897077c5b75f5fd1e134c5a9 rubygems-1.3.1.tgz",
44
+ :url => "http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz",
45
+ :dir => 'rubygems-1.3.1',
46
+ :unpack => "tar zxf rubygems-1.3.1.tgz;",
47
47
  :install => 'ruby setup.rb;',
48
- :version => 'c1.2.0',
48
+ :version => 'c1.3.1',
49
49
  :release => '1'
50
50
  }
51
51
 
@@ -87,3 +87,6 @@ Capistrano::Configuration.instance(:must_exist).load do
87
87
  end
88
88
  end
89
89
  end
90
+ # ultrasphinx deployment notes
91
+ # http://blog.evanweaver.com/files/doc/fauna/ultrasphinx/files/DEPLOYMENT_NOTES.html
92
+
@@ -34,7 +34,7 @@ Capistrano::Configuration.instance(:must_exist).load do
34
34
  set(:svn_backup_dir) { File.join(backup_dir, 'svn') }
35
35
 
36
36
  desc "Install Subversion"
37
- task :install, :roles => :scm do
37
+ task :install do
38
38
  install_deps
39
39
  # XXX should really check if apache has already been installed
40
40
  # XXX can do that when we move to rake
@@ -1,4 +1,4 @@
1
- /var/www/apps/<%= application %>/shared/log/production.log /var/www/apps/<%= application %>/shared/log/mongrel.*.log {
1
+ <%= shared_path %>/log/<%= rails_env %>.log <%= shared_path %>/log/mongrel.*.log {
2
2
  daily
3
3
  rotate 14
4
4
  dateext
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/perl
2
+ use strict;
3
+ use warnings;
4
+ use Getopt::Long;
5
+ use File::Basename;
6
+
7
+ # Author: Dean Wilson ; License: GPL
8
+ # Project Home: http://www.unixdaemon.net/
9
+ # For documentation look at the bottom of this file, or run with '-h'
10
+ # Version 0.5 - Tided up arg handling. Added usage
11
+
12
+ # Changes:
13
+ # Usage information corrected, thanks to Bartlomiej Konarski
14
+
15
+ # nagios requires a 3 for unknown errors.
16
+ $SIG{__DIE__} = sub {
17
+ print @_;
18
+ exit 3;
19
+ };
20
+
21
+ my $app = basename($0);
22
+
23
+ GetOptions(
24
+ "w|warn=s" => \( my $warn_percent = 30 ),
25
+ "c|crit=s" => \( my $crit_percent = 20 ),
26
+ "h|help" => \&usage,
27
+ );
28
+
29
+ # remove any % passed in
30
+ $warn_percent =~ s/%//;
31
+ $crit_percent =~ s/%//;
32
+
33
+ die "Warning value must be larger than critical value\n"
34
+ unless $warn_percent >= $crit_percent;
35
+
36
+ my $memory_stats_ref = get_mem();
37
+ my $percentage_free = get_percentage($memory_stats_ref);
38
+
39
+ if ($percentage_free <= $crit_percent) {
40
+ print "CRIT: Only $percentage_free% ($memory_stats_ref->{free_cache}M) of memory free!\n";
41
+ exit 2;
42
+ } elsif ($percentage_free <= $warn_percent) {
43
+ print "WARN: Only $percentage_free% ($memory_stats_ref->{free_cache}M) of memory free!\n";
44
+ exit 1;
45
+ } else {
46
+ print "OK: $percentage_free% ($memory_stats_ref->{free_cache}M) free memory.\n";
47
+ exit 0;
48
+ }
49
+
50
+ #########################################
51
+
52
+ sub get_mem {
53
+ # get the two values from the free command.
54
+ # return them as a hash ref
55
+
56
+ my %memory_stats;
57
+
58
+ open(FREEPIPE, "free -m |")
59
+ || die "Failed to open 'free'\n$!\n";
60
+
61
+ while(<FREEPIPE>) {
62
+ chomp;
63
+ next unless m!buffers/cache:!;
64
+ m/[^\d]+(\d+)\s+(\d+)$/;
65
+ $memory_stats{'used_cache'} = $1;
66
+ $memory_stats{'free_cache'} = $2;
67
+ }
68
+
69
+ close FREEPIPE;
70
+
71
+ return \%memory_stats;
72
+ }
73
+
74
+ #------------------------------------------#
75
+
76
+ sub get_percentage {
77
+ my $mem_stats_ref = shift;
78
+ my $percentage_free;
79
+
80
+ my $total = $mem_stats_ref->{'used_cache'} + $mem_stats_ref->{'free_cache'};
81
+ $percentage_free = int (($mem_stats_ref->{'free_cache'} / $total) * 100);
82
+
83
+ return $percentage_free;
84
+ }
85
+
86
+ #------------------------------------------#
87
+
88
+ sub usage {
89
+ print<<EOU;
90
+
91
+ $app - Copyright (c) 2006 Dean Wilson. Licensed under the GPL
92
+
93
+ This script reports the percentage of memory that's still free along
94
+ with a warning or a critical based upon user defined threshholds.
95
+
96
+ This script was written to be used in conjunction with Nagios.
97
+
98
+ Usage Examples:
99
+ $app -w 20 -c 10
100
+ $app -warn 30 -crit 15
101
+ $app -h # shows this information
102
+
103
+ Options:
104
+ -w | -warn
105
+ Warn if less than this percentage is free.
106
+ -c | -crit
107
+ Crit if less than this percentage is free.
108
+ -h
109
+ This help and usage information
110
+
111
+ Notes:
112
+ The output format of "free" (which this script wraps) can change
113
+ between releases. Please double check the outputs before you deploy
114
+ this script.
115
+
116
+ EOU
117
+ exit 3;
118
+ }
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'yaml'
4
+
5
+ # Exit status
6
+ OK = 0
7
+ WARNING = 1
8
+ CRITICAL = 2
9
+
10
+ # use options instead
11
+ application = ARGV[0]
12
+ cluster_config_file = "/etc/mongrel_cluster/#{application}.yml"
13
+
14
+ def running?(pid)
15
+ # check if pid is running
16
+ ps_output = `ps -p #{pid}`
17
+ ps_output =~ /mongrel_rails/
18
+ end
19
+
20
+ def chdir_cwd
21
+ pwd = Dir.pwd
22
+ Dir.chdir(@options["cwd"]) if @options["cwd"]
23
+ yield
24
+ Dir.chdir(pwd) if @options["cwd"]
25
+ end
26
+
27
+ def read_pid(port)
28
+ pid_file = port_pid_file(port)
29
+ pid = 0
30
+ chdir_cwd do
31
+ pid = File.read(pid_file)
32
+ end
33
+ pid
34
+ end
35
+
36
+
37
+ # Load cluster config from YAML file
38
+ begin
39
+ cluster_config = YAML.load_file(cluster_config_file)
40
+ port = cluster_config['port'].to_i
41
+ servers = cluster_config['servers']
42
+ ports = (port..port+servers-1).collect
43
+ if cluster_config['pid_file'].match(/^\//)
44
+ pid_file_base = cluster_config['pid_file']
45
+ else
46
+ pid_file_base = File.join(cluster_config['cwd'], cluster_config['pid_file'])
47
+ end
48
+ rescue
49
+ print 'CRITICAL'
50
+ puts " Could not load mongrel cluster file (#{cluster_config_file})"
51
+ exit CRITICAL
52
+ end
53
+
54
+ # Check each mongrel
55
+ running = []
56
+ not_running = []
57
+
58
+ ports.each {|port|
59
+ pidfile = pid_file_base.sub('.pid',".#{port}.pid")
60
+ if File.readable?(pidfile)
61
+ pid = File.read(pidfile)
62
+ if running?(pid)
63
+ running << port
64
+ else
65
+ not_running << port
66
+ end
67
+ else
68
+ not_running << port
69
+ end
70
+ }
71
+
72
+ # Print response and exit
73
+
74
+ if not_running.empty?
75
+ print 'OK '
76
+ puts "mongrel running on ports #{running.join(', ')}"
77
+ exit OK
78
+ else
79
+ print 'CRITICAL '
80
+ puts "mongrel not running on #{not_running.join(', ')}. #{'Running on ' + running.join(', ') unless running.empty?}"
81
+ exit CRITICAL
82
+ end
@@ -1,4 +1,4 @@
1
- /var/www/apps/<%= application %>/shared/log/*access.log /var/www/apps/<%= application %>/shared/log/*error.log{
1
+ <%= shared_path %>/log/*access.log <%= shared_path %>/log/*error.log{
2
2
  daily
3
3
  missingok
4
4
  compress
@@ -1,6 +1,6 @@
1
1
 
2
2
  user <%= nginx_user %>;
3
- worker_processes 1;
3
+ worker_processes <%= nginx_worker_processes %>;
4
4
 
5
5
  #error_log logs/error.log;
6
6
  #error_log logs/error.log notice;
@@ -11,10 +11,12 @@ worker_processes 1;
11
11
 
12
12
  events {
13
13
  worker_connections 1024;
14
+ use epoll;
14
15
  }
15
16
 
16
17
 
17
18
  http {
19
+ server_names_hash_bucket_size 512;
18
20
  include /usr/local/nginx/conf/vhosts/*.conf;
19
21
  include mime.types;
20
22
  default_type application/octet-stream;
@@ -26,16 +28,24 @@ http {
26
28
  #access_log logs/access.log main;
27
29
 
28
30
  sendfile on;
29
- #tcp_nopush on;
31
+ tcp_nopush on;
30
32
 
31
33
  #keepalive_timeout 0;
32
34
  keepalive_timeout 65;
33
35
 
34
- #gzip on;
36
+ gzip on;
37
+ gzip_http_version 1.0;
38
+ gzip_comp_level 5; # 0 - 10, More is heavier on the CPU
39
+ gzip_proxied any;
40
+ gzip_buffers 16 8k;
41
+ gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
42
+
43
+
44
+
35
45
 
36
46
  server {
37
47
  listen 80;
38
- server_name _;
48
+ server_name localhost;
39
49
 
40
50
  #charset koi8-r;
41
51
 
@@ -0,0 +1,10 @@
1
+ <VirtualHost *:80>
2
+ ServerName <%= domain %>
3
+ DocumentRoot "<%= passenger_document_root %>"
4
+ RailsEnv <%= rails_env %>
5
+ RailsAllowModRewrite <%= passenger_rails_allow_mod_rewrite %>
6
+ <directory "<%= passenger_document_root %>">
7
+ Order allow,deny
8
+ Allow from all
9
+ </directory>
10
+ </VirtualHost>
@@ -0,0 +1,20 @@
1
+ # http://www.modrails.com/documentation/Users%20guide.html#_configuring_phusion_passenger
2
+
3
+ LoadModule passenger_module <%= passenger_install_dir %>/ext/apache2/mod_passenger.so
4
+ PassengerRoot <%= passenger_install_dir %>
5
+ PassengerLogLevel <%= passenger_log_level %>
6
+ PassengerRuby /usr/local/bin/ruby
7
+ PassengerUserSwitching <%= passenger_user_switching %>
8
+ PassengerDefaultUser <%= passenger_default_user %>
9
+ PassengerMaxPoolSize <%= passenger_max_pool_size %>
10
+ PassengerMaxInstancesPerApp <%= passenger_max_instances_per_app %>
11
+ PassengerPoolIdleTime <%= passenger_pool_idle_time %>
12
+
13
+ # Ruby on Rails Options
14
+
15
+ RailsAutoDetect <%= passenger_rails_autodetect %>
16
+ RailsSpawnMethod <%= passenger_rails_spawn_method %>
17
+
18
+ <IfModule passenger_module>
19
+ NameVirtualHost *:80
20
+ </IfModule>