brightbox 0.25 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +619 -0
- data/Rakefile +23 -0
- data/bin/brightbox +291 -20
- data/brightbox-gemspec.rb +46 -0
- data/lib/brightbox/recipes.rb +21 -120
- data/lib/brightbox/recipes/callbacks.rb +48 -0
- data/lib/brightbox/recipes/configure.rb +178 -0
- data/lib/brightbox/recipes/database.rb +40 -0
- data/lib/brightbox/recipes/deploy.rb +81 -0
- data/lib/brightbox/recipes/gems.rb +30 -0
- data/lib/brightbox/recipes/helpers.rb +33 -0
- data/lib/brightbox/recipes/shared_local.rb +68 -0
- data/lib/brightbox/recipes/variables.rb +44 -0
- data/lib/brightbox/version.rb +3 -0
- metadata +23 -34
- data/bin/brightbox-apache +0 -84
- data/bin/brightbox-monit +0 -68
- data/lib/brightbox/generators/brightbox/brightbox_generator.rb +0 -26
- data/lib/brightbox/generators/brightbox/brightboxapache_generator.rb +0 -27
- data/lib/brightbox/generators/brightbox/templates/deploy.rb +0 -41
- data/lib/brightbox/generators/loader.rb +0 -40
@@ -0,0 +1,44 @@
|
|
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
|
+
# Provide default settings for variables
|
21
|
+
_cset :mongrel_pid_file, "tmp/pids/mongrel.pid" #Stores Process ID for Mongrels
|
22
|
+
_cset :log_max_size, "100M" #Size at which to rotate log
|
23
|
+
_cset :log_keep, "10" #Keep this many compressed logs
|
24
|
+
_cset(:log_dir) {File.join(current_path, 'log')}
|
25
|
+
_cset :mongrel_host, "localhost"
|
26
|
+
_cset :mongrel_port, 9200
|
27
|
+
_cset :mongrel_servers, 2
|
28
|
+
_cset(:mongrel_config_file) {File.join(deploy_to, "#{application}_mongrel_config.yml")}
|
29
|
+
_cset(:domain) { abort "You need to set the :domain variable, e.g set :domain 'www.example.com'" }
|
30
|
+
_cset :domain_aliases, nil
|
31
|
+
_cset :user, "rails"
|
32
|
+
_cset :runner, user
|
33
|
+
_cset :use_sudo, false
|
34
|
+
_cset :ssl_certificate, nil
|
35
|
+
_cset :ssl_key, nil
|
36
|
+
ssh_options[:forward_agent] = true
|
37
|
+
|
38
|
+
# Default system dependencies
|
39
|
+
depend :remote, :gem, "rails", ">=2"
|
40
|
+
depend :remote, :command, "mongrel_rails"
|
41
|
+
|
42
|
+
# Default shared areas
|
43
|
+
_cset :local_shared_dirs, []
|
44
|
+
_cset :local_shared_files, []
|
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brightbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Leach
|
8
|
-
|
8
|
+
- Neil Wilson
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
13
|
+
date: 2008-06-10 00:00:00 +01:00
|
14
|
+
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: capistrano
|
@@ -19,45 +20,33 @@ dependencies:
|
|
19
20
|
requirements:
|
20
21
|
- - ">="
|
21
22
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
23
|
-
- - <
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: "1.9"
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: mongrel_cluster
|
29
|
-
version_requirement:
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 1.0.2
|
23
|
+
version: "2.3"
|
35
24
|
version:
|
36
25
|
description:
|
37
|
-
email:
|
26
|
+
email: support@brightbox.co.uk
|
38
27
|
executables:
|
39
28
|
- brightbox
|
40
|
-
- brightbox-apache
|
41
|
-
- brightbox-monit
|
42
29
|
extensions: []
|
43
30
|
|
44
31
|
extra_rdoc_files: []
|
45
32
|
|
46
33
|
files:
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
50
|
-
- lib/brightbox
|
34
|
+
- LICENSE
|
35
|
+
- Rakefile
|
36
|
+
- brightbox-gemspec.rb
|
37
|
+
- lib/brightbox/recipes/configure.rb
|
38
|
+
- lib/brightbox/recipes/variables.rb
|
39
|
+
- lib/brightbox/recipes/gems.rb
|
40
|
+
- lib/brightbox/recipes/helpers.rb
|
41
|
+
- lib/brightbox/recipes/callbacks.rb
|
42
|
+
- lib/brightbox/recipes/database.rb
|
43
|
+
- lib/brightbox/recipes/deploy.rb
|
44
|
+
- lib/brightbox/recipes/shared_local.rb
|
45
|
+
- lib/brightbox/version.rb
|
51
46
|
- lib/brightbox/recipes.rb
|
52
|
-
-
|
53
|
-
- lib/brightbox/generators/loader.rb
|
54
|
-
- lib/brightbox/generators/brightbox
|
55
|
-
- lib/brightbox/generators/brightbox/brightboxapache_generator.rb
|
56
|
-
- lib/brightbox/generators/brightbox/brightbox_generator.rb
|
57
|
-
- lib/brightbox/generators/brightbox/templates
|
58
|
-
- lib/brightbox/generators/brightbox/templates/deploy.rb
|
47
|
+
- bin/brightbox
|
59
48
|
has_rdoc: false
|
60
|
-
homepage: http://
|
49
|
+
homepage: http://wiki.brightbox.co.uk/docs:thebrightboxgem
|
61
50
|
post_install_message:
|
62
51
|
rdoc_options: []
|
63
52
|
|
@@ -77,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
66
|
version:
|
78
67
|
requirements: []
|
79
68
|
|
80
|
-
rubyforge_project:
|
81
|
-
rubygems_version:
|
69
|
+
rubyforge_project: brightbox
|
70
|
+
rubygems_version: 1.1.1
|
82
71
|
signing_key:
|
83
72
|
specification_version: 2
|
84
73
|
summary: Brightbox rails deployment scripts for Capistrano
|
data/bin/brightbox-apache
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'optparse'
|
5
|
-
require 'erb'
|
6
|
-
require 'fileutils'
|
7
|
-
|
8
|
-
@mongrelhost = "127.0.0.1"
|
9
|
-
@port = 9200
|
10
|
-
@mongrels = 2
|
11
|
-
|
12
|
-
OptionParser.new do |opts|
|
13
|
-
opts.banner = "Usage: #{$0} [options] [args]"
|
14
|
-
|
15
|
-
opts.on("-n", "--name APPLICATION_NAME",
|
16
|
-
"Name of application."
|
17
|
-
) { |value| @application = value }
|
18
|
-
opts.on("-w", "--webroot WEB_ROOT",
|
19
|
-
"path to web root"
|
20
|
-
) { |value| @webroot = value }
|
21
|
-
opts.on("-d", "--domain DOMAIN_NAME",
|
22
|
-
"Domain name for application."
|
23
|
-
) { |value| @domain = value }
|
24
|
-
opts.on("-p", "--port MONGREL_PORT",
|
25
|
-
"Port of the first mongrel sevuce"
|
26
|
-
) { |value| @port = value.to_i }
|
27
|
-
opts.on("-s", "--servers MONGRELS",
|
28
|
-
"Number of mongrel servers running"
|
29
|
-
) { |value| @mongrels = value.to_i }
|
30
|
-
opts.on("-h", "--mongrelhost MONGREL_HOST",
|
31
|
-
"ip/host where mongrel is running"
|
32
|
-
) { |value| @mongrelhost = value }
|
33
|
-
|
34
|
-
if ARGV.empty?
|
35
|
-
puts opts
|
36
|
-
exit
|
37
|
-
else
|
38
|
-
opts.parse!(ARGV)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
@balancer_members = (@port..@port+@mongrels-1).collect {|i| " BalancerMember http://#{@mongrelhost}:#{i}" }.join("\n")
|
43
|
-
|
44
|
-
TEMPLATE = <<EOT
|
45
|
-
# Created by the Brightbox Capistrano GEM at <%= Time.now %>
|
46
|
-
<VirtualHost *:80>
|
47
|
-
ServerName <%= @domain %>
|
48
|
-
DocumentRoot <%= @webroot %>
|
49
|
-
|
50
|
-
<Directory "<%= @webroot %>">
|
51
|
-
Options FollowSymLinks
|
52
|
-
AllowOverride None
|
53
|
-
Order allow,deny
|
54
|
-
Allow from all
|
55
|
-
</Directory>
|
56
|
-
|
57
|
-
# Configure mongrel_cluster
|
58
|
-
<Proxy balancer://mongrel_cluster>
|
59
|
-
<%= @balancer_members %>
|
60
|
-
</Proxy>
|
61
|
-
|
62
|
-
ErrorLog /var/log/web/<%= @application %>.err
|
63
|
-
CustomLog /var/log/web/<%= @application %>.log combined
|
64
|
-
|
65
|
-
# Rails specific rewrite rules
|
66
|
-
Include /etc/apache2/brightbox-common
|
67
|
-
|
68
|
-
# Add any access limit directives here
|
69
|
-
<Location />
|
70
|
-
Allow from all
|
71
|
-
</Location>
|
72
|
-
</VirtualHost>
|
73
|
-
EOT
|
74
|
-
|
75
|
-
template = ERB.new(TEMPLATE)
|
76
|
-
config = template.result
|
77
|
-
filename = "/etc/apache2/sites-available/rails-#{@application}"
|
78
|
-
if File.exists?(filename)
|
79
|
-
FileUtils.mkdir_p("/etc/apache2/sites-archived")
|
80
|
-
FileUtils.cp filename, "/etc/apache2/sites-archived/rails-#{@application}.#{Time.now.strftime('%y%m%d%H%M%S')}"
|
81
|
-
end
|
82
|
-
|
83
|
-
File.open(filename, "w") { |f| f.write config }
|
84
|
-
FileUtils.ln_s(filename, "/etc/apache2/sites-enabled/rails-#{@application}", :force => true)
|
data/bin/brightbox-monit
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'optparse'
|
5
|
-
require 'erb'
|
6
|
-
|
7
|
-
@mongrelhost = "127.0.0.1"
|
8
|
-
@port = 9200
|
9
|
-
@mongrels = 2
|
10
|
-
@railsenv = "production"
|
11
|
-
|
12
|
-
OptionParser.new do |opts|
|
13
|
-
opts.banner = "Usage: #{$0} [options] [args]"
|
14
|
-
|
15
|
-
opts.on("-n", "--name APPLICATION_NAME",
|
16
|
-
"Name of application."
|
17
|
-
) { |value| @application = value }
|
18
|
-
opts.on("-r", "--railsroot RAILS_ROOT",
|
19
|
-
"path to rails root"
|
20
|
-
) { |value| @railsroot = value }
|
21
|
-
opts.on("-e", "--railsenv RAILS_ENV",
|
22
|
-
"rails environment"
|
23
|
-
) { |value| @railsenv = value }
|
24
|
-
opts.on("-p", "--port MONGREL_PORT",
|
25
|
-
"Port of the first mongrel sevuce"
|
26
|
-
) { |value| @port = value.to_i }
|
27
|
-
opts.on("-s", "--servers MONGRELS",
|
28
|
-
"Number of mongrel servers running"
|
29
|
-
) { |value| @mongrels = value.to_i }
|
30
|
-
opts.on("-h", "--mongrelhost MONGREL_HOST",
|
31
|
-
"ip/host where mongrel is running"
|
32
|
-
) { |value| @mongrelhost = value }
|
33
|
-
|
34
|
-
if ARGV.empty?
|
35
|
-
puts opts
|
36
|
-
exit
|
37
|
-
else
|
38
|
-
opts.parse!(ARGV)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
@mongrel_instances = (@port..@port+@mongrels-1).collect { |port| [port, "#{@railsroot}/log/mongrel.#{port}.pid"] }
|
43
|
-
|
44
|
-
TEMPLATE = <<EOT
|
45
|
-
<% @mongrel_instances.each do |port, pidfile| %>
|
46
|
-
check process mongrel_<%= @application %>_<%= port %> with pidfile <%= pidfile %>
|
47
|
-
group <%= @application %>
|
48
|
-
start program = "/usr/bin/mongrel_rails start -d -c <%= @railsroot %> -p <%= port %> -e <%= @railsenv %> -P <%= pidfile %>"
|
49
|
-
as uid rails and gid rails
|
50
|
-
stop program = "/usr/bin/mongrel_rails stop -c <%= @railsroot %> -P <%= pidfile %> -w 20"
|
51
|
-
as uid rails and gid rails
|
52
|
-
|
53
|
-
if failed host <%= @mongrelhost %> port <%= port %> protocol http
|
54
|
-
with timeout 30 seconds
|
55
|
-
then restart
|
56
|
-
|
57
|
-
if mem > 110 Mb then restart
|
58
|
-
#if cpu is greater than 60% for 2 cycles then alert
|
59
|
-
#if cpu > 90% for 5 cycles then restart
|
60
|
-
#if loadavg(5min) greater than 10 for 8 cycles then restart
|
61
|
-
if 3 restarts within 5 cycles then timeout
|
62
|
-
<% end %>
|
63
|
-
EOT
|
64
|
-
|
65
|
-
template = ERB.new(TEMPLATE)
|
66
|
-
config = template.result
|
67
|
-
|
68
|
-
File.open("/etc/monit/conf.d/rails-#{@application}.monitrc", "w") { |f| f.write config }
|
@@ -1,26 +0,0 @@
|
|
1
|
-
class BrightboxGenerator < Rails::Generator::NamedBase
|
2
|
-
attr_reader :application_name
|
3
|
-
attr_reader :domain_name
|
4
|
-
attr_reader :server
|
5
|
-
|
6
|
-
def initialize(runtime_args, runtime_options = {})
|
7
|
-
super
|
8
|
-
@application_name = self.file_name
|
9
|
-
@domain_name = @args[0]
|
10
|
-
@server = @args[1]
|
11
|
-
end
|
12
|
-
|
13
|
-
def manifest
|
14
|
-
record do |m|
|
15
|
-
m.directory "config"
|
16
|
-
m.template "deploy.rb", File.join("config", "deploy.rb")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
protected
|
21
|
-
|
22
|
-
# Override with your own usage banner.
|
23
|
-
def banner
|
24
|
-
"Usage: #{$0} brightbox ApplicationName DomainName BrightboxServer"
|
25
|
-
end
|
26
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class BrightboxapacheGenerator < Rails::Generator::NamedBase
|
2
|
-
attr_reader :application_name
|
3
|
-
attr_reader :domain_name
|
4
|
-
attr_reader :port
|
5
|
-
attr_reader :mongrels
|
6
|
-
|
7
|
-
def initialize(runtime_args, runtime_options = {})
|
8
|
-
super
|
9
|
-
@application_name = self.file_name
|
10
|
-
@domain_name = @args[0]
|
11
|
-
@port = @args[1]
|
12
|
-
@mongrels = @args[2]
|
13
|
-
end
|
14
|
-
|
15
|
-
def manifest
|
16
|
-
record do |m|
|
17
|
-
m.template "apache_config", @application_name
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
# Override with your own usage banner.
|
24
|
-
def banner
|
25
|
-
"Usage: #{$0} brightbox_apache ApplicationName DomainName MongrelPort NumberOfMongrels"
|
26
|
-
end
|
27
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'brightbox/recipes'
|
2
|
-
|
3
|
-
# The name of your application. Used for deployment directory and filenames
|
4
|
-
# and apache configs
|
5
|
-
set :application, "<%= singular_name %>"
|
6
|
-
|
7
|
-
# Target directory for the application on the web and app servers.
|
8
|
-
set :deploy_to, "/home/rails/#{application}"
|
9
|
-
|
10
|
-
# Primary domain name of your application. Used in the Apache configs
|
11
|
-
set :domain, "<%= domain_name %>"
|
12
|
-
|
13
|
-
# Login user for ssh on your Brightbox server
|
14
|
-
set :user, "rails"
|
15
|
-
|
16
|
-
# URL of your source repository - there i
|
17
|
-
set :repository, "svn+ssh://rails@<%= server %>/home/rails/subversion/<%= singular_name %>/trunk"
|
18
|
-
|
19
|
-
role :web, "<%= server %>"
|
20
|
-
role :app, "<%= server %>"
|
21
|
-
role :db, "<%= server %>", :primary => true
|
22
|
-
|
23
|
-
set :use_sudo, false
|
24
|
-
|
25
|
-
set :mongrel_host, "127.0.0.1"
|
26
|
-
set :mongrel_port, 9200
|
27
|
-
set :mongrel_servers, 2
|
28
|
-
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"
|
29
|
-
|
30
|
-
# set :scm, :darcs # defaults to :subversion
|
31
|
-
# set :svn, "/path/to/svn" # defaults to searching the PATH
|
32
|
-
# set :darcs, "/path/to/darcs" # defaults to searching the PATH
|
33
|
-
# set :cvs, "/path/to/cvs" # defaults to searching the PATH
|
34
|
-
# set :gateway, "gate.host.com" # default to no gateway
|
35
|
-
|
36
|
-
# =============================================================================
|
37
|
-
# SSH OPTIONS
|
38
|
-
# =============================================================================
|
39
|
-
# ssh_options[:keys] = %w(/path/to/my/key /path/to/another/key)
|
40
|
-
# ssh_options[:port] = 25
|
41
|
-
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Brightbox
|
2
|
-
module Generators
|
3
|
-
class RailsLoader
|
4
|
-
def self.load!(options)
|
5
|
-
require "#{options[:apply_to]}/config/environment"
|
6
|
-
require "rails_generator"
|
7
|
-
require "rails_generator/scripts/generate"
|
8
|
-
|
9
|
-
Rails::Generator::Base.sources << Rails::Generator::PathSource.new(
|
10
|
-
:brightbox, File.dirname(__FILE__))
|
11
|
-
|
12
|
-
args = ["brightbox"]
|
13
|
-
args << (options[:application] || "Application")
|
14
|
-
args << (options[:domain] || "application.boxname.username.brightbox.co.uk")
|
15
|
-
args << (options[:server] || "87.237.63.??")
|
16
|
-
|
17
|
-
Rails::Generator::Scripts::Generate.new.run(args)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
class ApacheLoader
|
21
|
-
def self.load!(options)
|
22
|
-
require "/home/john/devel/reflex/capistrano-setup/cap-test2/config/environment"
|
23
|
-
require "rails_generator"
|
24
|
-
require "rails_generator/scripts/generate"
|
25
|
-
|
26
|
-
Rails::Generator::Base.sources << Rails::Generator::PathSource.new(
|
27
|
-
:brightboxapache, "/etc/apache2/sites-available")
|
28
|
-
|
29
|
-
args = ["brightboxapache"]
|
30
|
-
args << (options[:application] || "application").downcase
|
31
|
-
args << (options[:web_root] || "/home/rails/#{options[:application]}/current/public")
|
32
|
-
args << (options[:domain] || "application.boxname.username.brightbox.co.uk")
|
33
|
-
args << (options[:port] || 9200)
|
34
|
-
args << (options[:mongrels] || 2)
|
35
|
-
|
36
|
-
Rails::Generator::Scripts::Generate.new.run(args)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|