Motivación: Si hay scripts que automáticamente instalan rails con todo en linux es lógico preguntarse porque pasar por el suplicio de hacer una instalación custom, pero la razón es sencilla, en la mayoría de los casos el script que hace la instalación no utiliza el mismo stack que nosotros queremos, o instala aplicaciones demás que consumen mucha memoria ram.

En este tutorial aprenderás a montar un servidor rails con NginX, Passenger y PostgreSQL en ubuntu 14.04 y 14.10

Esta guía no es compatible con ubuntu 15.04

Paso 1: Setup

Crear un server vacío con ubuntu 14.10

ssh al server con la ip dada

Opcional: Si el servidor te pide que actualices los paquetes de internacionalización hazlo.

actualizar paquetes

luego reinicia la máquina

y finalmente conéctate de nuevo.

Paso 1: Crear al usuario deploy dentro del server

Cuando instalas programas como root estos le pertenecen a root, lo que nos va a causar problemas de permisos, además es simplemente peligroso, uno nunca debería trabajar como root, en lugar de eso vamos a crear el usuario deploy.

Aclaración (El nombre deploy es un buen nombre para el usuario de deployment, pero no es necesario que sea este, de todas formas al seguir el tutorial desaconsejo cambiarlo)

(anotar el pass para no olividarlo)

Añadir al usuario al grupo de sudoers

Salimos del server

Y ahora nunca más entramos como root.

si lo hicimos bien deberíamos poder entrar al usuario deploy

y además ahora como deploy deberíamos poder correr comandos sudo.

eso debería mostrar todos los archivo dentro de la carpeta.

Paso 2: Acceso directo y sin clave por ssh a [email protected]

Copiamos nuestra clave pública al llavero del usuario deploy. (Esto se hace desde nuestro computador, no del server)

sabrás que este proceso lo hiciste bien si te pide el password del usuario deploy que acabas de crear en la etapa anterior y probemos que funciona con

si no pide password estamos ok. el root sigue pidiendo clave, el deploy ya no la pide, puedes copiar también la clave al root si lo deseas, pero no es necesario.

Si falla [Y SOLO SI FALLA] porque no encuentra el comando ssh-copy-id entonces puedes instalarlo a través de tu administrador de paquetes

En mac:

En linux:

Paso 3: Actualizando paquetes e instalando paquetes claves

A partir de este momento es necesario entrar al server con el usuario deploy

Primero actualizamos los paquetes

Ojo que el texto a continuación no tiene saltos de línea.

y ahora upgradeamos

Paso 4: Instalar RVM

Instalamos librerías necesarias:

Descargamos la llave pública de RVM para verificar los contenidos descargados

Descargamos el script instalador de rvm y lo ejecutamos

Dejamos corriendo rvm en nuestra sesion actual:

Para cargar siempre rvm en el entorno vamos a correr la siguiente línea

si ahora corremos RVM deberíamos obtener un mensaje de ayuda y como usarlo.

Paso 5: Instalar Ruby

instalamos la versión ruby 2.2.0 (la más actual al momento de la creación de este tutorial)

Le pedimos a rvm que use por defecto la versión 2.2.0 (rvm puede manejar múltiples versiones

Utilizamos rvmsudo para reparar los permisos de diversos programas y evitar futuros problemas de permisos.

Otra cosa útil pero es sólo opcional es especificar que no instale la documentación de las gemas, esto nos va a ayudar a instalar rails de forma mucho más rápida

Paso 6: Instalar Nginx

# Install Phusion’s PGP key to verify packages

# Add HTTPS support to APT

# Add the passenger repository

Install nginx and passenger

Hacemos correr Nginx

El paso lo hicimos bien si al entrar con el navegador a la IP, deberías ver la página de NginX

Paso 7: Habilitando passenger en NginX

Para los siguientes pasos puedes ocupar Vim u otro editor a elección como nano o emacs.

dentro del archivo nginx.con tenemos que especificar el passenger_root, busca donde están dentro del archivo, van a estar comentadas dentro (anteponen un signo #) y cambia esas líneas por esta, si son las mismas puedes simplemente eliminar el comentario (el signo #)

y luego reiniciamos el servidor

si el server no reinicia bien puedes revisar los logs

Paso 8: Instalar Postgres y crear usuario

Instalar postgres

Opcional Para guardar el historial

sudo touch /var/lib/postgresql/.psql_history

Entra a postgres, Utiliza el usuario de postgres del sistema (no podemos entrar a postgres siendo otros usuarios)

y luego entramos a postgres con la linea.

Paso 9: Crear un usuario dentro de Postgre

9.1 Crear usuario

Crea un usuario, yo utilizo el nombre de la aplicación con alguna variante, pero también podría ser uno genérico como deploy).

Recordar el ; al final de la línea de comando, ya no estamos en entorno bash, estamos entorno PSQL, Utiliza un password seguro

Si resultó bien, postgre responderá con CREATE ROLE

Opcional: Si queremos cambiar el password del usuario lo podemos hacer con:

podemos ver todos los usuarios creados en postgre con, aquí deberíamos ver al usuario que acabamos de crear.

9.2 Crear la base de datos

Sugerencia: El nombre de la app + _production es un buen nombre para el de la base de datos.

Si lo haces correctamente postgre responderá con

CREATE DATABASE

9.3 darle permisos al usuario

Entregamos los privilegios del usuario a la base de datos.

para salir del entorno de psql utilizamos:

finalmente para salir del usuario postgre basta con escribir en el bash:

Paso 10: Seteando el virtual host default

10.0 Explicación de los virtual hosts (sólo leer)

Nginx ocupa el mismo sistema de virtual hosts que apache

para eso ocupa dos carpetas /etc/nginx/sites-available y /etc/nginx/sites-enable

cuando uno empieza a crear uno nuevo lo pone sites-available y cuando lo quiere activar lo copia a través de un link simbólico a sites enable

ln -s ruta_completa_al_site_available ruta_destino

Nota: Editar el contenido del link simbólico o del original causa el mismo efecto.

Sin embargo nosotros estamos trabajando con el archivo default, este virtual host ya viene copiado, por lo que no tenemos que hacer nada, la explicación anterior es exclusivamente para cuando queremos poner más de una aplicación de rails en nuestro sitio.

paso 10.1 Configurando el virtual host por default

El siguiente paso consiste en editar el archivo /etc/nginx/sites-available/default

puedes comentar el contenido que existe actualmente para no perderlo, o puedes incluso hacerle una copia, pero lo importante es que dentro del archivo vaya el siguiente contenido.

donde dice nombre_proyecto debe ir el nombre de la carpeta de tu proyecto.

donde dice mydomain.com debería el nombre de tu dominio comprado en nic chile o godaddy, sin embargo como es nuestro virtual host por default también será capaz de responder a la ip, en ese caso simplemente no ponemos la directiva server_name.

para hacer valer los cambios:

si hay un fallo en el archivo es posible revisar los logs de nginx con

sudo tail -n 50 /var/log/nginx/error.log

tail te muestra las últimas n lineas, 50 es el n, puedes también ocupar cat, pero a medida que crezca el log se va demorar más.

finalmente lo que tenemos que hacer es copiar nuestra app corriendo de rails a nombre_proyecto/current

ahora, ¿Por qué ocupar una carpeta llamada current, porque en la siguiente tutorial vamos a aprender a hacer deployment automatizado con Capistrano.

Share Button

Director de DesafíoLatam. Ingeniero Civil Informático de la Universidad Federico Santa María. Emprendedor lean, dedicado al desarrollo de una mejor web con ruby on rails. Fanático de los números y las métricas, la música y la fotografía.