레일스 배포 구조와 방법

 

Rails 배포

 

 

1.배포 구조의 결정

2. 배포 방법의 자동화

 

 

 

1. 배포 구조의 결정

 

배포 구조 결정의 기준

 

 

 

완전 기본 - Webrick

 

빠르지만 고통스러운 - Apache + Fast CGI

 

 

 

한 때 날렸던 -  Lighttpd + Fast CGI

 

 

 

지금은? 완전 개 판!

images/visual.jpg

 

 품종 개량 (Evented Mongrel)

  1. gem install eventmachine  
  2. gem install swiftiply  
  3. env EVENT=1 mongrel_rails start -e production -d 

 

 

개 떼가 필요해! (Mongrel Cluster)

 

먹이 분배 문제? (Load Balancer)

docs/SimpleLighttpdMongrelSetup.jpg

 

TCP Balancer : Pen / Balance

  1. pen -H 4000 localhost:3000 localhost:3001

 

 

HTTP Balancer : Pound

 

 

 

Web Servers

 

images/nginx-black-logo.jpg

 

 

배포 스택 결정 초간단 기준표

레일스 오늘 처음이에요 Webrick
이제 조금 알 것 같네요. Mongrel ( evented Mongrel)
좀 더 빠른거요. 쉬우면서. Pen/Balance + Mongrel_cluster
좀 더 빠르거요. SSL 되면서요 Pound + Mongrel_cluster
아파치 아니면 안되요. 좀  복잡해도 참을께요 Apache + mod_proxy_balance + Mongrel_cluster
무지 빠르고. 간지나는 NginX + Mongrel_cluster

 

참고 문헌

 

 

 

2. 배포 절차

 

heading_to_ground2.JPG

 

 

Capistrano 

Nerja_Capistrano_Playa_Hotel_Nerja.jpg

 

Content/3/3386/1361575.jpg

 

 

Capistrano 개념

capistrano_basic_concept.PNG

 

cap : capfile = make : makefile

 

 

 

 

 

 

 

필요사항

 

  1. gem install capistrano

 

 

task 정의

  1. # Capfile
  2. task :count_libs do
  3.     run "ls -x1 /usr/lib | wc -l"
  4. end

 

  1. cap count_libs

 

  1. cap invoke COMMAND="ls -l"
  2. cap invoke COMMAND="ls -l" HOSTS="some.host.org"

 

role 정의

task가 수행 될 대상 원격 서버들을  역할 별로 구분하여 정의

 

  1. role :web, "web1.doggy.com", "web2.doggy.com"
  2. role :db,   "db.doggy.com"
  3. taks :check_free, :roles => [:web, :db] do
  4.     run "df -h /"
  5. end

 

 

Capistrano with Rails

개발서버 원격서버(운용서버)

install mongrel, mongrel_cluster

install capsitrano

mongrel_rails cluster::configure

capify .

edit depoy.rb

svn add and commit

cap deploy:setup

cap deploy:cold (최초 deploy)

cap deploy (두번째 이후 deploy)

install database

create a db for Rails app.

install mongrel, mongrel_cluster,

install capistrano

useradd -d /home/APP -m APP

APP ALL=(ALL) ALL (in /etc/sudoers )

 

capify

  1. capfify .

 

  1. load 'deploy'

 

deploy.rb

 

  1. # 원격 서버 login id = 'APP'
    set :runner, "APP"
  2. set :user, "APP"
  3. # application name
  4. set :application, "dry"
  5. # svn repository
    set :repository,  "svn://src.doggy.com/trunk"
  6. # 최신 deploy소스 위치 : /home/APP/dry/current
    set :deploy_to, "/home/APP/#{application}"

  7. role :app, "www.doggy.com"
    role :web, "www.doggy.com"
    role :db,  "www.doggy.com", :primary => true

 

 

script/spin

 

  1. mongrel_rails cluster:start

 

 

참고문헌

  1.  Rails, Capistrano, Mongrels and nginx on Gentoo / valibuk.net
  2. Capistrano Basics
  3. Using Capistrano with Rails
  4. Deploying Rails Applications /  Pragmatic Programmers

photos/uncategorized/2007/08/20/fr_deploy.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2007/07/thank-you.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

files/2007/07/question-mark.jpg