Cómo implementar aplicaciones web con Kamal en 2024: implementación eficaz de aplicaciones en contenedores

Cómo implementar aplicaciones web con Kamal en 2024: implementación eficaz de aplicaciones en contenedores

Implementar una aplicación web en contenedores a menudo puede parecer desalentador. Kamal es una herramienta diseñada para agilizar y simplificar la implementación de aplicaciones web, haciendo que tu flujo de trabajo sea más eficiente y fiable.

En este artículo aprenderás a implementar aplicaciones web con Kamal en un entorno de servidor privado virtual (VPS). También te proporcionaremos varias buenas prácticas para mejorar el proceso de implementación de tu aplicación.

Al final de esta guía tendrás todo para aprovechar la potencia de Kamal en tus proyectos. Comencemos.

¿Qué es Kamal?

Kamal es una herramienta que facilita la implantación eficaz de aplicaciones web. Integra servicios y operaciones esenciales en un flujo de trabajo cohesionado, haciendo que la implementación de aplicaciones web con Kamal sea más ágil y menos propensa a errores.

Diseñado para gestionar y automatizar, Kamal reduce la complejidad a menudo asociada a la gestión manual de servidores y servicios. Permite a los desarrolladores centrarse en crear y actualizar sus aplicaciones web sin la sobrecarga de la logística.

Kamal admite implantaciones que van desde un servidor local a una única máquina virtual. Ofrece implementaciones sin tiempo de inactividad, reinicios continuos, puenteo de activos, compilaciones remotas y gestión integral de servicios accesorios.

Con Kamal puedes implementar aplicaciones web, configurar servidores, gestionar bases de datos y equilibrar el tráfico sin esfuerzo. Esta herramienta es compatible con varios entornos, lo que la hace versátil para implementar aplicaciones web en distintas plataformas.

¿Por qué utilizar Kamal para el despliegue de aplicaciones web?

Portada de Kamal

Elegir Kamal ofrece varias ventajas a desarrolladores y empresas:

  • Simplicidad. El enfoque directo de Kamal para la implantación elimina la curva de aprendizaje, a menudo pronunciada, asociada a otras herramientas de implantación. Simplifica el proceso, permitiendo la implementación de aplicaciones con solo unos pocos comandos de Linux.
  • Automatización. Agiliza tus flujos de trabajo. Desde las actualizaciones hasta el escalado, Kamal automatiza estas tareas, garantizando que se realicen de forma rápida y coherente. Esto significa menos tiempo en procesos manuales y más en desarrollo.
  • Fiabilidad. Con Kamal puedes esperar versiones estables. Su proceso estructurado minimiza los errores que pueden producirse con la implementación manual, garantizando que tu aplicación web funcione sin problemas y de forma fiable.
  • Idoneidad. Kamal es excepcionalmente compatible con los entornos VPS Linux. Su alineación con los servidores Linux significa que puedes aprovechar todo el potencial y la flexibilidad de implementar aplicaciones en hosting VPS Linux.

Cómo implementar aplicaciones web con Kamal

En esta sección aprenderás a utilizar Kamal para agilizar el proceso de implementación de tu aplicación web.

1. Prepárate para la implementación

Al utilizar una máquina local o un servidor virtual, preparar los requisitos previos garantiza una implementación fluida de la aplicación web con Kamal. En este ejemplo utilizaremos el hosting VPS de Hostinger para configurar tu entorno.

El VPS de Hostinger ofrece un servidor fiable que prepara el escenario para tus necesidades. Proporciona medidas de seguridad de primera categoría, fácil escalabilidad para crecer junto con tu aplicación y un asistente con IA para simplificar tus procesos de desarrollo e implementación.

Tras preparar tu VPS, accede a tu servidor con PuTTY o cualquier otro cliente SSH. Luego, actualiza tus paquetes Linux con los siguientes comandos SSH:

sudo apt-get update && sudo apt-get upgrade

Luego, configura el entorno de software necesario para tu aplicación web, que puede incluir la instalación de un servidor web como Apache o NGINX y la configuración de una base de datos como MySQL o PostgreSQL. También es fundamental asegurar tu servidor con firewall y claves SSH para un acceso seguro.

Si estás desarrollando una aplicación Rails, asegúrate de tener instalado el framework Ruby on Rails. Si no, puedes instalar Docker y gestionar contenedores para tu aplicación.

2. Instala e implementa con Kamal

Una vez que tu entorno esté listo, procede a la instalación de Kamal. Para quienes dispongan de un entorno Ruby, instala Kamal globalmente en tu VPS Linux con el siguiente comando:

gem install kamal

