Phusion Passenger 로 redmine 등의 rails app deploy

webrick 는 개발용 웹서버라 production 환경에서는 적합하지 않다. apache 나 NginX 같은 Web Server에서 rails app 구동할 예정이면 fcgi 보다는 Phusion Passenger 같은 전문 rails deployer를 설치해야 한다.

gem 으로 설치

compile 해서 설치하므로  gcc-c++패키지가 설치되어 있어야 한다.
gem install passenger
passenger-install-apache2-module

 

yum 으로 설치

passenger repository 인 http://passenger.stealthymonkeys.com/ 를 통해 설치

rpm --import http://passenger.stealthymonkeys.com/RPM-GPG-KEY-stealthymonkeys.asc
yum install http://passenger.stealthymonkeys.com/rhel/6/passenger-release.noarch.rpm
yum install mod_passenger

 

설정

설정 파일은 /etc/httpd/conf.d/passenger.conf  에 위치하므로 에디터로 설정을 수정한후에 apache httpd 를 재구동하면 된다.

 

SELinux 문제 해결

RHEL/CentOS 6.3 까지는 관련 SELinux policy 가 없으므로 passenger가 설치된 경로를 아파치 httpd가 읽지 못해서서 제대로 구동되지 않는다.

 /var/log/audit/audit.log 에 다음과 같은 내용이 있다면 SELinux에 맞게 type enforcement 를 설정해 줘야 한다.

type=AVC msg=audit(1394037185.556:72502): avc:  denied  { chown } for  pid=24128 comm="PassengerWatchd" capability=0  scontext=unconfined_u:system_r:httpd_sys_script_t:s0 tcontext=unconfined_u:system_r:httpd_sys_script_t:s0 tclass=capability        Was caused by:
                Missing type enforcement (TE) allow rule.
                You can use audit2allow to generate a loadable module to allow this access.

6.4부터는 policy 가 추가되어서 특별히 설정하지 않아도 잘 동작한다. (https://bugzilla.redhat.com/show_bug.cgi?id=864546)

 

  1. passenger 설치 루트 폴더를 알아낸다.

    > passenger-config --root             
    /usr/lib/ruby/gems/1.8/gems/passenger-3.0.21
  2. 설치 루트에 httpd 가 읽을 수 있게 label 을 설정한다.

    chcon -R -h -t httpd_sys_content_t /usr/lib/ruby/gems/1.8/gems/passenger-3.0.21
  3. httpd 재구동