Una de las principales gemas que usamos para desplegar un proyecto de Rails es Capistrano. En este artículo vamos a ver como preparar un servidor Ubuntu, el proceso lo he probado en la versión 16.04 y 18.04 de Ubuntu. Usaremos un servidor nginx y unicorn para el funcionamiento del servidor web.
Te dejo aquí un ejemplo del proceso en video por si te resulta más sencillo seguir el tutorial de esa manera, a continuación tienes todo el proceso también descrito en detalle:
Preparación general del servidor como root
Lo primero que tenemos que hacer es conectar por ssh con el usuario root y una vez entramos lo primero es actualizar el repositorio de paquetes
sudo apt-get update sudo apt-get upgrade
Una vez hemos actualizado el repositorio de paquetes lo siguiente es instalar el paquete de idioma y zona horaria, en nuestro caso, español y zona GMT +1 Paris, Madrid
sudo apt-get install language-pack-es sudo cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Lo siguiente que haremos será crear un usuario con privilegios para no tener que usar al usuario root, crearemos un usuario web, estos son los pasos que necesitaremos:
sudo mkdir /home/web sudo groupadd web sudo useradd -d /home/web -s /bin/bash -g web web sudo chown -R web:web /home/web sudo passwd web
Necesitamos ahora introducir una contraseña y confirmarla para este usuario. Una vez hecho esto ahora daremos privilegios a este usuario
sudo adduser web sudo
VAmos a hacer que ahora el usuario web pueda escalar a root sin introducir la contraseña de root, utilizamos el comando
sudo visudo
Y al final del archivo añadimos:
web ALL=(ALL) NOPASSWD: ALL
Guardamos y ahora modificamos la configuración de ssh del servidor, podemos usar cualquier editor, del servidor, yo suelo usar vi así que ejecutamos:
sudo vi /etc/ssh/sshd_config
Dentro del archivo tenemos que buscar la siguiente línea y descomentarla:
AuthorizedKeysFile %h/.ssh/authorized_keys
Dentro de este archivo tenemos que buscar también esta línea:
PasswordAuthentication no
Y asegurarnos de que esté así:
PasswordAuthentication yes
Guardamos los cambios, cerramos el editor y reiniciamos el servicio ssh para que los cambios se apliquen
sudo /etc/init.d/ssh restart
Una vez hecho esto ya podremos acceder por ssh con la contraseña de este usuario. Ya podemos salir con ‘exit’ de nuestra sesión en el servidor como usuario root
Ajustes como usuario web
Ya nos debemos conectar con nuestro usuario web. Vamos a configurar el servidor para que no sea necesario que el usuario web introduzca la contraseña para las distintas operaciones que debe realizar. No tenemos que preocuparnos por esto, ya que lo vamos a enlazar con la clave ssh que tenemos en nuestra máquina mediante el siguiente comando:
ssh-copy-id web@ip_de_nuestro_servidor
Introducimos la clave que hemos definido para nuestro usuario anteriormente y ya podremos conectar por ssh sin necesidad de introducir la contraseña, así que ejecutamos
ssh web@ip_de_nuestro_servidor (supongo que no tengo que especificar que ip_de_nuestro_servidor lo tenéis que sustituir por la ip del servidor, no? ...)
Vale, ya estamos dentro del servidor, lo siguiente que haremos será generar una clave RSA dentro del propio servidor
ssh-keygen -t rsa
No asignes contraseña y puedes dejarla sin problema en la ubicación por defecto ‘/home/web/.ssh/id_rsa’
Ahora, instalaremos los paquetes que nos harán falta en el servidor, puedes copiar el siguiente párrafo completo:
sudo apt-get install mysql-server libmysqlclient-dev libmagickwand-dev imagemagick nginx nodejs git-core curl build-essential openssl libreadline6 libreadline6-dev curl zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev autoconf libc6-dev nmon
Cuando se instale el paquete de mysql te pedirá un password para el usuario root de mysql, guardalo por lo que más quieras, o vas a tener un problema importante cuando tengas que hacer algo…
Otro consejo que te doy es que veas la versión que tienes instalada de nodejs y de yarn, siempre es bueno que actualices a una versión reciente de node y te asegures de que yarn está instalado en el sistema, capistrano por ejemplo lo usa para el precompilado de assets.
Creación de la BBDD de MySql
Necesitamos crear la base de datos, esta información a partir de ahora guardala a buen recaudo, la vas a necesitar para la configuración, si quieres que tu proyecto funcione claro, abrimos la consola de mysql
mysql -u root -p
Ahora necesitas la contraseña que antes has especificado para el usuario root, imagina que llamamos a la base de datos proyecto_ninja_production, y suponiendo que tu clave del root de mysql sea ‘ninja-Project-Mysql-Master’ el comando sería el siguiente:
CREATE DATABASE proyecto_ninja_production; GRANT ALL PRIVILEGES ON proyecto_ninja_production.* TO root@localhost IDENTIFIED BY ‘ninja-Project-Mysql-Master’; FLUSH PRIVILEGES; exit
Preparación del despliegue del proyecto de Ruby on Rails
Lo siguiente que haremos será comenzar a preparar ya el despliegue, vamos a agregar la clave ssh a nuestro repositorio de código, normalmente estará en github o en bitbucket, para obtener la clave rsa
cat /home/web/.ssh/id_rsa.pub
Una vez que añadamos la clave al repo, testearemos que tenemos conexión por ssh, tanto bitbucket como github nos proporcionan este test:
ssh -T git@bitbucket.org ssh -T git@github.com
Instalación de RVM (Ruby Version Manager)
curl -L https://get.rvm.io | bash -s stable
La primera vez que ejecutemos este comando, fallará y nos indicará que ejecutemos antes la instalación de claves de verificación GPG, algo parecido a esto:
gpg –keyserver hkp://keys.gnupg.net –recv-keys 409B6B1796C275462xxxxxxxxxxxxxxx
Tras haber ejecutado este comando ya podremos instalar RVM, al finalizar la instalación, debemos ejecutar el siguiente comando para que los cambios se hagan efectivos de inmediato:
source /home/web/.rvm/scripts/rvm
En este punto, si conoces la versión de Ruby que vas a usar en el proyecto, es más que aconsejable que lo instales directamente, suponiendo que vayas a usar la versión 2.6.0 de Ruby ejecutarías el siguiente:
rvm install 2.6.0
Por último, y para afinar, vamos a instalar la gema bundler, que la necesitaremos para hacer el despliegue, es aconsejable, para evitar posteriores problemas durante el deploy verifica el archivo gemfile.lock, al final de este archivo te especificará la versión del bundler con la que se ha montado el gemset, es aconsejable que instales esta versión del bundler en el servidor en el que vas a desplegar
gem install bundler -v '1.17.3' (o cualquiera que sea la versión que estés usando)
En este enlace a mi cuenta de GitHub tienes todos los archivos necesarios de capistrano del proyecto para hacer un despliegue este servidor que has dejado ya listo para recibir tu proyecto.
Deja una respuesta