Rails 7 con Ruby 3, MySQL 8 y Redis en Docker Alpine
En el pasado he usado Rails y siempre he admirado su capacidad para aumentar la velocidad de desarrollo de software debido a su flexibilidad, facilidad de uso y factor de diversión. Dado que sé que todavía hay muchos desarrolladores que mantienen diferentes versiones de Rails en el mercado, y ya que quería probar la última versión disponible (2023), decidí crear una guía donde ejecuto Rails sobre Docker sin utilizar ninguna herramienta nativa.
Este artículo proporciona una guía sobre cómo configurar Rails 7 con Ruby 3, MySQL 8 y Redis en Docker Alpine. Incluye una explicación breve del archivo Dockerfile, el archivo de entorno y el archivo Docker compose necesario para la configuración del backend.
¡Presentando…, el archivo Dockerfile!
El archivo Dockerfile es nuestro primer punto de entrada a nuestro backend, uno de los servicios más complicados de mantener. ¿Qué tenemos que hacer?
Dado los tiempos actuales, podrías preguntarle a ChatGPT que es lo que hace el siguiente código, pero si no quieres abrir otra pestaña en tu navegador, quédate aquí. Mejor aún, voy a tratar de simplificar cada paso.
Estoy usando Alpine para construir la aplicación. Necesitaremos instalar algunas dependencias, y esa es la razón detrás del comando apk
. Por supuesto, puedes reemplazar el sistema operativo con Ubuntu o Debian, pero necesitarás también actualizar el paso de instalación de paquetes.
Ya que no tengo creatividad para inventarme un nombre de servicio. Frecuentemente, voy a utilizar potato
(papa, patata) como nombre de aplicación, o como prefijo de nombre de servicios. Puedes cambiar el nombre a tu gusto.
Para el siguiente acto, ¡un archivo .env!
Un archivo de entorno es usado para pasar variables a la aplicación en Rails. Aquí, configuramos nuestro acceso a la base de Datos y, al mismo tiempo, enviamos algunos valores de entorno a la aplicación.
Ten cuidado de no hacer un commit de este archivo, o ignóralo desde Git.
Si quieres tener la misma estructura de este archivo, pero con valores en blanco, deja las llaves y remueve los valores de la derecha, puedes ponerle un nombre como .env.example
.
Por último, pero no menos importante: ¡un archivo Docker compose!
Aquí podemos definir cómo vamos a trabajar con Rails, el contenedor MySQL y Redis. Todos juntos.
Si estás usando los siguientes puertos: Rails 3000
, MySQL 3306
y Redis 6379
, ten la libertad de cambiarlos. Uso los puertos por defecto para mantener una similitud con las herramientas nativas.
Además, dentro del contenedor del app, todo el código está montado dentro del directorio /app
.
Cada vez que inicies el contenedor, ejecutará bundle install
para asegurarse que la aplicación tiene todas las dependencias necesitadas y utilizadas. Después iniciará el servidor de desarrollo en el puerto 3000
, el cual es redirigido hacia el host de Docker, tu computadora.
Últimos detalles
Esos fueron todos los pasos que necesitas para ejecutar tu aplicación desde docker.
Una vez terminado, puedes usar docker compose up -d
.