brightbox 0.25 → 2.0.1

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.
@@ -0,0 +1,48 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+ # Hook tasks into the standard deployment system
21
+
22
+ after "deploy:setup",
23
+ "deploy:shared:local:setup",
24
+ "configure:logrotation",
25
+ "configure:monit",
26
+ "configure:mongrel",
27
+ "configure:apache",
28
+ "configure:nginx"
29
+
30
+ after "deploy:cold",
31
+ "deploy:monit:reload"
32
+
33
+ after "deploy:finalize_update",
34
+ "deploy:shared:local:symlink",
35
+ "gems:install"
36
+
37
+ after "deploy:update",
38
+ "deploy:cleanup"
39
+
40
+ before "deploy:migrate",
41
+ "db:check:config",
42
+ "db:create"
43
+
44
+ after "deploy:start",
45
+ "deploy:web:reload_if_new"
46
+
47
+ after "deploy:restart",
48
+ "deploy:web:reload_if_new"
@@ -0,0 +1,178 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ def monit_setup
22
+ "/usr/bin/railsapp-monit"
23
+ end
24
+ depend :remote, :command, monit_setup
25
+
26
+ def apache_setup
27
+ "/usr/bin/railsapp-apache"
28
+ end
29
+ depend :remote, :command, apache_setup
30
+
31
+ def nginx_setup
32
+ "/usr/bin/railsapp-nginx"
33
+ end
34
+ depend :remote, :command, nginx_setup
35
+
36
+ def mongrel_setup
37
+ "/usr/bin/railsapp-mongrel"
38
+ end
39
+ depend :remote, :command, mongrel_setup
40
+
41
+ def logrotate_setup
42
+ "/usr/bin/railsapp-logrotate"
43
+ end
44
+ depend :remote, :command, logrotate_setup
45
+
46
+ def mysql_setup
47
+ "/usr/bin/railsapp-check"
48
+ end
49
+ depend :remote, :command, mysql_setup
50
+
51
+ namespace :configure do
52
+
53
+ [:nginx, :apache].each do |webserver|
54
+ desc %Q{
55
+ [internal]Create #{webserver.to_s} config. Creates a load balancing virtual host \
56
+ configuration based upon your specified settings
57
+
58
+ :application Name of the application
59
+ :domain Domain name which will point to the application
60
+ :domain_aliases Comma separated list of aliased for the main domain
61
+ :mongrel_host Name of application layer host (default localhost)
62
+ :mongrel_port Start port of the mongrel cluster (default 8000)
63
+ :mongrel_servers Number of servers on app host (default 2)
64
+ :ssl_certificate Create SSL configuration with certificate
65
+ :ssl_key Name of private key to use with certificate
66
+
67
+ }
68
+ task webserver, :roles => :web, :except => {:no_release => true} do
69
+ sudo on_one_line( <<-END
70
+ #{send(webserver.to_s + "_setup")}
71
+ -n #{application}
72
+ -d #{domain}
73
+ #{'-a '+domain_aliases if domain_aliases}
74
+ -w #{File.join(current_path, 'public')}
75
+ -h #{mongrel_host}
76
+ -p #{mongrel_port}
77
+ -s #{mongrel_servers}
78
+ #{'-c '+ssl_certificate if ssl_certificate}
79
+ #{'-k '+ssl_key if ssl_key}
80
+ END
81
+ )
82
+ end
83
+ end
84
+
85
+ desc %Q{
86
+ [internal]Create Mongrel config. Creates a set of mongrels running \
87
+ on the specified ports of the application server(s).
88
+
89
+ :application Name of the application
90
+ :mongrel_host Name of application layer host (default localhost)
91
+ :mongrel_port Start port of the mongrel cluster (default 8000)
92
+ :mongrel_servers Number of servers on app host (default 2)
93
+ :mongrel_pid_file The name of the file containing the mongrel PID
94
+
95
+ }
96
+ task :mongrel, :roles => :app, :except => {:no_release => true} do
97
+ sudo on_one_line( <<-END
98
+ #{mongrel_setup}
99
+ -n #{application}
100
+ -r #{current_path}
101
+ -p #{mongrel_port}
102
+ -s #{mongrel_servers}
103
+ -h #{mongrel_host}
104
+ -C #{mongrel_config_file}
105
+ -P #{mongrel_pid_file}
106
+ END
107
+ )
108
+ end
109
+
110
+ desc %Q{
111
+ [internal]Create Monit config. Build a monit configuraton file \
112
+ to look after this application
113
+
114
+ :application Name of the application
115
+ :mongrel_host Name of application layer host (default localhost)
116
+ :mongrel_port Start port of the mongrel cluster (default 8000)
117
+ :mongrel_servers Number of servers on app host (default 2)
118
+
119
+ }
120
+ task :monit, :except => {:no_release => true} do
121
+ sudo on_one_line( <<-END
122
+ #{monit_setup}
123
+ -n #{application}
124
+ -u #{user}
125
+ -r #{current_path}
126
+ -h #{mongrel_host}
127
+ -p #{mongrel_port}
128
+ -s #{mongrel_servers}
129
+ -C #{mongrel_config_file}
130
+ -P #{mongrel_pid_file}
131
+ END
132
+ )
133
+ end
134
+
135
+ desc %Q{
136
+ [internal]Create logrotation config. Build a logrotate configuraton file \
137
+ so that logrotate will look after the log files.
138
+
139
+ :application Name of the application
140
+ :log_max_size Rotate when log reaches this size
141
+ :log_keep Number of compressed logs to keep
142
+
143
+ }
144
+ task :logrotation, :roles => :app, :except => {:no_release => true} do
145
+ sudo on_one_line( <<-END
146
+ #{logrotate_setup}
147
+ -n #{application}
148
+ -l #{log_dir}
149
+ -s #{log_max_size}
150
+ -k #{log_keep}
151
+ END
152
+ )
153
+ end
154
+
155
+ desc %Q{
156
+ [internal]Run the check command if this application hasn't been
157
+ deployed yet
158
+ }
159
+ task :check, :except => {:no_release => true} do
160
+ begin
161
+ deploy.check unless releases.length > 0
162
+ rescue
163
+ puts "Error detected. Have you run 'cap deploy:setup'?"
164
+ raise
165
+ ensure
166
+ reset! :releases
167
+ end
168
+ end
169
+
170
+ desc %Q{
171
+ [internal]Check the current database.yml file and update the
172
+ details from the .my.cnf file on the server if it exists.
173
+ }
174
+ task :mysql, :roles => :db, :only => {:primary => true} do
175
+ try_sudo "#{mysql_setup} -n #{application} #{latest_release}/config/database.yml"
176
+ end
177
+
178
+ end
@@ -0,0 +1,40 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ namespace :db do
22
+
23
+ desc %Q{
24
+ [internal]Create the database if it doesn't exist
25
+ }
26
+ task :create, :roles => :db, :only => { :primary => true } do
27
+ run rake_task("db:create")
28
+ end
29
+
30
+ namespace :check do
31
+ desc %Q{
32
+ [internal]Check the database configuration to make sure that
33
+ it conforms to the Brightbox standard
34
+ }
35
+ task :config, :roles => :db, :only => {:primary => true} do
36
+ run rake_task("db:check:config")
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,81 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+ # Override standard tasks that don't do what we want
21
+
22
+ namespace :deploy do
23
+
24
+ def mongrel_command
25
+ "/usr/bin/mongrel_rails"
26
+ end
27
+ depend :remote, :command, mongrel_command
28
+
29
+ def monit_command
30
+ "/usr/sbin/monit"
31
+ end
32
+ depend :remote, :command, monit_command
33
+
34
+ #Override start, stop and restart so that they use Monit to restart the
35
+ #application servers
36
+ %W(start stop restart status).each do |event|
37
+ desc "Ask mongrel to #{event} your application."
38
+ task event, :roles => :app, :except => {:no_release => true } do
39
+ try_sudo "#{mongrel_command} cluster::#{event} -C #{mongrel_config_file} --clean"
40
+ end
41
+ end
42
+
43
+ namespace :web do
44
+
45
+ desc %Q{
46
+ Reload the apache webserver
47
+ }
48
+ task :reload, :roles => :web, :except => {:no_release => true } do
49
+ sudo "/usr/sbin/invoke-rc.d apache2 reload"
50
+ end
51
+
52
+ desc %Q{
53
+ [internal]reload web server if first release
54
+ }
55
+ task :reload_if_new, :roles => :web, :except => {:no_release => true} do
56
+ reset! :releases
57
+ reload if releases.length == 1
58
+ end
59
+
60
+ end
61
+
62
+ namespace :monit do
63
+
64
+ desc %Q{
65
+ Reload monit
66
+ }
67
+ task :reload do
68
+ sudo "#{monit_command} reload"
69
+ end
70
+
71
+ end
72
+
73
+ desc %Q{Setup the directories and deploy the initial version of the
74
+ application
75
+ }
76
+ task :initial do
77
+ setup
78
+ cold
79
+ end
80
+
81
+ end
@@ -0,0 +1,30 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+
21
+ namespace :gems do
22
+
23
+ desc %Q{
24
+ [internal]Run the gems install task in the application.
25
+ }
26
+ task :install, :roles => :app do
27
+ sudo rake_task("gems:install")
28
+ end
29
+
30
+ end
@@ -0,0 +1,33 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+ def rake_task(taskname)
21
+ rake = fetch(:rake, "rake")
22
+ rails_env = fetch(:rails_env, "production")
23
+ rake_env = fetch(:rake_env, "")
24
+ directory = current_release
25
+
26
+ "cd #{directory}; #{rake} RAILS_ENV=#{rails_env} #{rake_env} #{taskname}"
27
+ end
28
+
29
+ def on_one_line(cmd_list)
30
+ cmd_list.gsub!(/\n/m, ' ')
31
+ end
32
+
33
+
@@ -0,0 +1,68 @@
1
+ # Brightbox - Easy Ruby Web Application Deployment
2
+ # Copyright (C) 2008, Neil Wilson, Brightbox Systems
3
+ #
4
+ # This file is part of the Brightbox deployment system
5
+ #
6
+ # Brightbox gem is free software: you can redistribute it and/or modify it
7
+ # under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License,
9
+ # or (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General
17
+ # Public License along with this program. If not, see
18
+ # <http://www.gnu.org/licenses/>.
19
+ #
20
+ # Manage the local shared area
21
+
22
+ namespace :deploy do
23
+ namespace :shared do
24
+ namespace :local do
25
+
26
+ desc %Q(
27
+ [internal] Creates shared directories. This is called by the setup
28
+ routine to create the directory structure within the shared area. It
29
+ references two arrays.
30
+
31
+ :local_shared_files - the list of files that should be shared
32
+ between releases.
33
+ :local_shared_dirs - the list of directories that should be
34
+ shared between releases.
35
+ )
36
+ task :setup, :except => {:no_release => true} do
37
+ dirs = local_shared_files.collect do |file|
38
+ File.join(shared_path, File.dirname(file))
39
+ end
40
+ dirs += local_shared_dirs.collect do |dir|
41
+ File.join(shared_path, dir)
42
+ end
43
+ try_sudo "umask 02 && mkdir -p #{dirs.join(' ')}" unless dirs.empty?
44
+ end
45
+
46
+ desc %Q{
47
+ [internal] Sets up the symlinks between the latest release and all
48
+ the shared items described in :local_shared_dirs and
49
+ :local_shared_files
50
+ }
51
+ task :symlink, :except => {:no_release => true} do
52
+ resources = local_shared_dirs+local_shared_files
53
+ run %Q{
54
+ cd #{latest_release} &&
55
+ rm -rf #{resources.join(' ')}
56
+ }
57
+ links = resources.collect do |resource|
58
+ "ln -sf #{File.join(shared_path,resource)} #{File.join(latest_release, resource)}"
59
+ end.join(" && ")
60
+ run links unless links.empty?
61
+ end
62
+
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+