CentOS6.5使用Nginx+Passenger部署Ruby on Rails环境

2022-07-04 13:01:50 浏览数 (3)

本文介绍如何使用Nginx Passenger来部署Ruby on Rails环境,本文使用的操作系统版本是CentOS6.5。 1.安装ruby

  wget http://cache.ruby-lang.org/pub/ruby/ruby-2.0.0-p594.tar.gz   mkdir -p /data/app_platform/ruby   tar -zxvf ruby-2.0.0-p594.tar.gz   cd ruby-2.0.0-p594   ./configure --prefix=/data/app_platform/ruby   make   make install   ln -sf /data/app_platform/ruby/bin/* /usr/bin/   gem install rails 2.安装Nginx和Passenger Passenger有两种方式安装,一种是standalone 方式即Passenger独立运行,然后通过Nginx将ruby相关请求转发到Passenger,另一种是与Nginx整合在一起安装,维护方便。这里选用第一种方式。 Passenger 4.0以上和Nginx 1.4以上可以整合到一起

  wget http://s3.amazonaws.com/phusion-passenger/releases/passenger-4.0.57.tar.gz   wget http://nginx.org/download/nginx-1.4.4.tar.gz   useradd -r www -s /sbin/nologin   mkdir -p /data/app_platform/{nginx,passenger}   tar -zxvf passenger-4.0.57.tar.gz   mv -f passenger-4.0.57/*  /data/app_platform/passenger   tar -zxvf nginx-1.4.4.tar.gz   cd nginx-1.4.4   ./configure --user=www --group=www --prefix=/data/app_platform/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre  --with-http_perl_module --with-http_realip_module  --with-http_addition_module  --add-module=/data/app_platform/passenger/ext/nginx   make   make install            mkdir -p /data/app_platform/nginx/conf/conf.d/ 3.配置Nginx

添加Nginx启动文件/etc/init.d/nginx #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig:  - 85 15 # description:  Nginx is an HTTP(S) server, HTTP(S) reverse #              proxy and IMAP/POP3 proxy server # processname: nginx # config:      /etc/nginx/nginx.conf # config:      /etc/sysconfig/nginx # pidfile:    /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/data/app_platform/nginx/sbin/nginx" prog=$(basename $nginx) sysconfig="/etc/sysconfig/$prog" lockfile="/var/lock/subsys/nginx" pidfile="/data/app_data/nginx/logs/nginx.pid" NGINX_CONF_FILE="/data/app_platform/nginx/conf/nginx.conf" [ -f $sysconfig ] && . $sysconfig start() {     [ -x $nginx ] || exit 5     [ -f $NGINX_CONF_FILE ] || exit 6     echo -n $"Starting $prog: "     daemon $nginx -c $NGINX_CONF_FILE     retval=$?     echo     [ $retval -eq 0 ] && touch $lockfile     return $retval } stop() {     echo -n $"Stopping $prog: "     killproc -p $pidfile $prog     retval=$?     echo     [ $retval -eq 0 ] && rm -f $lockfile     return $retval } restart() {     configtest_q || return 6     stop     start } reload() {     configtest_q || return 6     echo -n $"Reloading $prog: "     killproc -p $pidfile $prog -HUP     echo } configtest() {     $nginx -t -c $NGINX_CONF_FILE } configtest_q() {     $nginx -t -q -c $NGINX_CONF_FILE } rh_status() {     status $prog } rh_status_q() {     rh_status >/dev/null 2>&1 } # Upgrade the binary with no downtime. upgrade() {     local oldbin_pidfile="${pidfile}.oldbin"     configtest_q || return 6     echo -n $"Upgrading $prog: "     killproc -p $pidfile $prog -USR2     retval=$?     sleep 1     if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then         killproc -p $oldbin_pidfile $prog -QUIT         success $"$prog online upgrade"         echo          return 0     else         failure $"$prog online upgrade"         echo         return 1     fi } # Tell nginx to reopen logs reopen_logs() {     configtest_q || return 6     echo -n $"Reopening $prog logs: "     killproc -p $pidfile $prog -USR1     retval=$?     echo     return $retval } case "$1" in     start)         rh_status_q && exit 0         $1         ;;     stop)         rh_status_q || exit 0         $1         ;;     restart|configtest|reopen_logs)         $1         ;;     force-reload|upgrade)          rh_status_q || exit 7         upgrade         ;;     reload)         rh_status_q || exit 7         $1         ;;     status|status_q)         rh_$1         ;;     condrestart|try-restart)         rh_status_q || exit 7         restart         ;;     *)         echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart|reopen_logs}"         exit 2 esac

Nginx主配置文件/data/app_platform/nginx/conf/nginx.conf user  www; worker_processes  4; error_log  /data/app_data/nginx/logs/error.log  error; pid        /data/app_data/nginx/logs/nginx.pid; worker_rlimit_nofile 65535; events {     use epoll;     worker_connections  10240; } http {     passenger_root /data/app_platform/passenger;     passenger_ruby /usr/bin/ruby;     passenger_max_pool_size 10;     passenger_debug_log_file /data/app_data/nginx/logs/passenger.log;     passenger_show_version_in_header on;     passenger_spawn_method smart;     include      mime.types;     default_type  application/octet-stream;     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" '                       '"$http_user_agent" "$http_x_forwarded_for"';     access_log  logs/access.log  main;     sendfile        on;     tcp_nopush      on;     tcp_nodelay    on;     server_tokens off;      keepalive_timeout  60;     server_names_hash_bucket_size 128;     client_header_buffer_size 32k;     large_client_header_buffers 1 128k;# 4 32k     client_max_body_size 8m;     client_body_buffer_size 128k;     fastcgi_connect_timeout 60;     fastcgi_send_timeout 60;     fastcgi_read_timeout 60;     fastcgi_buffer_size 256k;     fastcgi_buffers 4 512k;#8 128     fastcgi_busy_buffers_size 512k;     fastcgi_temp_file_write_size 512k;     #fastcgi_intercept_errors on;     gzip on;     gzip_min_length 1k;     gzip_buffers    1 64k; #4 16     gzip_http_version 1.0;     gzip_comp_level 2;     gzip_types      text/plain application/x-javascript text/css application/xml;     gzip_vary on;     include /data/app_platform/nginx/conf/conf.d/*.conf;     server {           listen      80        default;           server_name _;           return 403;             } }

Nginx主配置文件关键部分就是这里,表明passenger是整合到Nginx中的。     passenger_root /data/app_platform/passenger;     passenger_ruby /usr/bin/ruby;     passenger_max_pool_size 10;     passenger_debug_log_file /data/app_data/nginx/logs/passenger.log;     passenger_show_version_in_header on;     passenger_spawn_method smart;

添加虚拟主机

server {     server_name xxx.com.cn;      access_log  /data/app_data/nginx/logs/xxx.log main;     root /data/zmkm_app/zmkm/public/;     passenger_enabled on;     index index.html index.htm;     location /assets/LiveVideo.swf {         root /data/zmkm_app/zmkm/public/;         index index.html index.htm;         passenger_enabled on;     } }

需要注意的如果虚拟主机制定的目录下需要Nginx处理ruby代码则需要加上passenger_enabled on;这条这令,并且location指定的内容还需要再次添加

1 人点赞