Merb deploy step by step
Friday, March 06, 2009
Deploying the second Merb app on our server in the same week, I’ve made the history of various comand lines to enter on each side to have a fresh merb-app install.
It’d also help to refactor the whole process thanks to this global view.
App server
Monit Configuration
alx@MacBook ~$ ssh deploy@slice.legodata.com
deploy@legodata:/etc/nginx$ cd /etc/monit.d/
deploy@legodata:/etc/monit.d$ sudo cp slice2.monit slice3.monit
deploy@legodata:/etc/monit.d$ sudo nano slice3.monit
check process slice3_app_master
with pidfile /home/deploy/legodata/slice3/shared/pids/production-merb.main.pid
start program = "/home/deploy/bin/monit_merb_mpc slice3 start_master /home/deploy/legodata -c2 -n4004"
stop program = "/home/deploy/bin/monit_merb_mpc slice3 stop_master /home/deploy/legodata"
#if totalmem is greater than 80.0 MB for 2 cycles then restart # eating up memory?
group slice3.legodata.com
# Worker configuration (one for each worker port required)
check process slice3_app_4004
with pidfile /home/deploy/legodata/slice3/shared/pids/production-merb.4004.pid
start program = "/home/deploy/bin/monit_merb_mpc slice3 register_worker /home/deploy/legodata 4004"
stop program = "/home/deploy/bin/monit_merb_mpc slice3 restart_worker /home/deploy/legodata 4004"
if totalmem is greater than 80.0 MB for 2 cycles then restart # eating up memory?
group slice3.legodata.com
check process slice3_app_4005
with pidfile /home/deploy/legodata/slice3/shared/pids/production-merb.4005.pid
start program = "/home/deploy/bin/monit_merb_mpc slice3 register_worker /home/deploy/legodata 4005"
stop program = "/home/deploy/bin/monit_merb_mpc slice3 restart_worker /home/deploy/legodata 4005"
if totalmem is greater than 80.0 MB for 2 cycles then restart # eating up memory?
group slice3.legodata.com
deploy@legodata:/etc/monit.d$ sudo /etc/init.d/monit restart
deploy@legodata:/etc/monit.d$ sudo /usr/sbin/monit -c /etc/monit/monitrc status
More info:
Nginx Configuration
deploy@legodata:~$ cd /etc/nginx/
deploy@legodata:/etc/nginx$ sudo cp sites-available/slices/slice3.legodata.com sites-enabled/
deploy@legodata:/etc/nginx$ sudo nano sites-enabled/slice3.legodata.com
upstream slice3 {
server 127.0.0.1:4004;
server 127.0.0.1:4005;
}
server {
listen 80;
server_name slice3.legodata.com;
root /home/deploy/legodata/slice3/current/public;
access_log /home/deploy/legodata/slice3/shared/log/access.log;
error_log /home/deploy/legodata/slice3/shared/log/error.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect false;
proxy_max_temp_file_size 0;
if (-f $request_filename) {
break;
}
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
if (!-f $request_filename) {
proxy_pass http://slice3;
break;
}
} # location
} # server
deploy@legodata:/etc/nginx$ sudo /etc/init.d/nginx restart
More info:
Manual launch for debug
deploy@legodata:/etc/monit.d$ sudo /usr/local/bin/merb --name slice3_production -d -u deploy -G www-data -a mongrel -L /home/deploy/legodata/slice3/current/log/production.log -e production -m /home/deploy/legodata/slice3/current -c 2 -P '/home/deploy/legodata/slice3/shared/pids/production-merb.%s.pid' -p 4004 -N
More info:
Git repository creation
alx@MacBook ~$ ssh git@slice.legodata.com
git@legodata:~$ mkdir cbon.git
git@legodata:~$ cd cbon.git
git@legodata:~/cbon.git$ git init
Initialized empty Git repository in /home/git/cbon.git/.git/
Dev station
Git workspace creation
alx@MacBook ~/Sites/cbon[master]$ mkdir cbon
alx@MacBook ~/Sites/cbon[master]$ cd cbon/
alx@MacBook ~/Sites/cbon[master]$ git init
alx@MacBook ~/Sites/cbon[master]$ touch README
alx@MacBook ~/Sites/cbon[master]$ git add .
alx@MacBook ~/Sites/cbon[master]$ git commit -a -m "first commit"
alx@MacBook ~/Sites/cbon[master]$ git remote add origin git@git.legodata.com:cbon.git
alx@MacBook ~/Sites/cbon[master]$ git push origin master
Merb app creation
alx@MacBook ~/Sites/cbon[master]$ merb-gen app .
alx@MacBook ~/Sites/cbon[master]$ capify .
Deploy on app server
alx@MacBook ~/Sites/cbon[master]$ more config/deploy.rb
set :application_name, 'cbon'
set :application, "slice3.legodata.com"
set :deploy_to, "/home/deploy/legodata/slice3"
alx@MacBook ~/Sites/cbon[master]$ cap deploy:setup
alx@MacBook ~/Sites/cbon[master]$ cap deploy:cold
blog comments powered by Disqus