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