RubyLit - Ruby.del.litoral!
Nginx+Mongrel_cluster

En este artículo voy a explicar como hacer funcionar una app ror con Nginx como frontend y Mongrel
y alguna que otra cosita.

Yo uso GNU/Linux Debian así que me voy a basar en tal SO.
Vamos a suponer que tenemos una app ror, por ejemplo
instiki que está en el directorio: /var/www/apps/instiki
Y además tenemos un sitio estático en /var/www/site-personal (puede ser una simple web de con nuestro portfolio por ej. como es mi caso) y que queremos que esté disponible.
Para esto vamos a configurar un server virtual para nuestro
sitio personal, y las demas peticiones las redirigimos al mongrel, al menos por ahora.

El plan es el siguiente:

  1. Instalar Nginx.
  2. Configurar Nginx para publicar nuestro sitio personal (html estático).
  3. Instalar mongrel cluster
  4. Configurar mongrel cluster para servir nuesta app ror.
  5. Configurar Nginx para como frontend para nuestra app ror.

Entonces esta es la estructura a configurar más o menos:

Nginx (escucha en el port 80) y sirve a http://mi-site-personal.com

Nginx frontend para nuetro Mongrel

Mongrel (escucha en el port 8000 y 8001)y sirve a http://wiki.otro-site.com

Instalamos el Nginx:

apt-get install nginx 

Preparamos Nginx para servir nuestro sitio personal:

Para esto vamos a crear un server virtual, http://mi-site-personal.com
(por supuesto que vos debés disponer del dominio)
En este caso Nginx actuará como web server.

Editamos el archivo de configuración de Nginx

emacs /etc/nginx/nginx.conf

y agregamos lo siguiente en la sección http{ }:

Agrego el virtual server para mi el sitio de mi portfolio personal.
http{ 

    # acá están las demás opciones ....

    server {
        listen       80;
        server_name  mi-site-personal.com;

        location / {
            root  /var/www/site-personal;
            index  index.html index.htm;
        }
    }

Ahora reiniciamos el nginx:

 /etc/init.d/nginx restart 

después de esto si todo salió bien, ejecutamos nuestro
browser de preferencia y ponemos la url http://mi-site-personal.com y deberíamos ver nuestro sitio.

Instalar mongrel y mongrel cluster

Instalamos mongrel como gema:

gem install mongrel --include-dependencies 

Instalamos mongrel_cluster como gema:

gem install mongrel_cluster --include-dependencies 

Enlace para que arranque con la maquina (Debian):

   ln -s \
        /usr/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.2/resources/mongrel_cluster \
        /etc/init.d/mongrel_cluster

    chmod +x /etc/init.d/mongrel_cluster

    /usr/sbin/update-rc.d mongrel_cluster defaults

Ahora vamos a configurar nuestro mongrel_cluster primero creamos el directorio para las configuraciones:

 mkdir /etc/mongrel_cluster 

Ahora, al momento en que bootee el mongrel cluster buscará en este directorio todos los archivos de configurarción .yml, entonces vamos a crearun link simbólico al archivo de configuración de nuestro app ror (instiki en este caso):

 
 ln -s /var/www/apps/instiki/config/mongrel_cluster.yml \
 mi_instiki.yml

Este archivo de configuración será como este:

---
cwd: /var/www/apps/instiki
port: 6500
environment: production
group: www-data
user: www-data
pid_file: log/mongrel.pid
servers: 3

Esto quiere decir que va a ejecutar 3 instancias
de mongrel para servir a instiki, comenzando desde el puerto 6500, luego 6501 y 6502 respectivamente.

Referencias:

http://mongrel.rubyforge.org/