capone 0.0.5 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +52 -0
- data/recipes/daemon_strategies/mongrel_cluster.rb +6 -0
- data/recipes/daemon_strategies/passenger.rb +17 -0
- data/recipes/daemon_strategy.rb +7 -0
- data/recipes/db.rb +98 -0
- data/recipes/defaults.rb +30 -0
- data/recipes/delayed_job.rb +7 -0
- data/recipes/gems.rb +23 -0
- data/recipes/nginx.rb +10 -4
- data/recipes/whenever.rb +16 -12
- metadata +22 -18
- data/README.rdoc +0 -14
- data/Rakefile +0 -55
- data/recipes/backup.rb +0 -17
- data/recipes/deploy.rb +0 -27
- data/recipes/git.rb +0 -14
- data/recipes/install.rb +0 -105
- data/recipes/update.rb +0 -26
- data/tasks/capone_tasks.rake +0 -17
- data/templates/Capfile +0 -3
- data/templates/config/deploy.rb +0 -29
- data/templates/config/mongrel_cluster.yml.erb +0 -18
- data/templates/config/monitrc +0 -57
- data/templates/system/nginx.conf +0 -58
data/README.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Capone
|
2
|
+
|
3
|
+
Capone is the set of Capistrano recipes that help me to deploy my
|
4
|
+
applications.
|
5
|
+
|
6
|
+
Capone by default uses Mongrel cluster (or Passenger) as an application
|
7
|
+
server, nginx as a web server, MySQL as a database server and git as a SCM.
|
8
|
+
|
9
|
+
The latest version of Capone was inspired by Rubaidh's
|
10
|
+
[Rubaidhstrano](http://github.com/rubaidh/rubaidhstrano) and some code has
|
11
|
+
been borrowed from its sources.
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Capone could be installed either as a gem or as Rails plugin.
|
16
|
+
|
17
|
+
### Gem (preferred)
|
18
|
+
|
19
|
+
Add to the end of your `config/environments/development.rb` file:
|
20
|
+
|
21
|
+
config.gem 'capone', :lib => false, :version => '>= 0.1.0'
|
22
|
+
|
23
|
+
### Rails plugin
|
24
|
+
|
25
|
+
./script/plugin install git://github.com/denis/capone.git
|
26
|
+
|
27
|
+
## Example usage
|
28
|
+
|
29
|
+
To start using Capone you just need to add `require "capone"` to your
|
30
|
+
`config/deploy.rb` file (only if Capone is installed as a gem) and set some
|
31
|
+
variables:
|
32
|
+
|
33
|
+
require "capone"
|
34
|
+
|
35
|
+
set :application, "set your application name here"
|
36
|
+
|
37
|
+
set :repository, "set your repository location here"
|
38
|
+
set :host, "set your host here"
|
39
|
+
|
40
|
+
## Features
|
41
|
+
|
42
|
+
In process...
|
43
|
+
|
44
|
+
## Thanks
|
45
|
+
|
46
|
+
- Jamis Buck for [Capistrano](http://github.com/jamis/capistrano),
|
47
|
+
- Rubaidh Ltd for their awesome
|
48
|
+
[Rubaidhstrano](http://github.com/rubaidh/rubaidhstrano).
|
49
|
+
|
50
|
+
## Copyright
|
51
|
+
|
52
|
+
Copyright (c) 2009 Denis Barushev. See LICENSE for details.
|
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace :deploy do
|
2
|
+
desc "Start application."
|
3
|
+
task :start, :roles => :app do
|
4
|
+
run "touch #{current_release}/tmp/restart.txt"
|
5
|
+
end
|
6
|
+
|
7
|
+
desc "Stop application."
|
8
|
+
task :stop, :roles => :app do
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Restart application."
|
12
|
+
task :restart, :roles => :app do
|
13
|
+
run "touch #{current_release}/tmp/restart.txt"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
depend :remote, :gem, "passenger", ">=2.2.2"
|
data/recipes/db.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
namespace :capone do
|
2
|
+
namespace :db do
|
3
|
+
desc <<-DESC
|
4
|
+
Create MySQL user and database using data from config/database.yml.
|
5
|
+
DESC
|
6
|
+
task :setup, :roles => :db, :only => { :primary => true } do
|
7
|
+
config = YAML::load(File.open("config/database.yml"))[rails_env]
|
8
|
+
root_password = Capistrano::CLI.password_prompt(prompt="Enter a root password for MySQL: ")
|
9
|
+
|
10
|
+
run "mysql --user='root' --password='#{root_password}' -e \"CREATE DATABASE IF NOT EXISTS #{config["database"]} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON #{config["database"]}.* TO '#{config["username"]}'@'localhost' IDENTIFIED BY '#{config["password"]}' WITH GRANT OPTION;\""
|
11
|
+
end
|
12
|
+
|
13
|
+
desc <<-DESC
|
14
|
+
Load fixtures from db/fixtures to the database.
|
15
|
+
DESC
|
16
|
+
task :load_fixtures, :roles => :db, :only => { :primary => true } do
|
17
|
+
run "rake db:fixtures:load FIXTURES_PATH=db/fixtures RAILS_ENV=#{rails_env} -f #{release_path}/Rakefile"
|
18
|
+
end
|
19
|
+
|
20
|
+
desc <<-DESC
|
21
|
+
Dumps the database for the current environment into db/env-data.sql.bz2.
|
22
|
+
Any existing backup will be overwritten.
|
23
|
+
DESC
|
24
|
+
task :backup, :roles => :db, :only => { :primary => true } do
|
25
|
+
config = YAML::load(File.open("config/database.yml"))[rails_env]
|
26
|
+
case config["adapter"]
|
27
|
+
when "mysql"
|
28
|
+
cmd = ["mysqldump"]
|
29
|
+
cmd << "--host='#{config['host']}'" unless config["host"].nil?
|
30
|
+
cmd << "--user='#{config['username'].nil? ? 'root' : config['username']}'"
|
31
|
+
cmd << "--password='#{config['password']}'" unless config["password"].nil?
|
32
|
+
cmd << config["database"]
|
33
|
+
cmd << "| bzip2 > #{release_path}/db/#{rails_env}-data.sql.bz2"
|
34
|
+
run cmd.join(" ")
|
35
|
+
else
|
36
|
+
puts "Task not supported by '#{config['adapter']}'."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
desc <<-DESC
|
41
|
+
Dumps the database for the current environment and take a local copy.
|
42
|
+
DESC
|
43
|
+
task :download_backup, :roles => :db, :only => { :primary => true } do
|
44
|
+
backup
|
45
|
+
get "#{latest_release}/db/#{rails_env}-data.sql.bz2", "db/#{rails_env}-data.sql.bz2"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc <<-DESC
|
49
|
+
Loads an existing database dump into the current environment's database.
|
50
|
+
WARNING: this completely nukes the existing database! Use SOURCE_ENV to
|
51
|
+
specify which dump should be loaded. Defaults to 'production'."
|
52
|
+
DESC
|
53
|
+
task :load_backup do
|
54
|
+
run_locally "rake db:drop"
|
55
|
+
run_locally "rake db:create"
|
56
|
+
|
57
|
+
config = YAML::load(File.open("config/database.yml"))[rails_env]
|
58
|
+
case config["adapter"]
|
59
|
+
when "mysql"
|
60
|
+
cmd = ["bzcat db/production-data.sql.bz2 | mysql"]
|
61
|
+
cmd << "--host='#{config['host']}'" unless config["host"].nil?
|
62
|
+
cmd << "--user='#{config['username'].nil? ? 'root' : config['username']}'"
|
63
|
+
cmd << "--password='#{config['password']}'" unless config["password"].nil?
|
64
|
+
cmd << config["database"]
|
65
|
+
run_locally cmd.join(" ")
|
66
|
+
else
|
67
|
+
puts "Task not supported by '#{config['adapter']}'."
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
task :replicate do
|
72
|
+
download_backup
|
73
|
+
load_backup
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
on :load do
|
79
|
+
if fetch(:setup_database_after_deploy_setup, true)
|
80
|
+
after "deploy:setup", "capone:db:setup"
|
81
|
+
end
|
82
|
+
if fetch(:load_fixtures_to_database_after_deploy_cold, false)
|
83
|
+
after "deploy:cold", "capone:db:load_fixtures"
|
84
|
+
end
|
85
|
+
|
86
|
+
if fetch(:backup_database_before_migrations, false)
|
87
|
+
before "deploy:migrate", "capone:db:backup"
|
88
|
+
end
|
89
|
+
|
90
|
+
if fetch(:disable_web_during_migrations, false)
|
91
|
+
before "deploy:migrations", "deploy:web:disable"
|
92
|
+
after "deploy:migrations", "deploy:web:enable"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
depend :remote, :command, "mysql"
|
97
|
+
depend :remote, :command, "mysqldump"
|
98
|
+
depend :remote, :command, "bzip2"
|
data/recipes/defaults.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
set :scm, :git
|
2
|
+
set :deploy_via, :remote_cache
|
3
|
+
|
4
|
+
set :rails_env, "production"
|
5
|
+
|
6
|
+
set(:deploy_to) { "/var/www/apps/#{application}" }
|
7
|
+
|
8
|
+
role(:app) { host }
|
9
|
+
role(:web) { host }
|
10
|
+
role(:db, :primary => true) { host }
|
11
|
+
|
12
|
+
set :use_sudo, false
|
13
|
+
|
14
|
+
# Needed for proper password prompts
|
15
|
+
default_run_options[:pty] = true
|
16
|
+
|
17
|
+
# You can redefine these variables in your config/deploy.rb
|
18
|
+
|
19
|
+
# set :daemon_strategy, :mongrel_cluster
|
20
|
+
# set :web_server, :nginx
|
21
|
+
|
22
|
+
# set :install_gems, true
|
23
|
+
|
24
|
+
# set :backup_database_before_migrations, false
|
25
|
+
# set :disable_web_during_migrations, false
|
26
|
+
# set :setup_database_after_deploy_setup, true
|
27
|
+
# set :load_fixtures_to_database_after_deploy_cold, false
|
28
|
+
|
29
|
+
# set :whenever, false
|
30
|
+
# set :delayed_job, false
|
data/recipes/gems.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
namespace :capone do
|
2
|
+
namespace :gems do
|
3
|
+
desc <<-DESC
|
4
|
+
Install gems needed by application.
|
5
|
+
DESC
|
6
|
+
task :install, :roles => :app do
|
7
|
+
run "rake gems:install -f #{release_path}/Rakefile RAILS_ENV=#{rails_env}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc <<-DESC
|
11
|
+
Update installed gems.
|
12
|
+
DESC
|
13
|
+
task :update, :roles => :app do
|
14
|
+
sudo "gem update --no-rdoc --no-ri"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
on :load do
|
20
|
+
if fetch(:install_gems, true)
|
21
|
+
after "deploy:update_code", "capone:gems:install"
|
22
|
+
end
|
23
|
+
end
|
data/recipes/nginx.rb
CHANGED
@@ -3,7 +3,7 @@ namespace :capone do
|
|
3
3
|
desc <<-DESC
|
4
4
|
Enable virtual host.
|
5
5
|
DESC
|
6
|
-
task :enable_vhost do
|
6
|
+
task :enable_vhost, :roles => :web do
|
7
7
|
sudo "ln -fs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}"
|
8
8
|
sudo "/etc/init.d/nginx reload"
|
9
9
|
end
|
@@ -11,16 +11,22 @@ namespace :capone do
|
|
11
11
|
desc <<-DESC
|
12
12
|
Disable virtual host.
|
13
13
|
DESC
|
14
|
-
task :disable_vhost do
|
14
|
+
task :disable_vhost, :roles => :web do
|
15
15
|
sudo "rm /etc/nginx/sites-enabled/#{application}"
|
16
16
|
sudo "/etc/init.d/nginx reload"
|
17
17
|
end
|
18
18
|
|
19
19
|
desc <<-DESC
|
20
|
-
Reload nginx configuration if config file was changed.
|
20
|
+
Reload nginx configuration if the application nginx virtual host config file was changed.
|
21
21
|
DESC
|
22
|
-
task :reload_if_config_file_changed do
|
22
|
+
task :reload_if_config_file_changed, :roles => :web do
|
23
23
|
run "bash -c \"if ! cmp #{previous_release}/config/nginx.conf #{current_path}/config/nginx.conf; then #{sudo} /etc/init.d/nginx reload; fi\""
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
|
+
|
28
|
+
if fetch(:web_server, :nginx) == :nginx
|
29
|
+
before "deploy:start", "capone:nginx:enable_vhost"
|
30
|
+
after "deploy:stop", "capone:nginx:disable_vhost"
|
31
|
+
after "deploy:restart", "capone:nginx:reload_if_config_file_changed"
|
32
|
+
end
|
data/recipes/whenever.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
namespace :capone do
|
2
|
+
namespace :whenever do
|
3
|
+
desc <<-DESC
|
4
|
+
Update the crontab file with whenever.
|
5
|
+
DESC
|
6
|
+
task :update_crontab, :roles => :db do
|
7
|
+
run "cd #{release_path} && whenever --update-crontab #{application}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
on :load do
|
13
|
+
if fetch(:whenever, false)
|
14
|
+
after "deploy:symlink", "capone:whenever:update_crontab"
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capone
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Barushev
|
@@ -9,10 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09
|
12
|
+
date: 2009-12-09 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: capistrano
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.5.0
|
24
|
+
version:
|
16
25
|
description:
|
17
26
|
email: barushev@gmail.com
|
18
27
|
executables: []
|
@@ -21,25 +30,20 @@ extensions: []
|
|
21
30
|
|
22
31
|
extra_rdoc_files:
|
23
32
|
- LICENSE
|
24
|
-
- README.
|
33
|
+
- README.md
|
25
34
|
files:
|
26
35
|
- LICENSE
|
27
|
-
- README.
|
28
|
-
- Rakefile
|
36
|
+
- README.md
|
29
37
|
- lib/capone.rb
|
30
|
-
- recipes/
|
31
|
-
- recipes/
|
32
|
-
- recipes/
|
33
|
-
- recipes/
|
38
|
+
- recipes/daemon_strategies/mongrel_cluster.rb
|
39
|
+
- recipes/daemon_strategies/passenger.rb
|
40
|
+
- recipes/daemon_strategy.rb
|
41
|
+
- recipes/db.rb
|
42
|
+
- recipes/defaults.rb
|
43
|
+
- recipes/delayed_job.rb
|
44
|
+
- recipes/gems.rb
|
34
45
|
- recipes/nginx.rb
|
35
|
-
- recipes/update.rb
|
36
46
|
- recipes/whenever.rb
|
37
|
-
- tasks/capone_tasks.rake
|
38
|
-
- templates/Capfile
|
39
|
-
- templates/config/deploy.rb
|
40
|
-
- templates/config/mongrel_cluster.yml.erb
|
41
|
-
- templates/config/monitrc
|
42
|
-
- templates/system/nginx.conf
|
43
47
|
has_rdoc: true
|
44
48
|
homepage: http://github.com/denis/capone
|
45
49
|
licenses: []
|
data/README.rdoc
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
= Capone
|
2
|
-
|
3
|
-
Capone is the set of rake tasks and capistrano recipes that help to:
|
4
|
-
* generate configs;
|
5
|
-
* prepare servers for production use;
|
6
|
-
* deploy applications;
|
7
|
-
* maintain servers.
|
8
|
-
|
9
|
-
Capone supports only Ubuntu 8.04 LTS as an OS, Mongrel as an application server,
|
10
|
-
nginx as a web server, MySQL as a database server and Subversion or git as a SCM.
|
11
|
-
|
12
|
-
== Copyright
|
13
|
-
|
14
|
-
Copyright (c) 2009 Denis Barushev. See LICENSE for details.
|
data/Rakefile
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rake'
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "capone"
|
8
|
-
gem.summary = "Capone is the set of rake tasks and capistrano recipes."
|
9
|
-
gem.email = "barushev@gmail.com"
|
10
|
-
gem.homepage = "http://github.com/denis/capone"
|
11
|
-
gem.authors = ["Denis Barushev"]
|
12
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
13
|
-
gem.files = %w(LICENSE README.rdoc Rakefile) + Dir.glob("{lib,recipes,tasks,templates}/**/*")
|
14
|
-
end
|
15
|
-
rescue LoadError
|
16
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
17
|
-
end
|
18
|
-
|
19
|
-
require 'rake/testtask'
|
20
|
-
Rake::TestTask.new(:test) do |test|
|
21
|
-
test.libs << 'lib' << 'test'
|
22
|
-
test.pattern = 'test/**/*_test.rb'
|
23
|
-
test.verbose = true
|
24
|
-
end
|
25
|
-
|
26
|
-
begin
|
27
|
-
require 'rcov/rcovtask'
|
28
|
-
Rcov::RcovTask.new do |test|
|
29
|
-
test.libs << 'test'
|
30
|
-
test.pattern = 'test/**/*_test.rb'
|
31
|
-
test.verbose = true
|
32
|
-
end
|
33
|
-
rescue LoadError
|
34
|
-
task :rcov do
|
35
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
task :test => :check_dependencies
|
40
|
-
|
41
|
-
task :default => :test
|
42
|
-
|
43
|
-
require 'rake/rdoctask'
|
44
|
-
Rake::RDocTask.new do |rdoc|
|
45
|
-
if File.exist?('VERSION')
|
46
|
-
version = File.read('VERSION')
|
47
|
-
else
|
48
|
-
version = ""
|
49
|
-
end
|
50
|
-
|
51
|
-
rdoc.rdoc_dir = 'rdoc'
|
52
|
-
rdoc.title = "capone #{version}"
|
53
|
-
rdoc.rdoc_files.include('README*')
|
54
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
-
end
|
data/recipes/backup.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
namespace :capone do
|
2
|
-
namespace :backup do
|
3
|
-
desc <<-DESC
|
4
|
-
Backup all.
|
5
|
-
DESC
|
6
|
-
task :default do
|
7
|
-
mysql
|
8
|
-
end
|
9
|
-
|
10
|
-
desc <<-DESC
|
11
|
-
Backup MySQL database.
|
12
|
-
DESC
|
13
|
-
task :mysql, :roles => :db, :only => { :primary => true } do
|
14
|
-
run "echo 'Not implemented yet.'"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/recipes/deploy.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
namespace :capone do
|
2
|
-
namespace :deploy do
|
3
|
-
desc <<-DESC
|
4
|
-
Create MySQL user and database using data from config/database.yml.
|
5
|
-
DESC
|
6
|
-
task :setup_db, :roles => :db, :only => { :primary => true } do
|
7
|
-
config = YAML::load(File.open("config/database.yml"))[rails_env]
|
8
|
-
root_password = Capistrano::CLI.password_prompt(prompt="Enter a root password for MySQL: ")
|
9
|
-
|
10
|
-
run "mysql -u root --password=#{root_password} -e \"CREATE DATABASE IF NOT EXISTS #{config["database"]} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON #{config["database"]}.* TO '#{config["username"]}'@'localhost' IDENTIFIED BY '#{config["password"]}' WITH GRANT OPTION;\""
|
11
|
-
end
|
12
|
-
|
13
|
-
desc <<-DESC
|
14
|
-
Install gems needed by application.
|
15
|
-
DESC
|
16
|
-
task :install_gems, :roles => :app do
|
17
|
-
run "rake gems:install -f #{release_path}/Rakefile RAILS_ENV=#{rails_env}"
|
18
|
-
end
|
19
|
-
|
20
|
-
desc <<-DESC
|
21
|
-
Load fixtures from db/fixtures to the database
|
22
|
-
DESC
|
23
|
-
task :load_fixtures, :roles => :db, :only => { :primary => true } do
|
24
|
-
run "rake db:fixtures:load FIXTURES_PATH=db/fixtures RAILS_ENV=#{rails_env} -f #{release_path}/Rakefile"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/recipes/git.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
namespace :capone do
|
2
|
-
namespace :git do
|
3
|
-
desc <<-DESC
|
4
|
-
Creates a remote repository and adds it as origin to the local repository.
|
5
|
-
DESC
|
6
|
-
task :remote do
|
7
|
-
run "mkdir ~/git/#{application}.git && cd ~/git/#{application}.git && git --bare init"
|
8
|
-
|
9
|
-
cmd = "git remote add origin #{repository} && git push origin master"
|
10
|
-
puts cmd
|
11
|
-
`#{cmd}`
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/recipes/install.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
namespace :capone do
|
2
|
-
namespace :install do
|
3
|
-
desc <<-DESC
|
4
|
-
Install all software for all servers.
|
5
|
-
DESC
|
6
|
-
task :default do
|
7
|
-
update::software
|
8
|
-
app
|
9
|
-
web
|
10
|
-
db
|
11
|
-
end
|
12
|
-
|
13
|
-
desc <<-DESC
|
14
|
-
Install all software for app server.
|
15
|
-
DESC
|
16
|
-
task :app, :roles => :app do
|
17
|
-
git
|
18
|
-
ruby
|
19
|
-
rubygems
|
20
|
-
gems
|
21
|
-
mongrel
|
22
|
-
end
|
23
|
-
|
24
|
-
desc <<-DESC
|
25
|
-
Install all software for web server.
|
26
|
-
DESC
|
27
|
-
task :web, :roles => :web do
|
28
|
-
nginx
|
29
|
-
end
|
30
|
-
|
31
|
-
desc <<-DESC
|
32
|
-
Install all software for db server.
|
33
|
-
DESC
|
34
|
-
task :db, :roles => :db do
|
35
|
-
mysql
|
36
|
-
end
|
37
|
-
|
38
|
-
desc <<-DESC
|
39
|
-
Install Subversion.
|
40
|
-
DESC
|
41
|
-
task :subversion, :roles => :app do
|
42
|
-
sudo "aptitude install -y subversion"
|
43
|
-
end
|
44
|
-
|
45
|
-
desc <<-DESC
|
46
|
-
Install git.
|
47
|
-
DESC
|
48
|
-
task :git, :roles => :app do
|
49
|
-
sudo "aptitude install -y git-core"
|
50
|
-
end
|
51
|
-
|
52
|
-
desc <<-DESC
|
53
|
-
Install Ruby.
|
54
|
-
DESC
|
55
|
-
task :ruby, :roles => :app do
|
56
|
-
sudo "aptitude install -y ruby ruby1.8-dev irb irb1.8 rdoc rdoc1.8 libopenssl-ruby1.8 libreadline-ruby1.8"
|
57
|
-
end
|
58
|
-
|
59
|
-
desc <<-DESC
|
60
|
-
Install RubyGems.
|
61
|
-
DESC
|
62
|
-
task :rubygems, :roles => :app do
|
63
|
-
sudo "aptitude install -y libgems-ruby1.8 rubygems"
|
64
|
-
sudo "gem update --system --no-rdoc --no-ri"
|
65
|
-
sudo "ln -fs /usr/bin/gem1.8 /usr/bin/gem"
|
66
|
-
end
|
67
|
-
|
68
|
-
desc <<-DESC
|
69
|
-
Install common gems.
|
70
|
-
DESC
|
71
|
-
task :gems, :roles => :app do
|
72
|
-
sudo "aptitude install -y build-essential libmysqlclient15-dev"
|
73
|
-
sudo "gem install rake mysql --no-rdoc --no-ri"
|
74
|
-
end
|
75
|
-
|
76
|
-
desc <<-DESC
|
77
|
-
Install Mongrel.
|
78
|
-
DESC
|
79
|
-
task :mongrel, :roles => :app do
|
80
|
-
sudo "gem install mongrel mongrel_cluster --no-rdoc --no-ri"
|
81
|
-
|
82
|
-
sudo "ln -sf /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/mongrel_cluster"
|
83
|
-
sudo "chmod +x /etc/init.d/mongrel_cluster"
|
84
|
-
sudo "/usr/sbin/update-rc.d mongrel_cluster defaults"
|
85
|
-
sudo "mkdir /etc/mongrel_cluster"
|
86
|
-
|
87
|
-
sudo "mkdir -p -m 750 /var/www/apps"
|
88
|
-
sudo "chown deploy:deploy /var/www/apps"
|
89
|
-
end
|
90
|
-
|
91
|
-
desc <<-DESC
|
92
|
-
Install nginx.
|
93
|
-
DESC
|
94
|
-
task :nginx, :roles => :web do
|
95
|
-
sudo "aptitude install -y nginx"
|
96
|
-
end
|
97
|
-
|
98
|
-
desc <<-DESC
|
99
|
-
Install MySQL.
|
100
|
-
DESC
|
101
|
-
task :mysql, :roles => :db do
|
102
|
-
sudo "aptitude install -y mysql-server"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
data/recipes/update.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
namespace :capone do
|
2
|
-
namespace :update do
|
3
|
-
desc <<-DESC
|
4
|
-
Update all.
|
5
|
-
DESC
|
6
|
-
task :default do
|
7
|
-
software
|
8
|
-
gems
|
9
|
-
end
|
10
|
-
|
11
|
-
desc <<-DESC
|
12
|
-
Update system software.
|
13
|
-
DESC
|
14
|
-
task :software do
|
15
|
-
sudo "aptitude update"
|
16
|
-
sudo "aptitude safe-upgrade -y"
|
17
|
-
end
|
18
|
-
|
19
|
-
desc <<-DESC
|
20
|
-
Update installed gems.
|
21
|
-
DESC
|
22
|
-
task :gems do
|
23
|
-
sudo "gem update --no-rdoc --no-ri"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/tasks/capone_tasks.rake
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
desc "Init Capone"
|
2
|
-
task :capone do
|
3
|
-
puts "Generating configs..."
|
4
|
-
|
5
|
-
files = ["Capfile", "config/deploy.rb"]
|
6
|
-
|
7
|
-
for file in files do
|
8
|
-
if File.exists? "#{RAILS_ROOT}/#{file}"
|
9
|
-
puts "#{RAILS_ROOT}/#{file} already exists"
|
10
|
-
else
|
11
|
-
File.copy "#{RAILS_ROOT}/vendor/plugins/capone/templates/#{file}", "#{RAILS_ROOT}/#{file}"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
namespace :capone do
|
17
|
-
end
|
data/templates/Capfile
DELETED
data/templates/config/deploy.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require "mongrel_cluster/recipes"
|
2
|
-
require "capone"
|
3
|
-
|
4
|
-
set :application, "set your application name here"
|
5
|
-
set :repository, "someuser@somehost:git/#{application}.git"
|
6
|
-
set :scm, :git
|
7
|
-
|
8
|
-
set :user, "deploy"
|
9
|
-
set :use_sudo, false
|
10
|
-
|
11
|
-
set :deploy_to, "/var/www/apps/#{application}"
|
12
|
-
|
13
|
-
set :mongrel_conf, "#{deploy_to}/current/config/mongrel_cluster.yml"
|
14
|
-
|
15
|
-
set :rails_env, "production"
|
16
|
-
|
17
|
-
role :app, "your app-server here"
|
18
|
-
role :web, "your web-server here"
|
19
|
-
role :db, "your db-server here", :primary => true
|
20
|
-
|
21
|
-
after "deploy:setup", "capone:deploy:setup_db"
|
22
|
-
after "deploy:update_code", "capone:deploy:install_gems"
|
23
|
-
# after "deploy:cold", "capone:deploy:load_fixtures"
|
24
|
-
|
25
|
-
before "deploy:start", "capone:nginx:enable_vhost"
|
26
|
-
after "deploy:stop", "capone:nginx:disable_vhost"
|
27
|
-
after "deploy:restart", "capone:nginx:reload_if_config_file_changed"
|
28
|
-
|
29
|
-
# after "deploy:symlink", "capone:whenever:update_crontab"
|
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
cwd: <%= @deploy_to %>/current
|
3
|
-
<% if @mongrel_log_file %>
|
4
|
-
log_file: <%= @mongrel_log_file %>
|
5
|
-
<% end %>
|
6
|
-
port: <%= @mongrel_port %>
|
7
|
-
environment: <%= @mongrel_environment %>
|
8
|
-
address: <%= @mongrel_address %>
|
9
|
-
<% if @mongrel_pid_file %>
|
10
|
-
pid_file: <%= @mongrel_pid_file %>
|
11
|
-
<% end %>
|
12
|
-
servers: <%= @mongrel_servers %>
|
13
|
-
<% if @mongrel_user %>
|
14
|
-
user: <%= @mongrel_user %>
|
15
|
-
<% end %>
|
16
|
-
<% if @mongrel_group %>
|
17
|
-
group: <%= @mongrel_group %>
|
18
|
-
<% end %>
|
data/templates/config/monitrc
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
set daemon 60
|
2
|
-
set logfile syslog facility log_daemon
|
3
|
-
set mailserver localhost
|
4
|
-
set mail-format { from: monit@localhost }
|
5
|
-
set alert root@localhost
|
6
|
-
|
7
|
-
check process sshd with pidfile /var/run/sshd.pid
|
8
|
-
start program "/etc/init.d/ssh start"
|
9
|
-
stop program "/etc/init.d/ssh stop"
|
10
|
-
if failed port 22 protocol ssh then restart
|
11
|
-
if 5 restarts within 5 cycles then timeout
|
12
|
-
|
13
|
-
check process mysql with pidfile /var/run/mysqld/mysqld.pid
|
14
|
-
group database
|
15
|
-
start program = "/etc/init.d/mysql start"
|
16
|
-
stop program = "/etc/init.d/mysql stop"
|
17
|
-
if failed host 127.0.0.1 port 3306 then restart
|
18
|
-
if 5 restarts within 5 cycles then timeout
|
19
|
-
|
20
|
-
check process httpd with pidfile /usr/local/apache2/logs/httpd.pid
|
21
|
-
group www-data
|
22
|
-
start program "/usr/local/apache2/bin/apachectl start"
|
23
|
-
stop program "/usr/local/apache2/bin/apachectl stop"
|
24
|
-
if failed host localhost port 80 protocol http
|
25
|
-
and request "/" then alert
|
26
|
-
if cpu is greater than 60% for 2 cycles then alert
|
27
|
-
if cpu > 80% for 5 cycles then restart
|
28
|
-
if children > 250 then restart
|
29
|
-
if loadavg(5min) greater than 10 for 8 cycles then alert
|
30
|
-
if 3 restarts within 5 cycles then timeout
|
31
|
-
|
32
|
-
check process mongrel_8000 with pidfile /var/rails/MYAPP/log/mongrel.8000.pid
|
33
|
-
group root
|
34
|
-
if failed host 127.0.0.1 port 8000 protocol http
|
35
|
-
and request "/" then alert
|
36
|
-
if cpu is greater than 60% for 2 cycles then alert
|
37
|
-
if cpu > 80% for 5 cycles then restart
|
38
|
-
if loadavg(5min) greater than 10 for 8 cycles then restart
|
39
|
-
if 3 restarts within 5 cycles then timeout
|
40
|
-
|
41
|
-
check process mongrel_8001 with pidfile /var/rails/MYAPP/log/mongrel.8001.pid
|
42
|
-
group root
|
43
|
-
if failed host 127.0.0.1 port 8001 protocol http
|
44
|
-
and request "/" then alert
|
45
|
-
if cpu is greater than 60% for 2 cycles then alert
|
46
|
-
if cpu > 80% for 5 cycles then alert
|
47
|
-
if loadavg(5min) greater than 10 for 8 cycles then alert
|
48
|
-
if 3 restarts within 5 cycles then timeout
|
49
|
-
|
50
|
-
check process postfix with pidfile /var/spool/postfix/pid/master.pid
|
51
|
-
group mail
|
52
|
-
start program = "/etc/init.d/postfix start"
|
53
|
-
stop program = "/etc/init.d/postfix stop"
|
54
|
-
if failed port 25 protocol smtp then restart
|
55
|
-
if 5 restarts within 5 cycles then timeout
|
56
|
-
|
57
|
-
|
data/templates/system/nginx.conf
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# User and group to run as
|
2
|
-
user www-data;
|
3
|
-
|
4
|
-
# Number of nginx worker processes
|
5
|
-
worker_processes 4;
|
6
|
-
|
7
|
-
# Path to main error log file
|
8
|
-
error_log /var/log/nginx/error.log;
|
9
|
-
|
10
|
-
# Path to the pid-file
|
11
|
-
pid /var/run/nginx.pid;
|
12
|
-
|
13
|
-
events {
|
14
|
-
# max_clients = worker_processes * worker_connections
|
15
|
-
worker_connections 1024;
|
16
|
-
}
|
17
|
-
|
18
|
-
http {
|
19
|
-
# Include mime types config file
|
20
|
-
include /etc/nginx/mime.types;
|
21
|
-
|
22
|
-
# Assigns the default MIME-type to be used for files where
|
23
|
-
# the standard MIME map doesn't specify anything
|
24
|
-
default_type application/octet-stream;
|
25
|
-
|
26
|
-
# Define log format for access log
|
27
|
-
log_format main '$remote_addr - $remote_user [$time_local] '
|
28
|
-
'"$request" $status $body_bytes_sent "$http_referer" '
|
29
|
-
'"$http_user_agent" "$http_x_forwarded_for"';
|
30
|
-
|
31
|
-
# Assigns path, format and size of access log file
|
32
|
-
access_log /var/log/nginx/access.log main;
|
33
|
-
|
34
|
-
# Activate the usage of sendfile()
|
35
|
-
sendfile on;
|
36
|
-
|
37
|
-
# tcp_nodelay on;
|
38
|
-
# tcp_nopush on;
|
39
|
-
|
40
|
-
# Set the timeout for keep-alive connections with the client
|
41
|
-
keepalive_timeout 75;
|
42
|
-
|
43
|
-
# Enable gzip compression
|
44
|
-
gzip on;
|
45
|
-
|
46
|
-
# The compression level, between 1 and 9, where 1 is the least
|
47
|
-
# compression (fastest) and 9 is the most (slowest).
|
48
|
-
gzip_comp_level 1;
|
49
|
-
|
50
|
-
# Enable compression for all proxy requests
|
51
|
-
gzip_proxied any;
|
52
|
-
|
53
|
-
# Enable compression for additional MIME-types
|
54
|
-
gzip_types text/plain text/html text/css text/javascript application/x-javascript text/xml application/xml application/xml+rss;
|
55
|
-
|
56
|
-
# Include all virtaul hosts configurations
|
57
|
-
include /etc/nginx/sites-enabled/*;
|
58
|
-
}
|