challenger 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/challenger.gemspec +2 -0
- data/lib/challenger/recipes/base.rb +45 -0
- data/lib/challenger/recipes/nginx.rb +28 -0
- data/lib/challenger/recipes/nodejs.rb +8 -0
- data/lib/challenger/recipes/passenger.rb +9 -0
- data/lib/challenger/recipes/postgresql.rb +33 -0
- data/lib/challenger/recipes/rbenv.rb +38 -0
- data/lib/challenger/templates/nginx +202 -0
- data/lib/challenger/templates/nginx.conf.erb +28 -0
- data/lib/challenger/templates/nginx_passenger.erb +6 -0
- data/lib/challenger/templates/postgresql.yml.erb +8 -0
- data/lib/challenger/version.rb +1 -1
- data/lib/challenger.rb +6 -2
- metadata +24 -3
data/challenger.gemspec
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
def template(from, to)
|
2
|
+
erb = File.read(File.expand_path("../../templates/#{from}", __FILE__))
|
3
|
+
put ERB.new(erb).result(binding), to
|
4
|
+
end
|
5
|
+
|
6
|
+
def set_default(name, *args, &block)
|
7
|
+
set(name, *args, &block) unless exists?(name)
|
8
|
+
end
|
9
|
+
|
10
|
+
set_default :user, "deployer"
|
11
|
+
set_default(:deploy_to) { "/var/apps/#{application}" }
|
12
|
+
set_default :deploy_via, :remote_cache
|
13
|
+
set_default :use_sudo, false
|
14
|
+
|
15
|
+
set_default :scm, "git"
|
16
|
+
set_default :branch, "master"
|
17
|
+
|
18
|
+
default_run_options[:pty] = true
|
19
|
+
default_run_options[:shell] = "/bin/bash"
|
20
|
+
ssh_options[:forward_agent] = true
|
21
|
+
|
22
|
+
namespace :deploy do
|
23
|
+
desc "Setup deployer user with root account\nSet ENV variable PUBLIC_KEY=path/to/file to use public key other than ~/.ssh/id_rsa.pub"
|
24
|
+
task :root do
|
25
|
+
set :user, "root"
|
26
|
+
run "useradd deployer --home /var/apps --create-home --shell /bin/bash"
|
27
|
+
run 'if [[ $(cat /etc/sudoers) != *deployer* ]]; then sed -i "/root.*ALL=(ALL) ALL/ a\\\\deployer ALL\\=\\(ALL\\) NOPASSWD\\: ALL" /etc/sudoers; fi'
|
28
|
+
run "mkdir -p /var/apps/.ssh"
|
29
|
+
public_key = File.read(ENV["PUBLIC_KEY"] || File.expand_path("~/.ssh/id_rsa.pub"))
|
30
|
+
put public_key, "/tmp/public_key"
|
31
|
+
run "cat /tmp/public_key >> /var/apps/.ssh/authorized_keys"
|
32
|
+
run "rm /tmp/public_key"
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Install everything onto the server"
|
36
|
+
task :install do
|
37
|
+
run "#{sudo} apt-get -y update"
|
38
|
+
run "#{sudo} apt-get -y install python-software-properties"
|
39
|
+
end
|
40
|
+
after "deploy:install", "postgresql:install"
|
41
|
+
after "deploy:install", "nodejs:install"
|
42
|
+
after "deploy:install", "rbenv:install"
|
43
|
+
after "deploy:install", "passenger:install"
|
44
|
+
after "deploy:install", "nginx:install"
|
45
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
set_default(:nginx_server_name) { Capistrano::CLI.ui.ask("Server Hostname (separate multiple hosts with space)") }
|
2
|
+
namespace :nginx do
|
3
|
+
desc "Configures nginx (after Passenger has installed Nginx)"
|
4
|
+
task :install do
|
5
|
+
template "nginx", "/tmp/nginx"
|
6
|
+
run "#{sudo} mv /tmp/nginx /etc/init.d/nginx"
|
7
|
+
run "#{sudo} chmod +x /etc/init.d/nginx"
|
8
|
+
run "#{sudo} update-rc.d -f nginx defaults"
|
9
|
+
template "nginx.conf.erb", "/tmp/nginx.conf"
|
10
|
+
run "#{sudo} mv /tmp/nginx.conf /etc/nginx/conf/nginx.conf"
|
11
|
+
run "#{sudo} mkdir /etc/nginx/conf/sites-enabled/"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Setup nginx configuration for this application"
|
15
|
+
task :setup, roles: :web do
|
16
|
+
template "nginx_passenger.erb", "/tmp/nginx.conf"
|
17
|
+
run "#{sudo} mv /tmp/nginx.conf /etc/nginx/conf/sites-enabled/#{application}"
|
18
|
+
restart
|
19
|
+
end
|
20
|
+
after "deploy:setup", "nginx:setup"
|
21
|
+
|
22
|
+
%w[start stop restart].each do |command|
|
23
|
+
desc "#{command} nginx"
|
24
|
+
task command, roles: :web do
|
25
|
+
run "#{sudo} service nginx #{command}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
set_default :passenger_version, "3.0.11"
|
2
|
+
namespace :passenger do
|
3
|
+
desc "Install Passenger with Nginx"
|
4
|
+
task :install, roles: :web do
|
5
|
+
run "gem install passenger --version #{passenger_version}"
|
6
|
+
run "#{sudo} apt-get install -y libcurl4-openssl-dev"
|
7
|
+
run "sudo -u root `rbenv which passenger-install-nginx-module` --auto --auto-download --prefix=/etc/nginx"
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
set_default(:postgresql_host, "localhost")
|
2
|
+
set_default(:postgresql_user) { application }
|
3
|
+
set_default(:postgresql_password) { Capistrano::CLI.password_prompt "PostgreSQL Password: " }
|
4
|
+
set_default(:postgresql_database) { "#{application}_production" }
|
5
|
+
|
6
|
+
namespace :postgresql do
|
7
|
+
desc "Install the latest stable release of PostgreSQL."
|
8
|
+
task :install, roles: :db, only: {primary: true} do
|
9
|
+
run "#{sudo} add-apt-repository ppa:pitti/postgresql"
|
10
|
+
run "#{sudo} apt-get -y update"
|
11
|
+
run "#{sudo} apt-get -y install postgresql libpq-dev"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Create a database for this application."
|
15
|
+
task :create_database, roles: :db, only: {primary: true} do
|
16
|
+
run %Q{#{sudo} -u postgres psql -c "create user #{postgresql_user} with password '#{postgresql_password}';"}
|
17
|
+
run %Q{#{sudo} -u postgres psql -c "create database #{postgresql_database} owner #{postgresql_user};"}
|
18
|
+
end
|
19
|
+
after "deploy:setup", "postgresql:create_database"
|
20
|
+
|
21
|
+
desc "Generate the database.yml configuration file."
|
22
|
+
task :setup, roles: :app do
|
23
|
+
run "mkdir -p #{shared_path}/config"
|
24
|
+
template "postgresql.yml.erb", "#{shared_path}/config/database.yml"
|
25
|
+
end
|
26
|
+
after "deploy:setup", "postgresql:setup"
|
27
|
+
|
28
|
+
desc "Symlink the database.yml file into latest release"
|
29
|
+
task :symlink, roles: :app do
|
30
|
+
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
31
|
+
end
|
32
|
+
after "deploy:finalize_update", "postgresql:symlink"
|
33
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
set_default :ruby_version, "1.9.3-p125"
|
2
|
+
set_default :rbenv_bootstrap, "bootstrap-ubuntu-10-04"
|
3
|
+
|
4
|
+
namespace :rbenv do
|
5
|
+
desc "Install rbenv, Ruby, and the Bundler gem"
|
6
|
+
task :install, roles: :app do
|
7
|
+
run "#{sudo} apt-get -y install curl git-core"
|
8
|
+
run "curl -L https://raw.github.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash"
|
9
|
+
bashrc = <<-BASHRC
|
10
|
+
if [ -d $HOME/.rbenv ]; then
|
11
|
+
export PATH="$HOME/.rbenv/bin:$PATH"
|
12
|
+
eval "$(rbenv init -)"
|
13
|
+
fi
|
14
|
+
BASHRC
|
15
|
+
put bashrc, "/tmp/rbenvrc"
|
16
|
+
run "cat /tmp/rbenvrc ~/.bashrc > ~/.bashrc.tmp"
|
17
|
+
run "mv ~/.bashrc.tmp ~/.bashrc"
|
18
|
+
run %q{export PATH="$HOME/.rbenv/bin:$PATH"}
|
19
|
+
run %q{eval "$(rbenv init -)"}
|
20
|
+
run "rbenv #{rbenv_bootstrap}"
|
21
|
+
run "rbenv install #{ruby_version}"
|
22
|
+
run "rbenv global #{ruby_version}"
|
23
|
+
|
24
|
+
gemrc = <<-GEMRC
|
25
|
+
---
|
26
|
+
verbose: true
|
27
|
+
gem: --no-ri --no-rdoc
|
28
|
+
update_sources: false
|
29
|
+
sources:
|
30
|
+
- http://rubygems.org
|
31
|
+
GEMRC
|
32
|
+
put gemrc, "/tmp/gemrc"
|
33
|
+
run "mv /tmp/gemrc ~/.gemrc"
|
34
|
+
|
35
|
+
run "gem install bundler"
|
36
|
+
run "rbenv rehash"
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
|
3
|
+
#------------------------------------------------------------------------------
|
4
|
+
# Functions
|
5
|
+
#------------------------------------------------------------------------------
|
6
|
+
. /lib/lsb/init-functions
|
7
|
+
|
8
|
+
#------------------------------------------------------------------------------
|
9
|
+
# Consts
|
10
|
+
#------------------------------------------------------------------------------
|
11
|
+
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
12
|
+
DAEMON=/etc/nginx/sbin/nginx
|
13
|
+
|
14
|
+
PS="nginx"
|
15
|
+
PIDNAME="nginx" #Lets you do $PS-Master or $PS-Slave
|
16
|
+
PIDFILE=$PIDNAME.pid #pid file
|
17
|
+
PIDSPATH=/etc/nginx/logs
|
18
|
+
DESCRIPTION="Nginx Server..."
|
19
|
+
|
20
|
+
RUNAS=root #user to run as
|
21
|
+
|
22
|
+
SCRIPT_OK=0 #ala error codes
|
23
|
+
SCRIPT_ERROR=1 #ala error codes
|
24
|
+
TRUE=1 #boolean
|
25
|
+
FALSE=0 #boolean
|
26
|
+
|
27
|
+
lockfile=/var/lock/subsys/nginx
|
28
|
+
NGINX_CONF_FILE="/etc/nginx/conf/nginx.conf"
|
29
|
+
|
30
|
+
#------------------------------------------------------------------------------
|
31
|
+
# Simple Tests
|
32
|
+
#------------------------------------------------------------------------------
|
33
|
+
|
34
|
+
#test if nginx is a file and executable
|
35
|
+
test -x $DAEMON || exit 0
|
36
|
+
|
37
|
+
# Include nginx defaults if available
|
38
|
+
if [ -f /etc/default/nginx ] ; then
|
39
|
+
. /etc/default/nginx
|
40
|
+
fi
|
41
|
+
|
42
|
+
#set exit condition
|
43
|
+
#set -e
|
44
|
+
|
45
|
+
#------------------------------------------------------------------------------
|
46
|
+
# Functions
|
47
|
+
#------------------------------------------------------------------------------
|
48
|
+
|
49
|
+
setFilePerms(){
|
50
|
+
|
51
|
+
if [ -f $PIDSPATH/$PIDFILE ]; then
|
52
|
+
chmod -f 400 $PIDSPATH/$PIDFILE
|
53
|
+
fi
|
54
|
+
}
|
55
|
+
|
56
|
+
configtest() {
|
57
|
+
$DAEMON -t -c $NGINX_CONF_FILE
|
58
|
+
}
|
59
|
+
|
60
|
+
getPSCount() {
|
61
|
+
return `pgrep -f $PS | wc -l`
|
62
|
+
}
|
63
|
+
|
64
|
+
isRunning(){
|
65
|
+
pidof_daemon
|
66
|
+
PID=$?
|
67
|
+
|
68
|
+
if [ $PID -gt 0 ]; then
|
69
|
+
return 1
|
70
|
+
else
|
71
|
+
return 0
|
72
|
+
fi
|
73
|
+
}
|
74
|
+
|
75
|
+
status(){
|
76
|
+
isRunning
|
77
|
+
isAlive=$?
|
78
|
+
|
79
|
+
if [ "${isAlive}" -eq $TRUE ]; then
|
80
|
+
echo "$PIDNAME found running with processes: `pidof $PS`"
|
81
|
+
else
|
82
|
+
echo "$PIDNAME is NOT running."
|
83
|
+
fi
|
84
|
+
|
85
|
+
|
86
|
+
}
|
87
|
+
|
88
|
+
removePIDFile(){
|
89
|
+
if [ -f $PIDSPATH/PIDFILE ]; then
|
90
|
+
rm -f $PIDSPATH/$PIDFILE
|
91
|
+
fi
|
92
|
+
}
|
93
|
+
|
94
|
+
start() {
|
95
|
+
log_daemon_msg "Starting $DESCRIPTION"
|
96
|
+
|
97
|
+
isRunning
|
98
|
+
isAlive=$?
|
99
|
+
|
100
|
+
if [ "${isAlive}" -eq $TRUE ]; then
|
101
|
+
log_end_msg $SCRIPT_ERROR
|
102
|
+
else
|
103
|
+
start-stop-daemon --start --quiet --chuid $RUNAS --pidfile $PIDSPATH/$PIDFILE --exec $DAEMON
|
104
|
+
setFilePerms
|
105
|
+
log_end_msg $SCRIPT_OK
|
106
|
+
fi
|
107
|
+
}
|
108
|
+
|
109
|
+
stop() {
|
110
|
+
log_daemon_msg "Stopping $DESCRIPTION"
|
111
|
+
|
112
|
+
isRunning
|
113
|
+
isAlive=$?
|
114
|
+
if [ "${isAlive}" -eq $TRUE ]; then
|
115
|
+
start-stop-daemon --stop --quiet --pidfile $PIDSPATH/$PIDFILE
|
116
|
+
|
117
|
+
removePIDFile
|
118
|
+
|
119
|
+
log_end_msg $SCRIPT_OK
|
120
|
+
else
|
121
|
+
log_end_msg $SCRIPT_ERROR
|
122
|
+
fi
|
123
|
+
}
|
124
|
+
|
125
|
+
reload() {
|
126
|
+
configtest || return $?
|
127
|
+
|
128
|
+
log_daemon_msg "Reloading (via HUP) $DESCRIPTION"
|
129
|
+
|
130
|
+
isRunning
|
131
|
+
if [ $? -eq $TRUE ]; then
|
132
|
+
`killall -HUP $PS` #to be safe
|
133
|
+
|
134
|
+
log_end_msg $SCRIPT_OK
|
135
|
+
else
|
136
|
+
log_end_msg $SCRIPT_ERROR
|
137
|
+
fi
|
138
|
+
}
|
139
|
+
|
140
|
+
terminate() {
|
141
|
+
log_daemon_msg "Force terminating (via KILL) $DESCRIPTION"
|
142
|
+
|
143
|
+
PIDS=`pidof $PS` || true
|
144
|
+
|
145
|
+
[ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
|
146
|
+
|
147
|
+
for i in $PIDS; do
|
148
|
+
if [ "$i" = "$PIDS2" ]; then
|
149
|
+
kill $i
|
150
|
+
removePIDFile
|
151
|
+
fi
|
152
|
+
done
|
153
|
+
|
154
|
+
log_end_msg $SCRIPT_OK
|
155
|
+
|
156
|
+
}
|
157
|
+
|
158
|
+
pidof_daemon() {
|
159
|
+
PIDS=`pidof $PS` || true
|
160
|
+
|
161
|
+
[ -e $PIDSPATH/$PIDFILE ] && PIDS2=`cat $PIDSPATH/$PIDFILE`
|
162
|
+
|
163
|
+
for i in $PIDS; do
|
164
|
+
if [ "$i" = "$PIDS2" ]; then
|
165
|
+
return 1
|
166
|
+
fi
|
167
|
+
done
|
168
|
+
return 0
|
169
|
+
}
|
170
|
+
|
171
|
+
case "$1" in
|
172
|
+
start)
|
173
|
+
start
|
174
|
+
;;
|
175
|
+
stop)
|
176
|
+
stop
|
177
|
+
;;
|
178
|
+
restart|force-reload)
|
179
|
+
stop
|
180
|
+
start
|
181
|
+
;;
|
182
|
+
reload)
|
183
|
+
$1
|
184
|
+
;;
|
185
|
+
status)
|
186
|
+
status
|
187
|
+
;;
|
188
|
+
configtest)
|
189
|
+
$1
|
190
|
+
;;
|
191
|
+
terminate)
|
192
|
+
$1
|
193
|
+
;;
|
194
|
+
*)
|
195
|
+
FULLPATH=/etc/init.d/$PIDNAME
|
196
|
+
echo "Usage: $FULLPATH {start|stop|restart|force-reload|status|configtest|terminate}"
|
197
|
+
exit 1
|
198
|
+
;;
|
199
|
+
esac
|
200
|
+
|
201
|
+
exit 0
|
202
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
worker_processes 4;
|
2
|
+
|
3
|
+
error_log logs/error.log;
|
4
|
+
|
5
|
+
pid logs/nginx.pid;
|
6
|
+
|
7
|
+
events {
|
8
|
+
worker_connections 1024;
|
9
|
+
}
|
10
|
+
|
11
|
+
http {
|
12
|
+
passenger_root /var/apps/.rbenv/versions/<%= ruby_version %>/lib/ruby/gems/1.9.1/gems/passenger-<%= passenger_version %>;
|
13
|
+
passenger_ruby /var/apps/.rbenv/versions/<%= ruby_version %>/bin/ruby;
|
14
|
+
|
15
|
+
include mime.types;
|
16
|
+
default_type application/octet-stream;
|
17
|
+
|
18
|
+
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
19
|
+
'$status $body_bytes_sent "$http_referer" '
|
20
|
+
'"$http_user_agent" "$http_x_forwarded_for"';
|
21
|
+
|
22
|
+
access_log logs/access.log main;
|
23
|
+
|
24
|
+
sendfile on;
|
25
|
+
keepalive_timeout 10;
|
26
|
+
|
27
|
+
include sites-enabled/*;
|
28
|
+
}
|
data/lib/challenger/version.rb
CHANGED
data/lib/challenger.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
|
+
require "capistrano"
|
2
|
+
require "capistrano/cli"
|
3
|
+
require "bundler/capistrano"
|
4
|
+
|
1
5
|
require "challenger/version"
|
2
6
|
|
3
|
-
|
4
|
-
|
7
|
+
Capistrano::Configuration.instance.load do
|
8
|
+
Dir.glob(File.join(File.dirname(__FILE__), '/challenger/recipes/*.rb')).each { |f| load f }
|
5
9
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: challenger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,19 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-03-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capistrano
|
16
|
+
requirement: &70353821556040 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70353821556040
|
14
25
|
description: Capistrano recipes to launch your server.
|
15
26
|
email:
|
16
27
|
- utkarshkukreti@gmail.com
|
@@ -25,6 +36,16 @@ files:
|
|
25
36
|
- Rakefile
|
26
37
|
- challenger.gemspec
|
27
38
|
- lib/challenger.rb
|
39
|
+
- lib/challenger/recipes/base.rb
|
40
|
+
- lib/challenger/recipes/nginx.rb
|
41
|
+
- lib/challenger/recipes/nodejs.rb
|
42
|
+
- lib/challenger/recipes/passenger.rb
|
43
|
+
- lib/challenger/recipes/postgresql.rb
|
44
|
+
- lib/challenger/recipes/rbenv.rb
|
45
|
+
- lib/challenger/templates/nginx
|
46
|
+
- lib/challenger/templates/nginx.conf.erb
|
47
|
+
- lib/challenger/templates/nginx_passenger.erb
|
48
|
+
- lib/challenger/templates/postgresql.yml.erb
|
28
49
|
- lib/challenger/version.rb
|
29
50
|
homepage: https://github.com/utkarshkukreti/challenger
|
30
51
|
licenses: []
|