isaac-deprec 1.99.30 → 1.99.32
Sign up to get free protection for your applications and to get access to all the features.
- data/README +24 -2
- data/THANKS +12 -0
- data/bin/depify +12 -6
- data/lib/deprec/capistrano_extensions.rb +7 -0
- data/lib/deprec/recipes.rb +7 -2
- data/lib/deprec/recipes/apache.rb +19 -96
- data/lib/deprec/recipes/deprec.rb +32 -29
- data/lib/deprec/recipes/git.rb +3 -3
- data/lib/deprec/recipes/mongrel.rb +6 -35
- data/lib/deprec/recipes/mysql.rb +30 -1
- data/lib/deprec/recipes/network.rb +1 -1
- data/lib/deprec/recipes/nginx.rb +55 -12
- data/lib/deprec/recipes/passenger.rb +147 -27
- data/lib/deprec/recipes/rails.rb +98 -77
- data/lib/deprec/recipes/ree.rb +11 -10
- data/lib/deprec/recipes/ruby.rb +5 -14
- data/lib/deprec/recipes/utils.rb +21 -2
- data/lib/deprec/recipes/wordpress.rb +2 -5
- data/lib/deprec/recipes/xen.rb +38 -40
- data/lib/deprec/templates/apache/index.html.erb +0 -7
- data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +3 -3
- data/lib/deprec/templates/passenger/apache_vhost.erb +21 -10
- data/lib/deprec/templates/ssh/ssh_config.erb +1 -1
- data/lib/deprec/templates/xen/xend-config.sxp.erb +1 -1
- metadata +2 -2
- data/lib/deprec/templates/passenger/passenger.erb +0 -20
- data/lib/deprec/templates/xen/15-disable-hwclock +0 -40
- data/lib/deprec/templates/xen/40-setup-networking +0 -145
- data/lib/deprec/templates/xen/xen-tools.conf.erb +0 -220
- data/lib/deprec/templates/xen/xm.tmpl.erb +0 -85
data/lib/deprec/recipes/mysql.rb
CHANGED
@@ -3,17 +3,21 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
3
3
|
namespace :deprec do
|
4
4
|
namespace :mysql do
|
5
5
|
|
6
|
+
set :mysql_admin_user, 'root'
|
7
|
+
set(:mysql_admin_pass) { Capistrano::CLI.password_prompt "Enter database password for '#{mysql_admin_user}':"}
|
8
|
+
|
6
9
|
# Installation
|
7
10
|
|
8
11
|
desc "Install mysql"
|
9
12
|
task :install, :roles => :db do
|
10
13
|
install_deps
|
14
|
+
start
|
11
15
|
# symlink_mysql_sockfile # XXX still needed?
|
12
16
|
end
|
13
17
|
|
14
18
|
# Install dependencies for Mysql
|
15
19
|
task :install_deps, :roles => :db do
|
16
|
-
apt.install( {:base => %w(mysql-server mysql-client)}, :stable )
|
20
|
+
apt.install( {:base => %w(mysql-server mysql-client libmysqlclient15-dev)}, :stable )
|
17
21
|
end
|
18
22
|
|
19
23
|
# task :symlink_mysql_sockfile, :roles => :db do
|
@@ -81,6 +85,31 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
81
85
|
|
82
86
|
task :restore, :roles => :db do
|
83
87
|
end
|
88
|
+
|
89
|
+
desc "Create a mysql user"
|
90
|
+
task :create_user, :roles => :db do
|
91
|
+
# TBA
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "Create a database"
|
95
|
+
task :create_database, :roles => :db do
|
96
|
+
cmd = "CREATE DATABASE IF NOT EXISTS #{db_name}"
|
97
|
+
run "mysql -u #{mysql_admin_user} -p -e '#{cmd}'" do |channel, stream, data|
|
98
|
+
if data =~ /^Enter password:/
|
99
|
+
channel.send_data "#{mysql_admin_pass}\n"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
desc "Grant user access to database"
|
105
|
+
task :grant_user_access_to_database, :roles => :db do
|
106
|
+
cmd = "GRANT ALL PRIVILEGES ON #{db_name}.* TO '#{db_user}'@localhost IDENTIFIED BY '#{db_password}';"
|
107
|
+
run "mysql -u #{mysql_admin_user} -p #{db_name} -e \"#{cmd}\"" do |channel, stream, data|
|
108
|
+
if data =~ /^Enter password:/
|
109
|
+
channel.send_data "#{mysql_admin_pass}\n"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
84
113
|
|
85
114
|
end
|
86
115
|
end
|
@@ -29,7 +29,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
29
29
|
result
|
30
30
|
}
|
31
31
|
set(:network_hostname) {
|
32
|
-
Capistrano::CLI.ui.ask "hostname" do |q|
|
32
|
+
Capistrano::CLI.ui.ask "Enter the hostname for the server" do |q|
|
33
33
|
# q.validate = /add hostname validation here/
|
34
34
|
end
|
35
35
|
}
|
data/lib/deprec/recipes/nginx.rb
CHANGED
@@ -22,11 +22,9 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
22
22
|
deprec2.download_src(SRC_PACKAGES[:nginx], src_dir)
|
23
23
|
deprec2.install_from_src(SRC_PACKAGES[:nginx], src_dir)
|
24
24
|
create_nginx_user
|
25
|
-
|
26
|
-
SYSTEM_CONFIG_FILES[:nginx].each do |file|
|
27
|
-
deprec2.render_template(:nginx, file.merge(:remote => true))
|
28
|
-
end
|
25
|
+
initial_config
|
29
26
|
activate
|
27
|
+
start
|
30
28
|
end
|
31
29
|
|
32
30
|
# install dependencies for nginx
|
@@ -62,7 +60,26 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
62
60
|
:mode => 0644,
|
63
61
|
:owner => 'root:root'}
|
64
62
|
]
|
63
|
+
|
64
|
+
PROJECT_CONFIG_FILES[:nginx] = [
|
65
|
+
|
66
|
+
{:template => 'rails_nginx_vhost.conf.erb',
|
67
|
+
:path => "rails_nginx_vhost.conf",
|
68
|
+
:mode => 0644,
|
69
|
+
:owner => 'root:root'},
|
70
|
+
|
71
|
+
{:template => 'logrotate.conf.erb',
|
72
|
+
:path => "logrotate.conf",
|
73
|
+
:mode => 0644,
|
74
|
+
:owner => 'root:root'}
|
75
|
+
]
|
65
76
|
|
77
|
+
task :initial_config do
|
78
|
+
SYSTEM_CONFIG_FILES[:nginx].each do |file|
|
79
|
+
deprec2.render_template(:nginx, file.merge(:remote => true))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
66
83
|
desc <<-DESC
|
67
84
|
Generate nginx config from template. Note that this does not
|
68
85
|
push the config to the server, it merely generates required
|
@@ -74,11 +91,33 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
74
91
|
deprec2.render_template(:nginx, file)
|
75
92
|
end
|
76
93
|
end
|
94
|
+
|
95
|
+
desc "Generate config files for rails app."
|
96
|
+
task :config_gen_project do
|
97
|
+
PROJECT_CONFIG_FILES[:nginx].each do |file|
|
98
|
+
deprec2.render_template(:nginx, file)
|
99
|
+
end
|
100
|
+
end
|
77
101
|
|
78
102
|
desc "Push nginx config files to server"
|
79
103
|
task :config, :roles => :web do
|
80
104
|
deprec2.push_configs(:nginx, SYSTEM_CONFIG_FILES[:nginx])
|
81
105
|
end
|
106
|
+
|
107
|
+
desc "Push out config files for rails app."
|
108
|
+
task :config_project, :roles => :web do
|
109
|
+
deprec2.push_configs(:nginx, PROJECT_CONFIG_FILES[:nginx])
|
110
|
+
symlink_nginx_vhost
|
111
|
+
symlink_nginx_logrotate_config
|
112
|
+
end
|
113
|
+
|
114
|
+
task :symlink_nginx_vhost, :roles => :web do
|
115
|
+
sudo "ln -sf #{deploy_to}/nginx/rails_nginx_vhost.conf #{nginx_vhost_dir}/#{application}.conf"
|
116
|
+
end
|
117
|
+
|
118
|
+
task :symlink_nginx_logrotate_config, :roles => :web do
|
119
|
+
sudo "ln -sf #{deploy_to}/nginx/logrotate.conf /etc/logrotate.d/nginx-#{application}"
|
120
|
+
end
|
82
121
|
|
83
122
|
desc <<-DESC
|
84
123
|
Activate nginx start scripts on server.
|
@@ -104,25 +143,29 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
104
143
|
|
105
144
|
desc "Start Nginx"
|
106
145
|
task :start, :roles => :web do
|
107
|
-
|
146
|
+
# Nginx returns error code if you try to start it when it's already running
|
147
|
+
# We don't want this to kill Capistrano.
|
148
|
+
send(run_method, "/etc/init.d/nginx start; exit 0")
|
108
149
|
end
|
109
150
|
|
110
151
|
desc "Stop Nginx"
|
111
152
|
task :stop, :roles => :web do
|
112
|
-
|
153
|
+
# Nginx returns error code if you try to stop when it's not running
|
154
|
+
# We don't want this to kill Capistrano.
|
155
|
+
send(run_method, "/etc/init.d/nginx stop; exit 0")
|
113
156
|
end
|
114
157
|
|
115
158
|
desc "Restart Nginx"
|
116
159
|
task :restart, :roles => :web do
|
117
|
-
|
118
|
-
|
119
|
-
send(run_method, "/etc/init.d/nginx stop; exit 0")
|
120
|
-
send(run_method, "/etc/init.d/nginx start")
|
160
|
+
stop
|
161
|
+
start
|
121
162
|
end
|
122
163
|
|
123
164
|
desc "Reload Nginx"
|
124
165
|
task :reload, :roles => :web do
|
125
|
-
|
166
|
+
# Nginx returns error code if you try to reload when it's not running
|
167
|
+
# We don't want this to kill Capistrano.
|
168
|
+
send(run_method, "/etc/init.d/nginx reload; exit 0")
|
126
169
|
end
|
127
170
|
|
128
171
|
task :backup, :roles => :web do
|
@@ -141,4 +184,4 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
141
184
|
|
142
185
|
end
|
143
186
|
end
|
144
|
-
end
|
187
|
+
end
|
@@ -2,13 +2,18 @@
|
|
2
2
|
Capistrano::Configuration.instance(:must_exist).load do
|
3
3
|
namespace :deprec do
|
4
4
|
namespace :passenger do
|
5
|
+
|
6
|
+
set(:passenger_install_dir) {
|
7
|
+
if passenger_use_ree
|
8
|
+
"#{ree_install_dir}/lib/ruby/gems/1.8/gems/passenger-2.0.6"
|
9
|
+
else
|
10
|
+
'/opt/passenger'
|
11
|
+
end
|
12
|
+
}
|
5
13
|
|
6
|
-
set :passenger_version, "passenger-2.1.0"
|
7
|
-
set :passenger_filename, "#{passenger_version}.tar.gz"
|
8
|
-
set :passenger_install_dir, "/opt/#{passenger_version}"
|
9
14
|
set(:passenger_document_root) { "#{current_path}/public" }
|
10
15
|
set :passenger_rails_allow_mod_rewrite, 'off'
|
11
|
-
set :passenger_vhost_dir, '/etc/apache2/sites-
|
16
|
+
set :passenger_vhost_dir, '/etc/apache2/sites-available'
|
12
17
|
# Default settings for Passenger config files
|
13
18
|
set :passenger_log_level, 0
|
14
19
|
set :passenger_user_switching, 'on'
|
@@ -20,18 +25,65 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
20
25
|
set :passenger_rails_spawn_method, 'smart' # smart | conservative
|
21
26
|
|
22
27
|
SRC_PACKAGES[:passenger] = {
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
28
|
+
:url => "git://github.com/FooBarWidget/passenger.git",
|
29
|
+
:download_method => :git,
|
30
|
+
:version => 'release-2.0.6', # Specify a tagged release to deploy
|
26
31
|
:configure => '',
|
27
32
|
:make => '',
|
28
|
-
:install => './bin/passenger-install-apache2-module
|
33
|
+
:install => './bin/passenger-install-apache2-module'
|
29
34
|
}
|
35
|
+
|
36
|
+
desc "Install passenger"
|
37
|
+
task :install, :roles => :app do
|
38
|
+
install_deps
|
39
|
+
deprec2.download_src(SRC_PACKAGES[:passenger], src_dir)
|
40
|
+
|
41
|
+
if passenger_use_ree
|
42
|
+
# Install the Passenger that came with Ruby Enterprise Edition
|
43
|
+
run "yes | #{sudo} env PATH=#{ree_install_dir}/bin:$PATH #{ree_install_dir}/bin/passenger-install-apache2-module"
|
44
|
+
else
|
45
|
+
# Non standard - passenger requires input
|
46
|
+
package_dir = File.join(src_dir, 'passenger.git')
|
47
|
+
dest_dir = passenger_install_dir + '-' + (SRC_PACKAGES[:passenger][:version] || 'trunk')
|
48
|
+
run "#{sudo} rsync -avz #{package_dir}/ #{dest_dir}"
|
49
|
+
run "cd #{dest_dir} && yes '' | #{sudo} ./bin/passenger-install-apache2-module"
|
50
|
+
run "#{sudo} unlink #{passenger_install_dir} 2>/dev/null; #{sudo} ln -sf #{dest_dir} #{passenger_install_dir}"
|
51
|
+
end
|
52
|
+
|
53
|
+
initial_config_push
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
task :initial_config_push, :roles => :web do
|
58
|
+
# XXX Non-standard!
|
59
|
+
# We need to push out the .load and .conf files for Passenger
|
60
|
+
SYSTEM_CONFIG_FILES[:passenger].each do |file|
|
61
|
+
deprec2.render_template(:passenger, file.merge(:remote => true))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Install dependencies for Passenger
|
66
|
+
task :install_deps, :roles => :app do
|
67
|
+
apt.install( {:base => %w(apache2-mpm-prefork apache2-prefork-dev rsync)}, :stable )
|
68
|
+
gem2.install 'fastthread'
|
69
|
+
gem2.install 'rack'
|
70
|
+
gem2.install 'rake'
|
71
|
+
# These are more Rails than Passenger - Mike
|
72
|
+
# gem2.install 'rails'
|
73
|
+
# gem2.install "mysql -- --with-mysql-config='/usr/bin/mysql_config'"
|
74
|
+
# gem2.install 'sqlite3-ruby'
|
75
|
+
# gem2.install 'postgres'
|
76
|
+
end
|
30
77
|
|
31
78
|
SYSTEM_CONFIG_FILES[:passenger] = [
|
32
79
|
|
33
|
-
{:template => 'passenger.erb',
|
34
|
-
:path => '/etc/apache2/
|
80
|
+
{:template => 'passenger.load.erb',
|
81
|
+
:path => '/etc/apache2/mods-available/passenger.load',
|
82
|
+
:mode => 0755,
|
83
|
+
:owner => 'root:root'},
|
84
|
+
|
85
|
+
{:template => 'passenger.conf.erb',
|
86
|
+
:path => '/etc/apache2/mods-available/passenger.conf',
|
35
87
|
:mode => 0755,
|
36
88
|
:owner => 'root:root'}
|
37
89
|
|
@@ -40,23 +92,11 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
40
92
|
PROJECT_CONFIG_FILES[:passenger] = [
|
41
93
|
|
42
94
|
{ :template => 'apache_vhost.erb',
|
43
|
-
:path =>
|
95
|
+
:path => "apache_vhost",
|
44
96
|
:mode => 0755,
|
45
97
|
:owner => 'root:root'}
|
46
98
|
|
47
99
|
]
|
48
|
-
|
49
|
-
desc "Install passenger"
|
50
|
-
task :install, :roles => :passenger do
|
51
|
-
install_deps
|
52
|
-
deprec2.download_src(SRC_PACKAGES[:passenger], passenger_install_dir)
|
53
|
-
deprec2.install_from_src(SRC_PACKAGES[:passenger], passenger_install_dir)
|
54
|
-
end
|
55
|
-
|
56
|
-
# install dependencies for nginx
|
57
|
-
task :install_deps, :roles => :passenger do
|
58
|
-
apt.install( {:base => %w(apache2-mpm-prefork apache2-prefork-dev rsync)}, :stable )
|
59
|
-
end
|
60
100
|
|
61
101
|
desc "Generate Passenger apache configs (system & project level)."
|
62
102
|
task :config_gen do
|
@@ -79,26 +119,69 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
79
119
|
end
|
80
120
|
|
81
121
|
desc "Push Passenger config files (system & project level) to server"
|
82
|
-
task :config, :roles => :
|
122
|
+
task :config, :roles => :app do
|
83
123
|
config_system
|
84
124
|
config_project
|
85
125
|
end
|
86
126
|
|
87
127
|
desc "Push Passenger configs (system level) to server"
|
88
|
-
task :config_system, :roles => :
|
128
|
+
task :config_system, :roles => :app do
|
89
129
|
deprec2.push_configs(:passenger, SYSTEM_CONFIG_FILES[:passenger])
|
130
|
+
activate_system
|
90
131
|
end
|
91
132
|
|
92
133
|
desc "Push Passenger configs (project level) to server"
|
93
|
-
task :config_project, :roles => :
|
134
|
+
task :config_project, :roles => :app do
|
94
135
|
deprec2.push_configs(:passenger, PROJECT_CONFIG_FILES[:passenger])
|
95
136
|
symlink_passenger_vhost
|
137
|
+
activate_project
|
96
138
|
end
|
97
139
|
|
98
|
-
task :symlink_passenger_vhost, :roles => :
|
140
|
+
task :symlink_passenger_vhost, :roles => :app do
|
99
141
|
sudo "ln -sf #{deploy_to}/passenger/apache_vhost #{passenger_vhost_dir}/#{application}"
|
100
142
|
end
|
101
143
|
|
144
|
+
task :activate, :roles => :app do
|
145
|
+
activate_system
|
146
|
+
activate_project
|
147
|
+
end
|
148
|
+
|
149
|
+
task :activate_system, :roles => :app do
|
150
|
+
sudo "a2enmod passenger"
|
151
|
+
top.deprec.web.reload
|
152
|
+
end
|
153
|
+
|
154
|
+
task :activate_project, :roles => :app do
|
155
|
+
sudo "a2ensite #{application}"
|
156
|
+
top.deprec.web.reload
|
157
|
+
end
|
158
|
+
|
159
|
+
task :deactivate do
|
160
|
+
puts
|
161
|
+
puts "******************************************************************"
|
162
|
+
puts
|
163
|
+
puts "Danger!"
|
164
|
+
puts
|
165
|
+
puts "Do you want to deactivate just this project or all Passenger"
|
166
|
+
puts "projects on this server? Try a more granular command:"
|
167
|
+
puts
|
168
|
+
puts "cap deprec:passenger:deactivate_system # disable Passenger"
|
169
|
+
puts "cap deprec:passenger:deactivate_project # disable only this project"
|
170
|
+
puts
|
171
|
+
puts "******************************************************************"
|
172
|
+
puts
|
173
|
+
end
|
174
|
+
|
175
|
+
task :deactivate_system, :roles => :app do
|
176
|
+
sudo "a2dismod passenger"
|
177
|
+
top.deprec.web.reload
|
178
|
+
end
|
179
|
+
|
180
|
+
task :deactivate_project, :roles => :app do
|
181
|
+
sudo "a2dissite #{application}"
|
182
|
+
top.deprec.web.reload
|
183
|
+
end
|
184
|
+
|
102
185
|
desc "Restart Application"
|
103
186
|
task :restart, :roles => :app do
|
104
187
|
run "touch #{current_path}/tmp/restart.txt"
|
@@ -110,5 +193,42 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
110
193
|
end
|
111
194
|
|
112
195
|
end
|
196
|
+
|
197
|
+
namespace :ree do
|
198
|
+
|
199
|
+
set :ree_version, 'ruby-enterprise-1.8.6-20090113'
|
200
|
+
set :ree_install_dir, "/opt/#{ree_version}"
|
201
|
+
set :ree_short_path, '/opt/ruby-enterprise'
|
202
|
+
|
203
|
+
SRC_PACKAGES[:ree] = {
|
204
|
+
:md5sum => "e8d796a5bae0ec1029a88ba95c5d901d #{ree_version}.tar.gz",
|
205
|
+
:url => "http://rubyforge.org/frs/download.php/50087/#{ree_version}.tar.gz",
|
206
|
+
:configure => '',
|
207
|
+
:make => '',
|
208
|
+
:install => "./installer --auto /opt/#{ree_version}"
|
209
|
+
}
|
210
|
+
|
211
|
+
task :install do
|
212
|
+
install_deps
|
213
|
+
deprec2.download_src(SRC_PACKAGES[:ree], src_dir)
|
214
|
+
deprec2.install_from_src(SRC_PACKAGES[:ree], src_dir)
|
215
|
+
symlink_ree
|
216
|
+
end
|
217
|
+
|
218
|
+
task :install_deps do
|
219
|
+
apt.install({:base => %w(libssl-dev libmysqlclient15-dev libreadline5-dev)}, :stable)
|
220
|
+
end
|
221
|
+
|
222
|
+
task :symlink_ree do
|
223
|
+
sudo "ln -sf /opt/#{ree_version} #{ree_short_path}"
|
224
|
+
sudo "ln -fs #{ree_short_path}/bin/gem /usr/local/bin/gem"
|
225
|
+
sudo "ln -fs #{ree_short_path}/bin/irb /usr/local/bin/irb"
|
226
|
+
sudo "ln -fs #{ree_short_path}/bin/rake /usr/local/bin/rake"
|
227
|
+
sudo "ln -fs #{ree_short_path}/bin/rails /usr/local/bin/rails"
|
228
|
+
sudo "ln -fs #{ree_short_path}/bin/ruby /usr/local/bin/ruby"
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
113
233
|
end
|
114
234
|
end
|
data/lib/deprec/recipes/rails.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
2
2
|
Capistrano::Configuration.instance(:must_exist).load do
|
3
3
|
|
4
|
+
set :app_user_prefix, 'app_'
|
5
|
+
set(:app_user) { app_user_prefix + application }
|
6
|
+
set :app_group_prefix, 'app_'
|
7
|
+
set(:app_group) { app_group_prefix + application }
|
4
8
|
set :database_yml_in_scm, true
|
5
9
|
set :app_symlinks, nil
|
6
10
|
set :rails_env, 'production'
|
@@ -11,21 +15,27 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
11
15
|
# Hook into the default capistrano deploy tasks
|
12
16
|
before 'deploy:setup', :except => { :no_release => true } do
|
13
17
|
top.deprec.rails.setup_user_perms
|
18
|
+
top.deprec.rails.create_app_user_and_group
|
14
19
|
top.deprec.rails.setup_paths
|
15
20
|
top.deprec.rails.setup_shared_dirs
|
16
21
|
top.deprec.rails.install_gems_for_project
|
17
22
|
end
|
18
23
|
|
19
24
|
after 'deploy:setup', :except => { :no_release => true } do
|
20
|
-
top.deprec.rails.setup_servers
|
21
25
|
top.deprec.rails.create_config_dir
|
26
|
+
top.deprec.rails.config_gen
|
27
|
+
top.deprec.rails.config
|
28
|
+
top.deprec.rails.activate_services
|
22
29
|
top.deprec.rails.set_perms_on_shared_and_releases
|
30
|
+
top.deprec.web.reload
|
31
|
+
top.deprec.rails.setup_database
|
23
32
|
end
|
24
33
|
|
25
34
|
after 'deploy:symlink', :roles => :app do
|
26
35
|
top.deprec.rails.symlink_shared_dirs
|
27
36
|
top.deprec.rails.symlink_database_yml unless database_yml_in_scm
|
28
|
-
top.deprec.
|
37
|
+
top.deprec.rails.make_writable_by_app
|
38
|
+
set_owner_of_environment_rb if web_server_type.to_s == 'passenger'
|
29
39
|
end
|
30
40
|
|
31
41
|
after :deploy, :roles => :app do
|
@@ -35,20 +45,31 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
35
45
|
namespace :deprec do
|
36
46
|
namespace :rails do
|
37
47
|
|
48
|
+
task :setup_database, :roles => :db do
|
49
|
+
if ! roles[:db].servers.empty? # Some apps don't use database!
|
50
|
+
deprec2.read_database_yml
|
51
|
+
top.deprec.db.create_user
|
52
|
+
top.deprec.db.create_database
|
53
|
+
top.deprec.db.grant_user_access_to_database
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
38
57
|
task :install, :roles => :app do
|
39
58
|
install_deps
|
40
59
|
install_gems
|
41
60
|
end
|
42
61
|
|
43
62
|
task :install_deps do
|
44
|
-
apt.install( {:base => %w(libmysqlclient15-dev sqlite3 libsqlite3-ruby libsqlite3-dev)}, :stable )
|
63
|
+
apt.install( {:base => %w(libmysqlclient15-dev sqlite3 libsqlite3-ruby libsqlite3-dev libpq-dev)}, :stable )
|
45
64
|
end
|
46
65
|
|
47
66
|
# install some required ruby gems
|
48
67
|
task :install_gems do
|
49
68
|
gem2.install 'sqlite3-ruby'
|
50
69
|
gem2.install 'mysql'
|
70
|
+
gem2.install 'ruby-pg'
|
51
71
|
gem2.install 'rails'
|
72
|
+
gem2.install 'rake'
|
52
73
|
gem2.install 'rspec'
|
53
74
|
end
|
54
75
|
|
@@ -56,27 +77,28 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
56
77
|
Install full rails stack on a stock standard ubuntu server (7.10, 8.04)
|
57
78
|
DESC
|
58
79
|
task :install_stack do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# XXX check this out before removing - Mike
|
67
|
-
deprec2.for_roles('app') do
|
68
|
-
top.deprec.svn.install
|
69
|
-
top.deprec.git.install
|
70
|
-
top.deprec.mongrel.install
|
71
|
-
top.deprec.monit.install
|
72
|
-
top.deprec.rails.install
|
80
|
+
|
81
|
+
if app_server_type.to_s == 'passenger' and passenger_use_ree
|
82
|
+
top.deprec.ree.install
|
83
|
+
else
|
84
|
+
top.deprec.ruby.install
|
85
|
+
top.deprec.rubygems.install
|
73
86
|
end
|
87
|
+
top.deprec.web.install # Uses value of web_server_type
|
88
|
+
top.deprec.svn.install
|
89
|
+
top.deprec.git.install
|
90
|
+
top.deprec.app.install # Uses value of app_server_type
|
91
|
+
top.deprec.monit.install
|
92
|
+
top.deprec.rails.install
|
93
|
+
top.deprec.logrotate.install
|
74
94
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
95
|
+
# We not longer install database server as part of this task.
|
96
|
+
# There is too much danger that someone will wreck an existing
|
97
|
+
# shared database.
|
98
|
+
#
|
99
|
+
# Install database server with:
|
100
|
+
#
|
101
|
+
# cap deprec:db:install
|
80
102
|
end
|
81
103
|
|
82
104
|
task :install_rails_stack do
|
@@ -84,69 +106,71 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
84
106
|
install_stack
|
85
107
|
end
|
86
108
|
|
87
|
-
task :install_gems_for_project, :roles => :app do
|
88
|
-
if gems_for_project
|
89
|
-
gems_for_project.each { |gem| gem2.install(gem) }
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
PROJECT_CONFIG_FILES[:nginx] = [
|
94
|
-
|
95
|
-
{:template => 'rails_nginx_vhost.conf.erb',
|
96
|
-
:path => "rails_nginx_vhost.conf",
|
97
|
-
:mode => 0644,
|
98
|
-
:owner => 'root:root'},
|
99
|
-
|
100
|
-
{:template => 'logrotate.conf.erb',
|
101
|
-
:path => "logrotate.conf",
|
102
|
-
:mode => 0644,
|
103
|
-
:owner => 'root:root'}
|
104
|
-
]
|
105
|
-
|
106
109
|
desc "Generate config files for rails app."
|
107
110
|
task :config_gen do
|
108
|
-
|
109
|
-
|
110
|
-
end
|
111
|
-
top.deprec.mongrel.config_gen_project
|
111
|
+
top.deprec.web.config_gen_project
|
112
|
+
top.deprec.app.config_gen_project
|
112
113
|
end
|
113
114
|
|
114
115
|
desc "Push out config files for rails app."
|
115
|
-
task :config
|
116
|
-
|
117
|
-
top.deprec.
|
118
|
-
symlink_nginx_vhost
|
119
|
-
symlink_nginx_logrotate_config
|
116
|
+
task :config do
|
117
|
+
top.deprec.web.config_project
|
118
|
+
top.deprec.app.config_project
|
120
119
|
end
|
121
120
|
|
122
|
-
task :
|
123
|
-
|
121
|
+
task :create_config_dir, :roles => :app do
|
122
|
+
deprec2.mkdir("#{shared_path}/config", :group => group, :mode => 0775, :via => :sudo)
|
124
123
|
end
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
|
125
|
+
# XXX This should be restricted a bit to limit what app can write to. - Mike
|
126
|
+
desc "set group ownership and permissions on dirs app server needs to write to"
|
127
|
+
task :make_writable_by_app, :roles => :app do
|
128
|
+
tmp_dir = "#{deploy_to}/current/tmp"
|
129
|
+
shared_dir = "#{deploy_to}/shared"
|
130
|
+
# XXX Factor this out
|
131
|
+
files = ["#{mongrel_log_dir}/mongrel.log", "#{mongrel_log_dir}/#{rails_env}.log"]
|
129
132
|
|
130
|
-
|
131
|
-
|
133
|
+
sudo "chgrp -R #{app_group} #{tmp_dir} #{shared_dir}"
|
134
|
+
sudo "chmod -R g+w #{tmp_dir} #{shared_dir}"
|
135
|
+
# set owner and group of log files
|
136
|
+
files.each { |file|
|
137
|
+
sudo "touch #{file}"
|
138
|
+
sudo "chown #{app_user} #{file}"
|
139
|
+
sudo "chgrp #{app_group} #{file}"
|
140
|
+
sudo "chmod g+w #{file}"
|
141
|
+
}
|
132
142
|
end
|
133
143
|
|
134
144
|
desc "Create deployment group and add current user to it"
|
135
145
|
task :setup_user_perms, :roles => [:app, :web] do
|
136
146
|
deprec2.groupadd(group)
|
137
147
|
deprec2.add_user_to_group(user, group)
|
138
|
-
deprec2.groupadd(
|
139
|
-
deprec2.add_user_to_group(user,
|
148
|
+
deprec2.groupadd(app_group)
|
149
|
+
deprec2.add_user_to_group(user, app_group)
|
140
150
|
# we've just added ourself to a group - need to teardown connection
|
141
151
|
# so that next command uses new session where we belong in group
|
142
152
|
deprec2.teardown_connections
|
143
153
|
end
|
144
154
|
|
155
|
+
desc "Create user and group for application to run as"
|
156
|
+
task :create_app_user_and_group, :roles => :app do
|
157
|
+
deprec2.groupadd(app_group)
|
158
|
+
deprec2.useradd(app_user, :group => app_group, :homedir => false)
|
159
|
+
# Set the primary group for the user the application runs as (in case
|
160
|
+
# user already existed when previous command was run)
|
161
|
+
sudo "usermod --gid #{app_group} #{app_user}"
|
162
|
+
end
|
163
|
+
|
145
164
|
task :set_perms_on_shared_and_releases, :roles => :app do
|
146
165
|
releases = File.join(deploy_to, 'releases')
|
147
166
|
sudo "chgrp -R #{group} #{shared_path} #{releases}"
|
148
167
|
sudo "chmod -R g+w #{shared_path} #{releases}"
|
149
168
|
end
|
169
|
+
|
170
|
+
# Passenger runs Rails as the owner of this file.
|
171
|
+
task :set_owner_of_environment_rb, :roles => :app do
|
172
|
+
sudo "chown #{app_user} #{current_path}/config/environment.rb"
|
173
|
+
end
|
150
174
|
|
151
175
|
# Setup database server.
|
152
176
|
task :setup_db, :roles => :db, :only => { :primary => true } do
|
@@ -183,12 +207,18 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
183
207
|
end
|
184
208
|
end
|
185
209
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
210
|
+
task :install_gems_for_project, :roles => :app do
|
211
|
+
if gems_for_project
|
212
|
+
gems_for_project.each { |gem| gem2.install(gem) }
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
desc "Activate web, app and monit"
|
217
|
+
task :activate_services do
|
218
|
+
top.deprec.web.activate
|
219
|
+
top.deprec.app.activate
|
220
|
+
top.deprec.monit.activate
|
221
|
+
end
|
192
222
|
|
193
223
|
# database.yml stuff
|
194
224
|
#
|
@@ -239,21 +269,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
239
269
|
task :symlink_database_yml, :roles => :app do
|
240
270
|
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
241
271
|
end
|
242
|
-
|
243
|
-
|
244
272
|
|
245
|
-
desc "setup and configure servers"
|
246
|
-
task :setup_servers do
|
247
|
-
top.deprec.nginx.activate
|
248
|
-
top.deprec.mongrel.create_mongrel_user_and_group
|
249
|
-
top.deprec.mongrel.activate
|
250
|
-
top.deprec.monit.activate
|
251
|
-
top.deprec.rails.config_gen
|
252
|
-
top.deprec.rails.config
|
253
|
-
end
|
254
273
|
end
|
255
274
|
|
256
|
-
namespace :
|
275
|
+
namespace :database do
|
257
276
|
|
258
277
|
desc "Create database"
|
259
278
|
task :create, :roles => :db do
|
@@ -280,3 +299,5 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
280
299
|
end
|
281
300
|
|
282
301
|
end
|
302
|
+
|
303
|
+
|