Bitaholic

Apache + Mongrel 설정 본문

Computer/Ruby&Rails

Apache + Mongrel 설정

Bitaholic 2009. 11. 27. 11:14




Mongrel 은 루비웹서버이다. Rails에서 WebBrick과 함께 쉽게 쓸 수 있는 웹서버인데, 하지만 몽그렐은 하나의 프로세스에 하나의 쓰레드로만 돌아가기 때문에 상용서비스를 하려면 아파치 웹서버를 프락시 서버 및 로드 밸런서로 쓰고 뒤에 다수의 몽그렐 서버를 클러스터로 구성 해야 한다. (이때 서버들 간의 세션 공유는 아마 가정하지 않고, 공유 되는 정보는 모두 DB에서 이루어지는 것을 가정해야 한다. 이부분은 아직 자세히 보진 않았다) 

1. 아파치 웹서버를 프락시 서버로 구성하기 
  a) mod_proxy, mod_rewrite 아파치 모듈이 필요하다 (없으면 다운받아서 아파치 서버 모듈폴더에 넣어두자)
      - 폴더는 CentOS5.x기준으로 '/etc/httpd/modules' 이다
  b) 위의 모듈을 로딩하고 설정을 해준다 (/etc/httpd/conf/httpd.conf)
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

<IfModule mod_proxy.c>
ProxyRequests On

<Proxy *>
    Order deny,allow
    #Deny from all
    Allow from all
</Proxy>


RewriteEngine On

<Proxy balancer://mongrel_cluster>
     BalancerMember http://127.0.0.1:8000 retry=10
     BalancerMember http://127.0.0.1:8001 retry=10
     BalancerMember http://127.0.0.1:8002 retry=10
</Proxy>

# PERFORMANCE: If no static file exists, let Mongrel handle the request
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L]
 
2. Mongrel cluster 설치
gem install mongrel
gem install mongrel_cluster
 tip) gem 으로 몽그렐 설치시 'make : xxx[fastthred.c] Error 127' 이라는 에러가 나면 gcc가 서버에 설치가 안되있어서 그러니 관련 라이브러리르 설치 하자.
  - centOS에서는
      - yum install gcc-c++ kernel-devel
  - Devian계열은
      - apt-get install build-essentail
으로 설치 하면 된다. centOS에는 테스트 해서 성공했는에 우분투등 데비안 계열을 해보진 않았다. 아마 되겠지

3. Mongrel을 서비스(데몬)으로 등록하고 부팅시 자동 스타트 되게 만들기  
   몽그렐은 기본적으로 레일스 어플리케이션 폴더에서 실행을 해야 한다. (로그폴더(log), 설정폴더(config), 임시폴더(tmp) 등이 필요하다), 물론 저 폴더들을 따로 옵션으로 지정을 할 수 도 있다.
 
    i) Mongrel 서버를 띄우 리눅스 계정을 하나 만들어 준다.
      $ adduser -r mongrel

    ii) 레일스 어플리케이션 홈폴더에서
    $ mongrel_rails cluster::configure -e production -p 8000 -N 3

위의 명령으로 기본 설정파일등을 만들어 준다.(위의 설정은, 포트 8000, 8001, 8002로서 서버 3개를 클러스터로 시작한다는 말이다.

iii) 그러면 아래와 같은 명령으로 몽그렐클러스터 를 시작하고 종료시킬수 있다.
$ mongrel_rails cluster::start
$ mongrel_rails cluster::stop

iv) /etc/mongrel_cluster 라는 폴더를 만들어 준다.

v) /etc/mongrel_cluster/yourrailsapp.yum 이라는 링크를 만들어 준다.
$ ln /MyRailsAppHome/config/mongrel_cluster.yml /etc/mongrel_cluster/myrailsapp.yml

vi) 자동스타트를 위해 init.d 파일을 /etc/init.d/ 폴더 밑으로 복사한다. (스크립트는 몽그렐을 설치하면
생성되 있다.
$ cp /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d

vii) mongrel_cluster 스크립트의 실행 권한을 주고 자동 실행이되게 관련 값을 변경해 준다.
$ chmod +x /etc/init.d/mongrel_cluster
$ service mongrel_cluster start
$ chkconfig mongrel_cluster on
    viii) /etc/mongrel_cluster/에 복사한 몽그렐 설정 내용은 대충 이럴것 이다.
user: mongrel
cwd: /myRailsAppHome
log_file: /myRailsAppHome/log/mongrel.log
port: "8000"
environment: production
group: mongrel
address: 127.0.0.1
pid_file: /myRailsAppHome/tmp/pids/mongrel.pid
servers: 3

    iX) 위의 폴더중, log, pid폴더에 접근권한을 mongrel 유저에게 주어야 한다.
      $ chown -R mongrel.mongrel /myRailsAppHome/log
      $ chown -R mongrel.mongrel /myRailsAppHome/tmp/pids

위와같의 하면 서버 실행시 아파치와 몽그렐 클러스터가 실행될 것이다.

Ref) http://www.mygeekproject.com/?p=155
Ref) http://mongrel.rubyforge.org/
Ref) http://wiki.rubyonrails.org/deployment/apache-mongrel
Comments