Esto hace que Kamal sea accesible desde cualquier directorio de tu servidor.

Si prefieres la contenedorización en las implantaciones de Kamal, extrae la imagen Docker y establece un alias en tu archivo de configuración del shell. Esto te permitirá utilizar comandos Kamal sin instalar las dependencias en tu servidor.

Luego, navega hasta el directorio config y abre el archivo deploy.yml. Aquí puedes especificar detalles como las etapas de implementación, las direcciones IP públicas y la URL del repositorio para el control de versiones con Kamal.

Tu archivo deploy.yml también incluirá detalles del registro. Si utilizas Docker Hub, no necesitarás especificar un servidor porque es el predeterminado.

He aquí un ejemplo básico de lo que podría incluir el contenido de deploy.yml:

# El nombre de tu aplicación web. Se utiliza para configurar de forma única los contenedores.
service: hey
# El host de tu imagen o el nombre de la imagen del contenedor
image: 37s/hey
servidores:
  - 192.168.0.1
  - 192.168.0.2
registry:
  # El servidor de registro de contenedores, si no utilizas Docker Hub
  server: ghcr.io / ...
  username: registry-user-name
  password:
    secure: KAMAL_REGISTRY_PASSWORD
env:
  secret:
    secure: RAILS_MASTER_KEY
#Configura un chequeo personalizado
healthcheck:
  path: /healthz
  port: 4000
  max_attempts: 7
  interval: 20s

Recuerda mantener tus credenciales seguras sustituyendo KAMAL_REGISTRY_PASSWORD por tu token de acceso al registro de Docker.

Con tu archivo de configuración listo, es hora de iniciar el proceso de implementación. Primero ejecuta:

kamal setup

Esto prepara tus servidores creando directorios, estableciendo permisos y realizando otras tareas necesarias.

Para las implantaciones posteriores, utiliza:

kamal deploy

Este comando ejecuta las tareas descritas en tu archivo deploy.yml, como actualizaciones de código, migraciones y reinicios de servicios.

3. Gestiona los archivos de entorno

Para implementar eficazmente tu aplicación web utilizando Kamal, es vital gestionar meticulosamente tus archivos de entorno. Estos archivos contienen variables de entorno fundamentales para configurar tu aplicación en distintos entornos de desarrollo, pruebas y producción.

Por razones de seguridad, los archivos ENV de tu aplicación nunca deben incluirse en el control de versiones. En su lugar, aprovecha las sólidas funciones de gestión de entornos de Kamal para transferir estos archivos a tu servidor de forma segura.

Empieza por asegurar tu archivo de entorno en una ubicación de almacenamiento segura. Considera la posibilidad de utilizar el VPS de Hostinger para gestionar de forma fiable las variables de entorno de tu aplicación, garantizando que se apliquen de forma segura y se mantengan de coherentemente durante toda la implementación.

Luego, utiliza el comando kamal env push para transferir el archivo a tu servidor de forma segura.

Siempre que añadas nuevas variables de entorno o modifiques las existentes en tu archivo ENV, recuerda enviar estas actualizaciones a tus servidores remotos mediante kamal env push. Antes de ejecutar el comando kamal deploy, completa este paso para asegurarte de que tu proceso de implementación incorpore las variables actualizadas al contenedor de tu aplicación.

Estos procedimientos son fundamentales para hacer funcionar adecuadamente los contenedores Docker y servicios, ya que dependen de los ajustes de configuración correctos proporcionados por las variables de entorno.

4. Ejecuta los comandos en servidores

Para simplificar la gestión de tu aplicación web, Kamal proporciona una función fácil de usar que te permite ejecutar comandos en toda tu infraestructura de servidores de forma eficaz.

Por ejemplo, para ejecutar un comando en todos tus servidores para comprobar la versión de Ruby, utilizarías:

kamal app exec 'ruby -v'

La salida confirmará la versión de Ruby en cada host de la aplicación, por ejemplo:

App Host: 192.168.0.1
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
App Host: 192.168.0.2
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Para apuntar solo al servidor primario, el comando sería:

kamal app exec --primary 'cat .ruby-version'

Si necesitas ejecutar un comando relacionado con Rails en todos los servidores, como comprobar la configuración del entorno Rails, introducirás lo siguiente:

kamal app exec 'bin/rails about'

El resultado debería ser el siguiente:

