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.