20/02/2017

Ruby on Rails: Instalación de servidor y despliegue con Capistrano

Digital55
Ruby on Rails Digital55

Encontrar especialistas en Ruby on Rails no es sencillo, por eso desde DIGITAL55 queremos mostrarte ejemplos de Ruby on Rails con este pequeño curso de Ruby on Rails con Capistrano para demostrarte que puedes contar con nosotros para cualquier tipo de proyecto: ya sea llave en mano, desarrollo a medida, con un programador interno, etc.

A continuación lanzamos un pequeño tutorial Ruby on Rails de cómo instalar Ruby on Rails y desplegar con Capistrano. Partiendo de una maquina Ubuntu (14.04 o 16.04) recién instalada, pasos a seguir para la instalación de varios proyectos Ruby on Rails con nginx y unicorn. Accedemos por ssh con las credenciales iniciales que nos dieron con el servidor.

Guía Ruby on Rails: Actualización de repositorio de paquetes

sudo apt-get update
sudo apt-get upgrade

Paquete de idioma y zona horaria

(Echar un vistazo a https://www.psce.com/blog/kb/how-to-periodically-synchronize-time-in-linux/)
Ejecutamos:

sudo apt-get install language-pack-es
sudo cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime

Ruby on Rails: Usuario

Estamos con el usuario <<root>>por defecto, debemos crear un usuario con privilegios. Para este tutorial, utilizaremos al usuario <<web>>. Ejecutamos:

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

Nos pedirá introducir y confirmar una contraseña para este usuario.
Después damos privilegios para poder instalar las dependencias de Ruby on Rails.

sudo adduser web sudo

Ahora forzamos a que el usuario ‘web’ pueda escalar a root sin necesidad de introducir la contraseña de root

sudo visudo

Al final del archivo agregamos esta línea:

web ALL=(ALL) NOPASSWD: ALL

Ya que esta vez el editor es nano, guardamos con Ctrl + X y aceptamos

Configuración de SSH

Se puede usar cualquier editor de textos, para este tutorial Ruby on Rails. Usaremos vi. Ejecutamos:

sudo vi /etc/ssh/sshd_config

Buscamos la línea comentada “AuthorizedKeysFile %h/.ssh/authorized_keys” y la descomentamos. En caso de no existir, la creamos.
Guardamos cambios y cerramos el editor. Reiniciamos SSH, ejecutando:

sudo /etc/init.d/ssh restart

Salida del servidor

exit

Conectarse como nuevo usuario

Para facilitar el proceso, vamos a hacer que le servidor nos ‘conozca’ cada vez que nos conectamos a él y no nos pida la contraseña. Es una operación segura ya que solo afectará al equipo desde el que nos estamos conectando. Para ello debemos conocer la IP del servidor y la contraseña que asignamos al usuario ‘web’ unos pasos atrás en este tutorial.ssh-copy-id web@ip_de_nuestro_servidorNos pedirá la clave del usuario web. La ponemos.Si estamos usando MAC OS, debemos agregar antes  en nuestro equipo el siguiente comando: brew install ssh-copy-idAhora podemos acceder a nuestro servidor sin contraseña:ssh web@ip_de_nuestro_servidorYa dentro del servidor nuevamente, generamos par de claves el SSH del usuario ‘web’ para añadir a nuestro repositorio, ejecutando:ssh-keygen -t rsaElige un destino o deja por defecto “/home/web/.ssh/id_rsa“. y no asignes ninguna contraseña, simplemente pulsa EnterSeguimos el resto del tutorial con este usuario web.

Instalar paquetes necesarios

Ejecutamos:

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

Nos pedirá una contraseña para el usuario root de mysql, y se la confirmaremos. Debemos recordarla.

Creación de BD MySQL

Creación de BD MySQLAccedemos a la consola de MySQL, ejecutando:mysql -u root -pIntroducimos la contraseña que generamos anteriormente.Para este tutorial, utilizaremos “database_proof” como base de datos de ejemplo, y la contraseña del root de MySQL será “pass_proof”.Creamos la base de datos y damos privilegios ejecutando:CREATE DATABASE database_proof;GRANT ALL PRIVILEGES ON database_proof.* TO root@localhost IDENTIFIED BY ‘pass_proof’;Importante: Si estás copiando y pegando el código desde este tutorial, las comillas simples debes ponerlas manualmente.FLUSH PRIVILEGES;Salimos con “exit”

Programar copias de seguridad de mySQL

Probablemente usemos mysql como base de datos en el sistema. Es buena práctica hacer una copia de seguridad diariamente de las bases de datos existente para evitar o mitigar desastres que pudieran producirse. Para ello utilizaremos automysqlbackup. Este script se instala automáticamente en el sistema y mantiene copias diarias, semanales y mensuales de todas nuestras bases de datos.

mkdir -p /home/web/apps/bbdd
sudo apt-get install automysqlbackup

La instalación de este paquete exige la instalación de un servidor postfix para el envío de correos con los resultados del backup. De momento podemos dejarlo como ‘No configuration’.

Ya que usamos la carpeta /home/web para almacenar todos nuestros proyectos, parece buena idea dejar allí también las copias de seguridad de las bases de datos. De ese modo, si nuestro proyecto gestiona imágenes, uploads o cualquier otro tipo de archivo que aporten los usuarios de nuestro proyecto, todo los ‘importante’ estará dentro de ‘home/web’. Sacando un backups de ese directorio, tendremos nuestros proyectos a salvo y completos.

sudo vi /etc/default/automysqlbackup

Allí localizaremos la linea: BACKUPDIR=”…….” y lo reemplazaremos por esta: BACKUPDIR=”/home/web/apps/bbdd” y agregamos POSTBACKUP=”chmod -R 644 /home/web/apps/bbdd/”

Probemos y verifiquemos que se van a hacer las copias de seguridad diariamente

sudo automysqlbackup
cd /home/web/apps/bbdd

Allí habrán aparecido unas carpetas (daily / weekly / monthly) que almacenarán las bases de datos. Al menos una copia de la base de datos que creamos anteriormente debería existir en la carpeta daily.

También queda agregada una tarea en cron.daily para que diariamente se hagan las copias de seguridad sin que nosotros tengamos que hacer nada.

Ahora cada día se ejecutará un backup de todas las bases de datos MySQL (actuales y futuras) y quedará almacenado en nuestra carpeta de deploys.

Conexión con repositorio

Agregar la clave SSH en el repositorio git para deploy.

Copiamos el contenido del archivo /home/web/.ssh/id_rsa.pub en el apartado ‘Deployment keys’ en nuestro repositorio de código. Podemos visualizarlo con este comando:

cat /home/web/.ssh/id_rsa.pub

Una vez agregada la deploy key, probamos que el repositorio nos reconozca.

ssh -T git@bitbucket.org

Instalación de RVM

Ya que es probable que en un mismo servidor existan varios proyectos diferentes y puede que éstos proyectos tengan diferentes versiones de ruby, instalaremos rvm para poder gestionar más fácilmente las diferentes versiones de ruby y los diferentes gemsets de cada proyecto.

Instalamos rvm.

curl -L https://get.rvm.io | bash -s stable

La primera vez nos informa que la descarga solo puede hacerse si tenemos agregada la clave GPG. Nos pedirá que ejecutemos un comando similar a este: (Ejecutar el que aparezca en la pantalla, no este de ejemplo)

gpg –keyserver hkp://keys.gnupg.net –recv-keys 409B6B1796C275462xxxxxxxxxxxxxxx

curl -L https://get.rvm.io | bash -s stable

El instalador de rvm nos indica al finalizar que debemos ejecutar esta linea para poder usar rvm inmediatamente:

source /home/web/.rvm/scripts/rvm

Si conocemos la versión de ruby que utiliza nuestro primer proyecto podemos dejarla descargada ya.

rvm install ruby-2.3.1

La gema bundler la necesita el sistema para poder hacer cualquier deploy, la instalamos:

gem install bundler

El sistema ahora está listo para recibir el deploy del proyecto.

En este repositorio está la receta adecuada de Capistrano y las instrucciones para agregarlo a tu proyecto.

Conclusión Ruby on Rails

Como puedes ver este tutorial de Ruby on Rails con ejemplos tener un buen programador de Ruby on Rails en tu proyecto puede marcar la diferencia y ahorrarte mucho dinero de cara al futuro.

Si tu empresa está buscando desarrolladores Ruby on Rails estás de enhorabuena. DIGITAL55 tiene varios expertos en Ruby on Rails que pueden ayudarte con tu proyecto de desarrollo a medida. Puedes contactar con nosotros para pedir presupuesto o solicitar un programador para que trabaje durante unos meses en un proyecto específico.

Digital55

Comparte el post:

¿Hablamos?

Si necesitas desarrollar o mejorar tu negocio digital, cuenta con nosotros. Puedes escribirnos un mail a hello@digital55.com, llamarnos al teléfono 913 091 641 o rellenar el formulario que encontrarás más abajo.