App Host: 192.168.0.1
About your application's environment
Rails version:             7.1.0.alpha
Ruby version:              ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
RubyGems version:          3.3.26
Rack version:              2.2.5
Middleware:                ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Rails::Rack::Logger, ActionDispatch::ShowExceptions, Action Dispatch::DebugExceptions, Action Dispatch::Callbacks, Action Dispatch::Cookies, Action Dispatch::Session::CookieStore, Action Dispatch::Flash, Action Dispatch::ContentSecurityPolicy::Middleware, Action Dispatch::PermissionsPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper
Application root:          /rails
Environment:               production
Database adapter:          sqlite3
Database schema version:   20221231233303

Para tareas más interactivas, como iniciar una consola Rails o una sesión bash, Kamal simplifica el proceso. Solo tienes que ejecutar los siguientes comandos para iniciar una sesión bash en un nuevo contenedor de imagen de aplicación o en el contenedor Docker que se esté ejecutando en ese momento:

# New container bash session
kamal app exec -i bash
# Reuse the current container for bash session
kamal app exec -i --reuse bash
# New container Rails console
kamal app exec -i 'bin/rails console'

5. Comprueba el estado del servidor con los detalles de Kamal

Conocer el estado de tus servidores es crucial para mantener su salud y garantizar que tus aplicaciones funcionen sin problemas. Kamal proporciona una forma eficaz de controlarlo mediante el comando details.

Ejecutar kamal details te ofrece una snapshot de tus contenedores, su estado y su rendimiento. Esto es lo que verás normalmente:

Para contenedores Traefik:

Traefik Host: 192.168.0.1
CONTAINER ID   IMAGE    COMMAND                 CREATED          STATUS          PORTS
6195b2a28c81   traefik  "/entrypoint.sh…" 30 minutes ago   Up 19 minutes   0.0.0.0:80->80/tcp...

Para tus contenedores de aplicaciones:

App Host: 192.168.0.1
CONTAINER ID   IMAGE                     COMMAND          CREATED         STATUS          PORTS
badb1aa51db3   registry.domain.tld/...  "/rails/bin/…"  13 minutes ago  Up 13 minutes   3000/tcp

Este resultado te permite verificar rápidamente que los contenedores están en funcionamiento y que los puertos están correctamente asignados, lo que indica un estado saludable del servidor.

Para una inspección más centrada, puedes limitar los detalles a contenedores específicos de la aplicación o de Traefik utilizando kamal app details o kamal traefik details, respectivamente.

Estos comandos específicos proporcionan acceso directo a los registros y a los datos específicos de los contenedores, agilizando el proceso de gestión de las configuraciones del entorno y simplificando la gestión de errores en las implementaciones de Kamal.

6. Implementaciones Rollback

Cuando una implementación no sale según lo previsto, Kamal proporciona un sencillo proceso de reversión. Consiste en reactivar un contenedor Docker previamente estable. Para gestionar una reversión rápida y eficaz, sigue estos pasos:

En primer lugar, identifica los contenedores antiguos disponibles utilizando el comando kamal app containers. Esto listará tanto los contenedores activos como los inactivos. Busca el último contenedor activo por su etiqueta de imagen o ID antes de la implementación fallida.

Por ejemplo, puedes ver un resultado que muestre:

App Host: 192.168.0.1
CONTAINER ID   IMAGE               COMMAND                  STATUS
1d3c91ed1f51   [previous_image]    "/rails/bin/docker-e…"   Up 19 minutes
539f26b28369   [failed_image]      "/rails/bin/docker-e…"   Exited (1) 27 minutes ago

Para hacer un rollback, ejecuta kamal rollback [previous_image_tag]. Kamal detendrá el contenedor problemático actual y reiniciará el último contenedor estable. Con el contenedor anterior ya en el host, el rollback se produce rápidamente sin tener que volver a tirar del registro.

Ten en cuenta que los contenedores antiguos se purgan automáticamente a los tres días de una nueva implantación de kamal, por lo que es aconsejable confirmar el éxito de tu implantación dentro de este plazo para conservar la opción de una rápida reversión.

También es esencial que te asegures de que tienes las copias de seguridad y recuperación adecuadas con Kamal para protegerte de problemas imprevistos. El alojamiento VPS de Hostinger incluye copias de seguridad automatizadas, mejorando sin problemas tus capacidades de reversión.

7. Limpia los servidores con Kamal Remove

Gestionar el espacio y el rendimiento del servidor implica eliminar las aplicaciones que no se utilizan. Con Kamal, limpiar tu servidor es muy sencillo. Para eliminar una aplicación entera, ejecuta el comando kamal remove.

Luego, Kamal eliminará todos los componentes asociados a la aplicación en el servidor, lo que incluye detener y eliminar los contenedores Docker, borrar cualquier imagen Docker y borrar cualquier sesión de registro asociada.

