Quantcast
Channel: Flasheves » Ruby
Viewing all articles
Browse latest Browse all 5

Rails en un entorno de producción con Nginx + Passenger

$
0
0

En otro post escribí sobre como instalar Rails sobre RVM + Passenger + Apache, está vez lo haré con otro entorno, se trata de Nginx, como servidor proxy, y Passenger, quien realmente se encargará de desplegar la aplicación, en vez de usar RVM usaré directamente Ruby 1.9.2 (compilado desde la fuente) y el servidor será CentOS 5. Asumiendo que tenemos un servidor recién instalado y acceso como root , iniciemos que hay mucho por abordar:

1. Instalación de paquetes

Actualizamos el Sistema Operativo (en mi caso use Centos 5.3 y necesitaba actualizarlo a la última rama del 5, es decir el 5.7)

su -c ‘yum update’

Podemos comprobar la versión con un

cat /etc/redhat_release

Los repositorios de CentOS 5 no están muy actualizados, así que si queremos trabajar con últimas versiones (o versiones específicas) necesitaremos compilar algunas cosas.

Paquetes necesarios para compilar

yum groupinstall ‘Development Tools’

Cabeceras C para que Ruby se compile con soporte para OpenSSL

yum install openssl-devel

Cabeceras de CURL, se ocuparán para que Passenger tenga soporte SSL

yum install curl-devel

Ngingx necesita PCRE  (Perl Compatible Regular Expressions) para su módulo rewrite

yum install pcre-devel

* Cabeceras para Sqlite (no es necesario si ocupamos otra base de datos que no es Sqlite , la cual viene por defecto con Rails en entorno de desarrollo)

yum install sqlite-devel

2. Instalación de Ruby

CentOS 5 tiene en los repositorios Ruby 1.8, pero como sabemos pronto acabará su soporte en favor de Ruby 1.9, entre otros motivos, por tal razón instalaremos Ruby 1.9.2 (versión estable hasta este momento).

Descargamos Ruby 1.9.2 y compilamos

wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.9.2-p290.tar.gz
tar zxvf ruby-1.9.2-p290.tar.gz
cd ruby-1.9.2
./configure
make
sudo make install
cd ..

3. Instalación de Gem

Descagamos e instalamos Gem

wget http://rubyforge.org/frs/download.php/75573/rubygems-1.8.12.tgz
tar zxvf rubygems-1.8.12.tgz
cd rubygems-1.8.12
sudo ruby setup.rb
gem update

4. Instalación de Passenger

gem install passenger

5. Instalación de Nginx

A diferencia de  Apache, hacer que Passenger funcione con Nginx no es tan simple como cargar un módulo, lo que tenemos que hacer es compilar Nginx con soporte para Passenger. Para esto Passenger tiene un asistente de instalación para Nginx:

passenger-install-nginx-module

La opción 1 es mas más conveniente, sin embargo no usa la última versión de Nginx, y en caso de que queramos usar la última versión (o alguna en específico) deberemos bajar la fuente y usar la opción 2.

Cancelamos el asistente y bajamos la ultima versión de Nginx, luego descomprimimos

 wget http://nginx.org/download/nginx-1.0.11.tar.gz
tar zxvf nginx-1.0.11.tar.gz

*Es importante anotar la dirección de la carpeta donde se descomprimió Nginx, en mi caso /root/nginx-1.0.11

Ahora si corremos el asistente de Passenger  utilizando la opción 2 y completamos los datos solicitados (entre ellos la ruta de la carpeta descomprimida de Nginx)

passenger-install-nginx-module

Por defecto Nginx se instalará en /opt/nginx, pero eso lo podemos cambiar en el asistente. Ahora por comodidad crearemos los script para administrar Nginx como servicio:

wget http://library.linode.com/assets/662-init-rpm.sh
mv init-rpm.sh /etc/rc.d/init.d/nginx
chmod +x /etc/rc.d/init.d/nginx
chkconfig --add nginx
chkconfig --level 2345 nginx on 

Una breve descripción de lo usado allá arriba:

Línea 1: bajamos un script muy útil de linode que usaremos para la administración de Nginx
Línea 2: movemos el script donde los demás servicios
Línea 4: agregamos el servicio para ser manejado por chkconfig, el cual se encargará de revisar que cuente con los comandos de start y kill en cada uno de los niveles de ejecución.
Línea 5: indicamos que Nginx iniciará  en los niveles de ejecucion 2,3,4,5

Ahora iniciamos Nging (con soporte para Passenger) como cualquier servicio:

/etc/init.d/nginx start

Podemos comprobar los servicios corriendo:

chkconfig –list


6. Instalar Rails

Ya casi terminamos, ahora solo instalamos Rails, y creamos una aplicación de prueba para comprobar

gem install rails

 cd /opt/nginx/html
rails new prueba

7. Configurar Nginx y Passenger

Configuramos Nginx y Passenger para correr nuestra aplicación, para esto editamos y creamos una nueva entrada en /opt/nginx/conf/nginx.conf

server {
listen          80;
server_name     www.aqui-tu-dominio.com;  #Dominio
root            /opt/nginx/html/prueba/public; #Ruta de la app (apuntar a public)
passenger_enabled on; #Para que passenger haga el despliegue
error_log    /opt/nginx/html/siac/log/error.log;
access_log    /opt/nginx/html/siac/log/access.log;
}

Finalmente reiniciamos Nginx para que hagan efecto los cambios

/etc/init.d/nginx restart

Y Listo, ya tenemos nuestra aplicación Rails corriendo con Nginx y Passenger sobre Ruby 1.9.2 en CenOS 5

Pasos Opcionales

*Dependiendo  de la base de datos que usará tu aplicación te dejo los script para instalar MySQL y SQLite

Instalación de MySQL desde los repositorios

yum install mysql
yum install mysql-server
yum install mysql-devel
/etc/init.d/mysqld start

Instalación de SQLite compilado

wget http://www.sqlite.org/sqlite-autoconf-3070900.tar.gz
tar zxvf sqlite-autoconf-3070900.tar.gz
cd sqlite-autoconf-3070900
./configure
make
make install

Viewing all articles
Browse latest Browse all 5

Latest Images

Trending Articles





Latest Images