• Skip to main content
  • Skip to header right navigation
  • Skip to site footer

Antonio Pérez

Full Stack developer

  • Home
  • Sobre mi
  • Podcast
  • Blog
  • Contacto
desarrollo full stack

Cómo preparar un servidor Ubuntu para desplegar un proyecto de Ruby on Rails con Capistrano.

You are here: Home / Amazon Web Services / Cómo preparar un servidor Ubuntu para desplegar un proyecto de Ruby on Rails con Capistrano.
06/08/2019 by apcano1978

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.

Categoría: Amazon Web Services, Desarrollo Back End, Desarrollo web, hosting web, Ruby on Rails

About apcano1978

Intento nadar entre frameworks, IDEs, SDKs… Algunos lo llaman Full stack developer, yo creo que es solo un eufemismo para decir «el que está en medio de todos los follones» Ruby on Rails y Angular … y bastante tengo …

Previous Post:Post con trucos de códigoUtilizando scopes con Ruby on Rails
Next Post:Como lanzar una instancia EC2 en Amazon Web Services (AWS)Instancia EC2

Reader Interactions

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ahora también en youtube

Ve al canal

Copyright © 2023 · Antonio Pérez · All Rights Reserved · Powered by Mai Theme