Este comando es útil para garantizar que tu servidor se mantenga despejado y funcione de forma óptima. Sin embargo, es esencial utilizar esta función con precaución. Antes de ejecutar kamal remove, asegúrate de que tienes copias de seguridad de los datos que deseas conservar.

8. Reinicia Traefik

Cuando gestionas un equilibrador de carga y un proxy inverso, especialmente en un servidor NGINX, puede haber ocasiones en las que necesites reiniciar Traefik, el servicio que enruta tu tráfico HTTP. Esta necesidad suele surgir tras actualizaciones de los argumentos o etiquetas de Traefik, que requieren un reinicio para que los cambios surtan efecto.

Para reiniciar Traefik utilizando Kamal, utiliza el siguiente comando:

kamal traefik reboot

Esto reiniciará el servicio Traefik, implementando tus nuevas configuraciones. Sin embargo, en un entorno de producción, donde la estabilidad y el tiempo de actividad son críticos, opta por la función de reinicio continuo:

kamal traefik reboot --rolling

Un rolling reboot reinicia metódicamente los contenedores Traefik de forma secuencial, asegurando que no haya tiempo de inactividad y manteniendo la funcionalidad de equilibrio de carga continua. Este enfoque más seguro garantiza que tus aplicaciones web sigan siendo accesibles a los usuarios mientras se realizan las actualizaciones en segundo plano.

Buenas prácticas para implementar aplicaciones web con Kamal

Después de aprender a implementar tu aplicación web en un servidor, vamos a explorar algunas de las mejores prácticas con Kamal para una gestión fluida y eficiente de la aplicación web.

Automatiza tu flujo de trabajo de implementación

Adoptar la automatización Kamal para las implantaciones transforma las tareas manuales repetitivas en una operación de un solo clic. Los comandos y scripts de Kamal te permiten automatizar la configuración inicial, las actualizaciones y el mantenimiento continuo de tus aplicaciones web, haciendo que el proceso de implementación sea más rápido y fiable al reducir los errores humanos.

Integrar las herramientas de automatización en las canalizaciones CI/CD mejora aun más la eficacia. Estas canalizaciones promueven la mejora continua y las actualizaciones sin fisuras, permitiendo un flujo ininterrumpido desde el desarrollo hasta la implementación.

El hosting VPS de Hostinger es ideal para estas prácticas, ya que ofrece un Asistente con IA que agiliza la automatización de scripts para gestionar y escalar tus aplicaciones web sin esfuerzo. Puedes consultar el asistente con IA del VPS de Hostinger para obtener instrucciones sobre cómo automatizar tu flujo de trabajo.

Por ejemplo, inicia una consulta con un prompt como «¿Cómo automatizo las copias de seguridad del servidor de base de datos utilizando Kamal?»

Nuestro asistente con IA te proporcionará una guía completa paso a paso. Puedes hacer preguntas de seguimiento para ampliar cada paso si necesitas más detalles. El asistente con IA del VPS de Hostinger también puede proporcionarte plantillas de código de aplicación para acelerar el proceso de configuración.

Implementa el bloqueo y las operaciones concurrentes seguras

Gestionar las operaciones concurrentes es esencial al implementar aplicaciones web para evitar conflictos y preservar la integridad de tus aplicaciones. Kamal lo facilita con la función de bloqueo de implementación, un mecanismo de coordinación que solo permite una implementación a la vez.

A continuación te explicamos cómo incorporar un bloqueo de implementación a tus estrategias con Kamal:

Antes

Inicia un bloqueo de implementación para impedir que se solapen los procesos utilizando el comando kamal lock acquire -m «Tu motivo para el bloqueo». Esto crea un directorio kamal_lock en el servidor primario, indicando que hay un proceso de implementación en marcha.

Durante

Comprueba el estado del bloqueo con kamal lock status para determinar quién ha iniciado el bloqueo y con qué propósito, así como qué versión se está implementando. Puede que veas un resultado similar a este:

Locked by: A.N. Other on 2023-03-24 09:49:03 UTC
Version: 77f45c0686811c68989d6576748475a60bf53fc2
Message: Automatic deploy lock

Este resultado te ayuda a mantenerte informado sobre las actividades de implementación en curso y garantiza que no se realicen operaciones conflictivas.

Después

Concluye tu implementación liberando el bloqueo con kamal lock release. Esta acción es crucial para despejar el entorno para futuras implantaciones y garantizar operaciones de implantación continuas.

Utiliza ganchos Kamal

