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

This entry was published on Friday, March 06, 2009. Articles published around the same time can be found in the archive.