Kamal proporciona un sistema de ganchos que permite a los desarrolladores ejecutar secuencias de comandos personalizadas en puntos predefinidos del proceso de implementación, ofreciendo una automatización a medida y garantizando la integridad y fiabilidad. Existen cuatro tipos:

  • Ganchos de preconexión. Se ejecutan antes de que Kamal tome un bloqueo de implementación y antes de conectarse a los hosts remotos. Estos ganchos son útiles para tareas de calentamiento de DNS.
  • Ganchos de precompilación. Se ejecutan antes de que comience el proceso de compilación, lo que permite realizar validaciones previas a la compilación, como comprobar si hay cambios no comprometidos o asegurarse de que se ha superado la integración continua (IC).
  • Ganchos de preimplementación. Se activan justo antes de que comience la implementación, adecuados para comprobaciones finales como verificar la finalización de CI.
  • Ganchos postimplementación. Se activan tras un gancho de implementación, reimplementación o retroceso. Los ganchos postimplementación pueden enviar notificaciones o registrar la nueva versión en un sistema de gestión del rendimiento de las aplicaciones (APM).

Los scripts de estos ganchos tienen acceso a una serie de variables de entorno KAMAL_*, que proporcionan un contexto detallado sobre la implantación, incluyendo marcas de tiempo, información de usuario, detalles de la versión y listas de hosts. Si algún script sale con un estado distinto de cero, se abortará el proceso para evitar que se propaguen posibles errores.

He aquí un ejemplo de creación de un script gancho postimplementación que envía una notificación a un chatbot en Basecamp utilizando las variables KAMAL_*:

#!/usr/bin/env bash
curl -q -d "content=[My App] ${KAMAL_PERFORMER} Rolled back to version ${KAMAL_VERSION}" https://3.basecamp.com/XXXXX/integrations/XXXXX/buckets/XXXXX/chats/XXXXX/lines

Este script publicaría un mensaje indicando quién realizó la reversión y a qué versión.

En situaciones en las que los ganchos no son necesarios, puedes omitirlos utilizando la bandera –skip_hooks durante los comandos de implementación, que impide la ejecución de estos scripts personalizados.

Conclusión

A lo largo de esta guía, has descubierto qué es Kamal, sus ventajas y los pasos para implementar aplicaciones web utilizando Kamal en un VPS Linux. También has aprendido consejos de implementación de Kamal, como la automatización del flujo de trabajo, la seguridad de las operaciones con bloqueos de implementanción y la optimización de los procesos con ganchos Kamal.

Mientras sigues buscando mejoras para tus aplicaciones web, considera la posibilidad de utilizar el hosting VPS de Hostinger. Nuestros planes comienzan en solo 5,49 dólares/mes, cada uno de ellos repleto de un conjunto de características para elevar tu éxito.

Entre ellas se incluyen snapshots en tiempo real gratis, copias de seguridad semanales automáticas y acceso a un Asistente con IA, cada una de ellas diseñada para complementar tu estrategia de implementación e impulsar el rendimiento de tu proyecto.

Aprovecha la fuerza del hosting VPS de Hostinger para tus aplicaciones web impulsadas por Kamal. ¡Libera todo el potencial de tu presencia online haciendo clic en el siguiente banner!

Aprende otras herramientas de implementación y contenedorización

¿Qué es Docker y cómo funciona?

FAQs sobre cómo implementar aplicaciones web con Kamal

Respuestas a las preguntas frecuentes sobre implementar aplicaciones web con Kamal.

¿Cuáles son los requisitos previos para utilizar Kamal?

Antes de implementar con Kamal, asegúrate de que tu máquina tiene instalado Git para el control de versiones, acceso SSH a tu servidor para conexiones seguras y un entorno de aplicación Rails con las dependencias necesarias resueltas. Estos requisitos previos son cruciales para un proceso de implementación de Kamal sin problemas.

¿Puedo implementar diferentes tipos de aplicaciones web con Kamal?

Sí, Kamal puede gestionar distintos tipos de aplicaciones web, además de aplicaciones Rails. Proporciona un sistema de implementación flexible adecuado para varios marcos de aplicaciones web, garantizando que los desarrolladores puedan implementar sus proyectos de forma eficaz independientemente de la tecnología subyacente.

¿Es Kamal adecuado para escalar aplicaciones web?

Kamal es ideal para escalar aplicaciones web, ya que admite la implementación en varios hosts y se integra con un equilibrador de carga, esencial para distribuir el tráfico y garantizar una alta disponibilidad a medida que aumentan tu base de usuarios y tu tráfico.

Author
El autor

Luis Jordán

Luis es un profesional del eCommerce y de los creadores de sitios web que ama el marketing digital. Se dedica a ayudar a las empresas a mejorar su presencia online a través de las prácticas del marketing. Cuando no está sentado frente al computador, seguramente está cocinando algún platillo o entrenando.