{"id":40239,"date":"2024-06-03T02:30:10","date_gmt":"2024-06-03T00:30:10","guid":{"rendered":"\/tutoriales\/?p=40239"},"modified":"2026-03-10T16:33:27","modified_gmt":"2026-03-10T15:33:27","slug":"como-implementar-aplicaciones-web-con-kamal","status":"publish","type":"post","link":"\/ar\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/","title":{"rendered":"C\u00f3mo implementar aplicaciones web con Kamal en 2026: implementaci\u00f3n eficaz de aplicaciones en contenedores"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Implementar una aplicaci&oacute;n web en contenedores a menudo puede parecer desalentador. Kamal es una herramienta dise&ntilde;ada para agilizar y simplificar la implementaci&oacute;n de aplicaciones web, haciendo que tu flujo de trabajo sea m&aacute;s eficiente y fiable.<\/p><p class=\"wp-block-paragraph\">En este art&iacute;culo aprender&aacute;s a implementar aplicaciones web con Kamal en un entorno de <strong>servidor privado virtual<\/strong> (VPS). Tambi&eacute;n te proporcionaremos varias buenas pr&aacute;cticas para mejorar el proceso de implementaci&oacute;n de tu aplicaci&oacute;n.<\/p><p class=\"wp-block-paragraph\">Al final de esta gu&iacute;a tendr&aacute;s todo para aprovechar la potencia de Kamal en tus proyectos. Comencemos.<\/p><p class=\"wp-block-paragraph\"><\/p><p class=\"wp-block-paragraph\">        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    &iquest;Qu&eacute; es Kamal?                <\/p>\n            <\/div>\n            <p class=\"protip__content\"> Kamal es una herramienta que facilita la implantaci&oacute;n eficaz de aplicaciones web. Integra servicios y operaciones esenciales en un flujo de trabajo cohesionado, haciendo que la implementaci&oacute;n de aplicaciones web con Kamal sea m&aacute;s &aacute;gil y menos propensa a errores. <\/p>\n                    <\/div>\n        <\/p><p class=\"wp-block-paragraph\">Dise&ntilde;ado para gestionar y automatizar, Kamal reduce la complejidad a menudo asociada a la gesti&oacute;n manual de servidores y servicios. Permite a los desarrolladores centrarse en crear y actualizar sus aplicaciones web sin la sobrecarga de la log&iacute;stica.<\/p><p class=\"wp-block-paragraph\">Kamal admite implantaciones que van desde un servidor local a una &uacute;nica m&aacute;quina virtual. Ofrece implementaciones sin tiempo de inactividad, reinicios continuos, puenteo de activos, compilaciones remotas y gesti&oacute;n integral de servicios accesorios.<\/p><p class=\"wp-block-paragraph\">Con Kamal puedes implementar aplicaciones web, configurar servidores, gestionar bases de datos y equilibrar el tr&aacute;fico sin esfuerzo. Esta herramienta es compatible con varios entornos, lo que la hace vers&aacute;til para implementar aplicaciones web en distintas plataformas.<\/p><h3 class=\"wp-block-heading\" id=\"h-por-que-utilizar-kamal-para-el-despliegue-de-aplicaciones-web\">&iquest;Por qu&eacute; utilizar Kamal para el despliegue de aplicaciones web?<\/h3><figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1024\" height=\"476\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2024\/06\/image.png\/public\" alt=\"Portada de Kamal\" class=\"wp-image-40256\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2024\/06\/image.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2024\/06\/image.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2024\/06\/image.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2024\/06\/image.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p class=\"wp-block-paragraph\">Elegir Kamal ofrece varias ventajas a desarrolladores y empresas:<\/p><ul class=\"wp-block-list\">\n<li><strong>Simplicidad<\/strong>. El enfoque directo de Kamal para la implantaci&oacute;n elimina la curva de aprendizaje, a menudo pronunciada, asociada a otras herramientas de implantaci&oacute;n. Simplifica el proceso, permitiendo la implementaci&oacute;n de aplicaciones con solo unos pocos <a href=\"\/ar\/tutoriales\/linux-comandos\/\">comandos de Linux<\/a>.<\/li>\n\n\n\n<li><strong>Automatizaci&oacute;n<\/strong>. Agiliza tus flujos de trabajo. Desde las actualizaciones hasta el escalado, Kamal automatiza estas tareas, garantizando que se realicen de forma r&aacute;pida y coherente. Esto significa menos tiempo en procesos manuales y m&aacute;s en desarrollo.<\/li>\n\n\n\n<li><strong>Fiabilidad<\/strong>. Con Kamal puedes esperar versiones estables. Su proceso estructurado minimiza los errores que pueden producirse con la implementaci&oacute;n manual, garantizando que tu aplicaci&oacute;n web funcione sin problemas y de forma fiable.<\/li>\n\n\n\n<li><strong>Idoneidad<\/strong>. Kamal es excepcionalmente compatible con los entornos VPS Linux. Su alineaci&oacute;n con los servidores Linux significa que puedes aprovechar todo el potencial y la flexibilidad de implementar aplicaciones en hosting VPS Linux.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-como-implementar-aplicaciones-web-con-kamal\">C&oacute;mo implementar aplicaciones web con Kamal<\/h2><p class=\"wp-block-paragraph\">En esta secci&oacute;n aprender&aacute;s a utilizar Kamal para agilizar el proceso de implementaci&oacute;n de tu aplicaci&oacute;n web.<\/p><h3 class=\"wp-block-heading\" id=\"h-1-preparate-para-la-implementacion\">1. Prep&aacute;rate para la implementaci&oacute;n<\/h3><p class=\"wp-block-paragraph\">Al utilizar una m&aacute;quina local o un servidor virtual, preparar los requisitos previos garantiza una implementaci&oacute;n fluida de la aplicaci&oacute;n web con Kamal. En este ejemplo utilizaremos el <a href=\"\/ar\/servidor-vps\">hosting VPS<\/a> de Hostinger para configurar tu entorno.<\/p><p class=\"wp-block-paragraph\">El VPS de Hostinger ofrece un servidor fiable que prepara el escenario para tus necesidades. Proporciona medidas de seguridad de primera categor&iacute;a, f&aacute;cil escalabilidad para crecer junto con tu aplicaci&oacute;n y <strong>Kodee<\/strong>, un asistente con IA, para simplificar tus procesos de desarrollo e implementaci&oacute;n.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/ar\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-29287\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p class=\"wp-block-paragraph\">Tras preparar tu VPS, <a href=\"\/ar\/tutoriales\/conectar-usando-terminal-putty-ssh\/\">accede a tu servidor con PuTTY<\/a> o cualquier otro cliente SSH. Luego, actualiza tus paquetes Linux con los siguientes comandos SSH:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt-get update &amp;&amp; sudo apt-get upgrade<\/pre><p class=\"wp-block-paragraph\">Luego, configura el entorno de software necesario para tu aplicaci&oacute;n web, que puede incluir la instalaci&oacute;n de un servidor web como Apache o NGINX y la configuraci&oacute;n de una base de datos como MySQL o PostgreSQL. Tambi&eacute;n es fundamental asegurar tu servidor con firewall y claves SSH para un acceso seguro.<\/p><p class=\"wp-block-paragraph\">Si est&aacute;s desarrollando una aplicaci&oacute;n Rails, aseg&uacute;rate de tener <a href=\"\/ar\/tutoriales\/instalar-ruby-on-rails-en-ubuntu\/\">instalado el framework Ruby on Rails<\/a>. Si no, puedes <a href=\"\/ar\/tutoriales\/como-instalar-y-usar-docker-en-ubuntu\/\">instalar Docker<\/a> y gestionar contenedores para tu aplicaci&oacute;n.<\/p><h3 class=\"wp-block-heading\" id=\"h-2-instala-e-implementa-con-kamal\">2. Instala e implementa con Kamal<\/h3><p class=\"wp-block-paragraph\">Una vez que tu entorno est&eacute; listo, procede a la instalaci&oacute;n de Kamal. Para quienes dispongan de un entorno Ruby, instala Kamal globalmente en tu VPS Linux con el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">gem install kamal<\/pre><p class=\"wp-block-paragraph\">Esto hace que Kamal sea accesible desde cualquier directorio de tu servidor.<\/p><p class=\"wp-block-paragraph\">Si prefieres la contenedorizaci&oacute;n en las implantaciones de Kamal, extrae la imagen Docker y establece un alias en tu archivo de configuraci&oacute;n del shell. Esto te permitir&aacute; utilizar comandos Kamal sin instalar las dependencias en tu servidor.<\/p><p class=\"wp-block-paragraph\">Luego, navega hasta el directorio <strong>config <\/strong>y abre el archivo <strong>deploy.yml<\/strong>. Aqu&iacute; puedes especificar detalles como las etapas de implementaci&oacute;n, las direcciones IP p&uacute;blicas y la URL del repositorio para el control de versiones con Kamal.<\/p><p class=\"wp-block-paragraph\">Tu archivo <strong>deploy.yml <\/strong>tambi&eacute;n incluir&aacute; detalles del registro. Si utilizas Docker Hub, no necesitar&aacute;s especificar un servidor porque es el predeterminado.<\/p><p class=\"wp-block-paragraph\">He aqu&iacute; un ejemplo b&aacute;sico de lo que podr&iacute;a incluir el contenido de <strong>deploy.yml<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># El nombre de tu aplicaci&oacute;n web. Se utiliza para configurar de forma &uacute;nica los contenedores.\nservice: hey\n# El host de tu imagen o el nombre de la imagen del contenedor\nimage: 37s\/hey\nservidores:\n&nbsp;&nbsp;- 192.168.0.1\n&nbsp;&nbsp;- 192.168.0.2\nregistry:\n&nbsp;&nbsp;# El servidor de registro de contenedores, si no utilizas Docker Hub\n&nbsp;&nbsp;server: ghcr.io \/ ...\n  username: registry-user-name\n  password:\n    secure: KAMAL_REGISTRY_PASSWORD\nenv:\n  secret:\n    secure: RAILS_MASTER_KEY\n#Configura un chequeo personalizado\nhealthcheck:\n  path: \/healthz\n  port: 4000\n  max_attempts: 7\n  interval: 20s<\/pre><p class=\"wp-block-paragraph\"><\/p><p class=\"wp-block-paragraph\">Recuerda mantener tus credenciales seguras sustituyendo <strong>KAMAL_REGISTRY_PASSWORD <\/strong>por tu token de acceso al registro de Docker.<\/p><p class=\"wp-block-paragraph\">Con tu archivo de configuraci&oacute;n listo, es hora de iniciar el proceso de implementaci&oacute;n. Primero ejecuta:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal setup<\/pre><p class=\"wp-block-paragraph\">Esto prepara tus servidores creando directorios, estableciendo permisos y realizando otras tareas necesarias.<\/p><p class=\"wp-block-paragraph\">Para las implantaciones posteriores, utiliza:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal deploy<\/pre><p class=\"wp-block-paragraph\">Este comando ejecuta las tareas descritas en tu archivo <strong>deploy.yml<\/strong>, como actualizaciones de c&oacute;digo, migraciones y reinicios de servicios.<\/p><h3 class=\"wp-block-heading\" id=\"h-3-gestiona-los-archivos-de-entorno\">3. Gestiona los archivos de entorno<\/h3><p class=\"wp-block-paragraph\">Para implementar eficazmente tu aplicaci&oacute;n web utilizando Kamal, es vital gestionar meticulosamente tus archivos de entorno. Estos archivos contienen variables de entorno fundamentales para configurar tu aplicaci&oacute;n en distintos entornos de desarrollo, pruebas y producci&oacute;n.<\/p><p class=\"wp-block-paragraph\">Por razones de seguridad, los archivos <strong>ENV <\/strong>de tu aplicaci&oacute;n nunca deben incluirse en el control de versiones. En su lugar, aprovecha las s&oacute;lidas funciones de gesti&oacute;n de entornos de Kamal para transferir estos archivos a tu servidor de forma segura.<\/p><p class=\"wp-block-paragraph\">Empieza por asegurar tu archivo de entorno en una ubicaci&oacute;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&oacute;n, garantizando que se apliquen de forma segura y se mantengan de coherentemente durante toda la implementaci&oacute;n.<\/p><p class=\"wp-block-paragraph\">Luego, utiliza el comando <strong>kamal env push <\/strong>para transferir el archivo a tu servidor de forma segura.<\/p><p class=\"wp-block-paragraph\">Siempre que a&ntilde;adas nuevas variables de entorno o modifiques las existentes en tu archivo <strong>ENV<\/strong>, recuerda enviar estas actualizaciones a tus servidores remotos mediante <strong>kamal env push<\/strong>. Antes de ejecutar el comando <strong>kamal deploy<\/strong>, completa este paso para asegurarte de que tu proceso de implementaci&oacute;n incorpore las variables actualizadas al contenedor de tu aplicaci&oacute;n.<\/p><p class=\"wp-block-paragraph\">Estos procedimientos son fundamentales para hacer funcionar adecuadamente <a href=\"\/ar\/tutoriales\/como-crear-contenedor-docker\/\">los contenedores Docker<\/a> y servicios, ya que dependen de los ajustes de configuraci&oacute;n correctos proporcionados por las variables de entorno.<\/p><h3 class=\"wp-block-heading\" id=\"h-4-ejecuta-los-comandos-en-servidores\">4. Ejecuta los comandos en servidores<\/h3><p class=\"wp-block-paragraph\">Para simplificar la gesti&oacute;n de tu aplicaci&oacute;n web, Kamal proporciona una funci&oacute;n f&aacute;cil de usar que te permite ejecutar comandos en toda tu infraestructura de servidores de forma eficaz.<\/p><p class=\"wp-block-paragraph\">Por ejemplo, para ejecutar un comando en todos tus servidores para comprobar la versi&oacute;n de Ruby, utilizar&iacute;as:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal app exec 'ruby -v'<\/pre><p class=\"wp-block-paragraph\">La salida confirmar&aacute; la versi&oacute;n de Ruby en cada host de la aplicaci&oacute;n, por ejemplo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">App Host: 192.168.0.1\nruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]\nApp Host: 192.168.0.2\nruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]<\/pre><p class=\"wp-block-paragraph\">Para apuntar solo al servidor primario, el comando ser&iacute;a:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal app exec --primary 'cat .ruby-version'<\/pre><p class=\"wp-block-paragraph\">Si necesitas ejecutar un comando relacionado con Rails en todos los servidores, como comprobar la configuraci&oacute;n del entorno Rails, introducir&aacute;s lo siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal app exec 'bin\/rails about'<\/pre><p class=\"wp-block-paragraph\">El resultado deber&iacute;a ser el siguiente:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">App Host: 192.168.0.1\nAbout your application's environment\nRails version:             7.1.0.alpha\nRuby version:              ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]\nRubyGems version:          3.3.26\nRack version:              2.2.5\nMiddleware:                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\nApplication root:          \/rails\nEnvironment:               production\nDatabase adapter:          sqlite3\nDatabase schema version:   20221231233303<\/pre><p class=\"wp-block-paragraph\">Para tareas m&aacute;s interactivas, como iniciar una consola Rails o una sesi&oacute;n bash, Kamal simplifica el proceso. Solo tienes que ejecutar los siguientes comandos para iniciar una sesi&oacute;n bash en un nuevo contenedor de imagen de aplicaci&oacute;n o en el contenedor Docker que se est&eacute; ejecutando en ese momento:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># New container bash session\nkamal app exec -i bash\n# Reuse the current container for bash session\nkamal app exec -i --reuse bash\n# New container Rails console\nkamal app exec -i 'bin\/rails console'<\/pre><h3 class=\"wp-block-heading\" id=\"h-5-comprueba-el-estado-del-servidor-con-los-detalles-de-kamal\">5. Comprueba el estado del servidor con los detalles de Kamal<\/h3><p class=\"wp-block-paragraph\">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 <strong>details<\/strong>.<\/p><p class=\"wp-block-paragraph\">Ejecutar <strong>kamal details <\/strong>te ofrece una snapshot de tus contenedores, su estado y su rendimiento. Esto es lo que ver&aacute;s normalmente:<\/p><p class=\"wp-block-paragraph\">Para contenedores Traefik:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Traefik Host: 192.168.0.1\nCONTAINER ID   IMAGE    COMMAND                 CREATED          STATUS          PORTS\n6195b2a28c81   traefik  \"\/entrypoint.sh&hellip;\" 30 minutes ago   Up 19 minutes   0.0.0.0:80-&gt;80\/tcp...<\/pre><p class=\"wp-block-paragraph\">Para tus contenedores de aplicaciones:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">App Host: 192.168.0.1\nCONTAINER ID   IMAGE                     COMMAND          CREATED         STATUS          PORTS\nbadb1aa51db3   registry.domain.tld\/...  \"\/rails\/bin\/&hellip;\"  13 minutes ago  Up 13 minutes   3000\/tcp<\/pre><p class=\"wp-block-paragraph\">Este resultado te permite verificar r&aacute;pidamente que los contenedores est&aacute;n en funcionamiento y que los puertos est&aacute;n correctamente asignados, lo que indica un estado saludable del servidor.<\/p><p class=\"wp-block-paragraph\">Para una inspecci&oacute;n m&aacute;s centrada, puedes limitar los detalles a contenedores espec&iacute;ficos de la aplicaci&oacute;n o de <strong>Traefik<\/strong> utilizando <strong>kamal app details <\/strong>o <strong>kamal traefik details<\/strong>, respectivamente.<\/p><p class=\"wp-block-paragraph\">Estos comandos espec&iacute;ficos proporcionan acceso directo a los registros y a los datos espec&iacute;ficos de los contenedores, agilizando el proceso de gesti&oacute;n de las configuraciones del entorno y simplificando la gesti&oacute;n de errores en las implementaciones de Kamal.<\/p><h3 class=\"wp-block-heading\" id=\"h-6-implementaciones-rollback\">6. Implementaciones Rollback<\/h3><p class=\"wp-block-paragraph\">Cuando una implementaci&oacute;n no sale seg&uacute;n lo previsto, Kamal proporciona un sencillo proceso de reversi&oacute;n. Consiste en reactivar un contenedor Docker previamente estable. Para gestionar una reversi&oacute;n r&aacute;pida y eficaz, sigue estos pasos:<\/p><p class=\"wp-block-paragraph\">En primer lugar, identifica los contenedores antiguos disponibles utilizando el comando <strong>kamal app containers<\/strong>. Esto listar&aacute; tanto los contenedores activos como los inactivos. Busca el &uacute;ltimo contenedor activo por su etiqueta de imagen o ID antes de la implementaci&oacute;n fallida.<\/p><p class=\"wp-block-paragraph\">Por ejemplo, puedes ver un resultado que muestre:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">App Host: 192.168.0.1\nCONTAINER ID   IMAGE               COMMAND                  STATUS\n1d3c91ed1f51   [previous_image]    \"\/rails\/bin\/docker-e&hellip;\"   Up 19 minutes\n539f26b28369   [failed_image]      \"\/rails\/bin\/docker-e&hellip;\"   Exited (1) 27 minutes ago<\/pre><p class=\"wp-block-paragraph\">Para hacer un rollback, ejecuta <strong>kamal<\/strong> <strong>rollback [previous_image_tag]<\/strong>. Kamal detendr&aacute; el contenedor problem&aacute;tico actual y reiniciar&aacute; el &uacute;ltimo contenedor estable. Con el contenedor anterior ya en el host, el rollback se produce r&aacute;pidamente sin tener que volver a tirar del registro.<\/p><p class=\"wp-block-paragraph\">Ten en cuenta que los contenedores antiguos se purgan autom&aacute;ticamente a los tres d&iacute;as de una nueva <strong>implantaci&oacute;n de kamal<\/strong>, por lo que es aconsejable confirmar el &eacute;xito de tu implantaci&oacute;n dentro de este plazo para conservar la opci&oacute;n de una r&aacute;pida reversi&oacute;n.<\/p><p class=\"wp-block-paragraph\">Tambi&eacute;n es esencial que te asegures de que tienes las copias de seguridad y recuperaci&oacute;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&oacute;n.<\/p><h3 class=\"wp-block-heading\" id=\"h-7-limpia-los-servidores-con-kamal-remove\">7. Limpia los servidores con Kamal Remove<\/h3><p class=\"wp-block-paragraph\">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&oacute;n entera, ejecuta el comando <strong>kamal remove<\/strong>.<\/p><p class=\"wp-block-paragraph\">Luego, Kamal eliminar&aacute; todos los componentes asociados a la aplicaci&oacute;n en el servidor, lo que incluye detener y eliminar los contenedores Docker, borrar cualquier imagen Docker y borrar cualquier sesi&oacute;n de registro asociada.<\/p><p class=\"wp-block-paragraph\">Este comando es &uacute;til para garantizar que tu servidor se mantenga despejado y funcione de forma &oacute;ptima. Sin embargo, es esencial utilizar esta funci&oacute;n con precauci&oacute;n. Antes de ejecutar <strong>kamal remove<\/strong>, aseg&uacute;rate de que tienes copias de seguridad de los datos que deseas conservar.<\/p><h3 class=\"wp-block-heading\" id=\"h-8-reinicia-traefik\">8. Reinicia Traefik<\/h3><p class=\"wp-block-paragraph\">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&aacute;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.<\/p><p class=\"wp-block-paragraph\">Para reiniciar Traefik utilizando Kamal, utiliza el siguiente comando:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal traefik reboot<\/pre><p class=\"wp-block-paragraph\">Esto reiniciar&aacute; el servicio Traefik, implementando tus nuevas configuraciones. Sin embargo, en un entorno de producci&oacute;n, donde la estabilidad y el tiempo de actividad son cr&iacute;ticos, opta por la funci&oacute;n de reinicio continuo:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">kamal traefik reboot --rolling<\/pre><p class=\"wp-block-paragraph\">Un rolling reboot reinicia met&oacute;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&aacute;s seguro garantiza que tus aplicaciones web sigan siendo accesibles a los usuarios mientras se realizan las actualizaciones en segundo plano.<\/p><h2 class=\"wp-block-heading\" id=\"h-buenas-practicas-para-implementar-aplicaciones-web-con-kamal\">Buenas pr&aacute;cticas para implementar aplicaciones web con Kamal<\/h2><p class=\"wp-block-paragraph\">Despu&eacute;s de aprender a implementar tu aplicaci&oacute;n web en un servidor, vamos a explorar algunas de las mejores pr&aacute;cticas con Kamal para una gesti&oacute;n fluida y eficiente de la aplicaci&oacute;n web.<\/p><h3 class=\"wp-block-heading\" id=\"h-automatiza-tu-flujo-de-trabajo-de-implementacion\">Automatiza tu flujo de trabajo de implementaci&oacute;n<\/h3><p class=\"wp-block-paragraph\">Adoptar la automatizaci&oacute;n Kamal para las implantaciones transforma las tareas manuales repetitivas en una operaci&oacute;n de un solo clic. Los comandos y scripts de Kamal te permiten automatizar la configuraci&oacute;n inicial, las actualizaciones y el mantenimiento continuo de tus aplicaciones web, haciendo que el proceso de implementaci&oacute;n sea m&aacute;s r&aacute;pido y fiable al reducir los errores humanos.<\/p><p class=\"wp-block-paragraph\">Integrar las herramientas de automatizaci&oacute;n en las canalizaciones CI\/CD mejora aun m&aacute;s la eficacia. Estas canalizaciones promueven la mejora continua y las actualizaciones sin fisuras, permitiendo un flujo ininterrumpido desde el desarrollo hasta la implementaci&oacute;n.<\/p><p class=\"wp-block-paragraph\">El hosting VPS de Hostinger es ideal para estas pr&aacute;cticas, ya que ofrece un Asistente con IA llamado <strong>Kodee<\/strong> que agiliza la automatizaci&oacute;n de scripts para gestionar y escalar tus aplicaciones web sin esfuerzo. <\/p><p class=\"wp-block-paragraph\">Puedes hacerle consultas a Kodee para obtener instrucciones sobre c&oacute;mo automatizar tu flujo de trabajo.<\/p><p class=\"wp-block-paragraph\">Por ejemplo, inicia una consulta con un prompt como &ldquo;&iquest;C&oacute;mo automatizo las copias de seguridad del servidor de base de datos utilizando Kamal?&rdquo;<\/p><p class=\"wp-block-paragraph\">Kodee te proporcionar&aacute; una gu&iacute;a completa paso a paso. Puedes hacer preguntas de seguimiento para ampliar cada paso si necesitas m&aacute;s detalles. El asistente con IA del VPS de Hostinger tambi&eacute;n puede proporcionarte plantillas de c&oacute;digo de aplicaci&oacute;n para acelerar el proceso de configuraci&oacute;n.<\/p><figure class=\"wp-block-image size-large\"><a href=\"\/ar\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,h=1024,fit=scale-down\" alt=\"\" class=\"wp-image-29287\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/38\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h3 class=\"wp-block-heading\" id=\"h-implementa-el-bloqueo-y-las-operaciones-concurrentes-seguras\">Implementa el bloqueo y las operaciones concurrentes seguras<\/h3><p class=\"wp-block-paragraph\">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&oacute;n de bloqueo de implementaci&oacute;n, un mecanismo de coordinaci&oacute;n que solo permite una implementaci&oacute;n a la vez.<\/p><p class=\"wp-block-paragraph\">A continuaci&oacute;n te explicamos c&oacute;mo incorporar un bloqueo de implementaci&oacute;n a tus estrategias con Kamal:<\/p><p class=\"wp-block-paragraph\"><strong>Antes<\/strong><\/p><p class=\"wp-block-paragraph\">Inicia un bloqueo de implementaci&oacute;n para impedir que se solapen los procesos utilizando el comando kamal <strong>lock acquire -m &ldquo;Tu motivo para el bloqueo&rdquo;<\/strong>. Esto crea un directorio <strong>kamal_lock <\/strong>en el servidor primario, indicando que hay un proceso de implementaci&oacute;n en marcha.<\/p><p class=\"wp-block-paragraph\"><strong>Durante<\/strong><\/p><p class=\"wp-block-paragraph\">Comprueba el estado del bloqueo con <strong>kamal lock status <\/strong>para determinar qui&eacute;n ha iniciado el bloqueo y con qu&eacute; prop&oacute;sito, as&iacute; como qu&eacute; versi&oacute;n se est&aacute; implementando. Puede que veas un resultado similar a este:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Locked by: A.N. Other on 2023-03-24 09:49:03 UTC\nVersion: 77f45c0686811c68989d6576748475a60bf53fc2\nMessage: Automatic deploy lock<\/pre><p class=\"wp-block-paragraph\">Este resultado te ayuda a mantenerte informado sobre las actividades de implementaci&oacute;n en curso y garantiza que no se realicen operaciones conflictivas.<\/p><p class=\"wp-block-paragraph\"><strong>Despu&eacute;s<\/strong><\/p><p class=\"wp-block-paragraph\">Concluye tu implementaci&oacute;n liberando el bloqueo con <strong>kamal lock release<\/strong>. Esta acci&oacute;n es crucial para despejar el entorno para futuras implantaciones y garantizar operaciones de implantaci&oacute;n continuas.<\/p><h3 class=\"wp-block-heading\" id=\"h-utiliza-ganchos-kamal\">Utiliza ganchos Kamal<\/h3><p class=\"wp-block-paragraph\">Kamal proporciona un sistema de ganchos que permite a los desarrolladores ejecutar secuencias de comandos personalizadas en puntos predefinidos del proceso de implementaci&oacute;n, ofreciendo una automatizaci&oacute;n a medida y garantizando la integridad y fiabilidad. Existen cuatro tipos:<\/p><ul class=\"wp-block-list\">\n<li><strong>Ganchos de preconexi&oacute;n<\/strong>. Se ejecutan antes de que Kamal tome un bloqueo de implementaci&oacute;n y antes de conectarse a los hosts remotos. Estos ganchos son &uacute;tiles para tareas de calentamiento de DNS.<\/li>\n\n\n\n<li><strong>Ganchos de precompilaci&oacute;n<\/strong>. Se ejecutan antes de que comience el proceso de compilaci&oacute;n, lo que permite realizar validaciones previas a la compilaci&oacute;n, como comprobar si hay cambios no comprometidos o asegurarse de que se ha superado la integraci&oacute;n continua (IC).<\/li>\n\n\n\n<li><strong>Ganchos de preimplementaci&oacute;n<\/strong>. Se activan justo antes de que comience la implementaci&oacute;n, adecuados para comprobaciones finales como verificar la finalizaci&oacute;n de CI.<\/li>\n\n\n\n<li><strong>Ganchos postimplementaci&oacute;n<\/strong>. Se activan tras un gancho de implementaci&oacute;n, reimplementaci&oacute;n o retroceso. Los ganchos postimplementaci&oacute;n pueden enviar notificaciones o registrar la nueva versi&oacute;n en un sistema de gesti&oacute;n del rendimiento de las aplicaciones (APM).<\/li>\n<\/ul><p class=\"wp-block-paragraph\">Los scripts de estos ganchos tienen acceso a una serie de variables de entorno <strong>KAMAL_*<\/strong>, que proporcionan un contexto detallado sobre la implantaci&oacute;n, incluyendo marcas de tiempo, informaci&oacute;n de usuario, detalles de la versi&oacute;n y listas de hosts. Si alg&uacute;n script sale con un estado distinto de cero, se abortar&aacute; el proceso para evitar que se propaguen posibles errores.<\/p><p class=\"wp-block-paragraph\">He aqu&iacute; un ejemplo de creaci&oacute;n de un script gancho postimplementaci&oacute;n que env&iacute;a una notificaci&oacute;n a un chatbot en Basecamp utilizando las variables <strong>KAMAL_*<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/usr\/bin\/env bash\ncurl -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<\/pre><p class=\"wp-block-paragraph\">Este script publicar&iacute;a un mensaje indicando qui&eacute;n realiz&oacute; la reversi&oacute;n y a qu&eacute; versi&oacute;n.<\/p><p class=\"wp-block-paragraph\">En situaciones en las que los ganchos no son necesarios, puedes omitirlos utilizando la bandera <strong><strong>&ndash;skip_hooks<\/strong> <\/strong>durante los comandos de implementaci&oacute;n, que impide la ejecuci&oacute;n de estos scripts personalizados.<\/p><h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi&oacute;n<\/h2><p class=\"wp-block-paragraph\">A lo largo de esta gu&iacute;a, has descubierto qu&eacute; es Kamal, sus ventajas y los pasos para implementar aplicaciones web utilizando Kamal en un VPS Linux. Tambi&eacute;n has aprendido consejos de implementaci&oacute;n de Kamal, como la automatizaci&oacute;n del flujo de trabajo, la seguridad de las operaciones con bloqueos de implementanci&oacute;n y la optimizaci&oacute;n de los procesos con ganchos Kamal.<\/p><p class=\"wp-block-paragraph\">Mientras sigues buscando mejoras para tus aplicaciones web, considera la posibilidad de utilizar el hosting VPS de Hostinger. Nuestros planes comienzan en solo <strong>5,49 d&oacute;lares\/mes<\/strong>, cada uno de ellos repleto de un conjunto de caracter&iacute;sticas para elevar tu &eacute;xito.<\/p><p class=\"wp-block-paragraph\">Entre ellas se incluyen snapshots en tiempo real gratis, copias de seguridad semanales autom&aacute;ticas y acceso a Kodee, cada una de ellas dise&ntilde;ada para complementar tu estrategia de implementaci&oacute;n e impulsar el rendimiento de tu proyecto.<\/p><p class=\"wp-block-paragraph\">Aprovecha la fuerza del hosting VPS de Hostinger para tus aplicaciones web impulsadas por Kamal. &iexcl;Libera todo el potencial de tu presencia online haciendo clic en el siguiente banner!<\/p><p class=\"wp-block-paragraph\">&nbsp;        <div class=\"protip\">\n            <div class=\"protip__heading\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                    <path d=\"M1.49234 23.5024C1.23229 23.5024 0.972242 23.4024 0.782206 23.2123C0.562165 22.9923 0.452144 22.6822 0.502153 22.3722C0.562165 21.9221 1.14227 17.9113 3.00262 16.351C3.63274 15.8209 4.43289 15.5509 5.26305 15.5609C6.09321 15.5909 6.87335 15.9109 7.47347 16.4911C8.6937 17.6913 8.76371 19.6717 7.6435 20.9919C6.0832 22.8523 2.08245 23.4324 1.63237 23.4924C1.59236 23.4924 1.54235 23.4924 1.50234 23.4924L1.49234 23.5024ZM5.16303 17.5613C4.84297 17.5613 4.53291 17.6713 4.29287 17.8813C3.60274 18.4614 3.07264 19.9317 2.75258 21.242C4.06282 20.9219 5.5331 20.3918 6.11321 19.7017C6.55329 19.1716 6.54329 18.3814 6.0832 17.9213C5.85316 17.7013 5.5431 17.5713 5.20304 17.5613C5.19304 17.5613 5.17303 17.5613 5.16303 17.5613ZM11.7243 21.8821C11.4942 21.8821 11.2642 21.8021 11.0841 21.652C10.8541 21.462 10.7241 21.1819 10.7241 20.8819V15.9109L8.08358 13.2705H3.11264C2.81259 13.2705 2.53254 13.1404 2.3425 12.9104C2.15246 12.6803 2.07245 12.3803 2.12246 12.0902C2.19247 11.7102 2.84259 8.36953 4.70294 7.12929C6.33325 6.04909 8.96375 6.49918 10.244 6.80923C11.5442 4.96889 13.2546 3.4286 15.2349 2.33839C17.4553 1.11816 19.9858 0.518051 22.4963 0.498047C23.0464 0.498047 23.4865 0.948132 23.4865 1.49824C23.4865 5.0389 22.3763 9.97983 17.1753 13.7605C17.4853 15.0408 17.9354 17.6613 16.8552 19.2816C15.615 21.1419 12.2744 21.7921 11.8943 21.8621C11.8343 21.8721 11.7743 21.8821 11.7143 21.8821H11.7243ZM12.7245 16.181V19.6016C13.7146 19.2916 14.7948 18.7915 15.2049 18.1814C15.675 17.4812 15.605 16.091 15.385 14.9008C14.5248 15.3808 13.6346 15.8109 12.7245 16.181ZM9.66388 12.0302L11.9643 14.3307C13.1845 13.8306 14.3648 13.2204 15.485 12.5103C19.9358 9.51974 21.2361 5.60901 21.4561 2.53843C19.6157 2.67846 17.8254 3.20856 16.2051 4.09872C14.2847 5.14892 12.6544 6.68921 11.4942 8.54956C10.7841 9.65977 10.174 10.82 9.66388 12.0302ZM4.39289 11.2701H7.81353C8.1936 10.3599 8.63368 9.46974 9.11377 8.60957C7.92355 8.38953 6.51329 8.31952 5.81315 8.78961C5.19304 9.19968 4.70294 10.3099 4.39289 11.2701Z\" fill=\"#673DE6\"\/>\n                <\/svg>\n                <p class=\"protip__title\">\n                    Aprende otras herramientas de implementaci&oacute;n y contenedorizaci&oacute;n                <\/p>\n            <\/div>\n            <p class=\"protip__content\"> <a href=\"\/ar\/tutoriales\/que-es-docker\/\">&iquest;Qu&eacute; es Docker y c&oacute;mo funciona?<\/a><\/p>\n                    <\/div>\n        <\/p><h2 class=\"wp-block-heading\" id=\"h-faqs-sobre-como-implementar-aplicaciones-web-con-kamal\"><strong>FAQs sobre c&oacute;mo implementar aplicaciones web con Kamal<\/strong><\/h2><p class=\"wp-block-paragraph\">Respuestas a las preguntas frecuentes sobre implementar aplicaciones web con Kamal.<\/p><div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-69446b67ecdef\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">u003cstrongu003e&iquest;Cu&aacute;les son los requisitos previos para utilizar Kamal?u003c\/strongu003e<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Antes de implementar con Kamal, aseg&uacute;rate de que tu m&aacute;quina tiene instalado Git para el control de versiones, acceso SSH a tu servidor para conexiones seguras y un entorno de aplicaci&oacute;n Rails con las dependencias necesarias resueltas. Estos requisitos previos son cruciales para un proceso de implementaci&oacute;n de Kamal sin problemas.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-69446b67ecdf2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">u003cstrongu003e&iquest;Puedo implementar diferentes tipos de aplicaciones web con Kamal?u003c\/strongu003e<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>S&iacute;, Kamal puede gestionar distintos tipos de aplicaciones web, adem&aacute;s de aplicaciones Rails. Proporciona un sistema de implementaci&oacute;n flexible adecuado para varios marcos de aplicaciones web, garantizando que los desarrolladores puedan implementar sus proyectos de forma eficaz independientemente de la tecnolog&iacute;a subyacente.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-69446b67ecdf3\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">u003cstrongu003e&iquest;Es Kamal adecuado para escalar aplicaciones web?u003c\/strongu003e<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Kamal es ideal para escalar aplicaciones web, ya que admite la implementaci&oacute;n en varios hosts y se integra con un equilibrador de carga, esencial para distribuir el tr&aacute;fico y garantizar una alta disponibilidad a medida que aumentan tu base de usuarios y tu tr&aacute;fico.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div><h3 class=\"wp-block-heading\" id=\"h-\"><\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Implementar una aplicaci&oacute;n web en contenedores a menudo puede parecer desalentador. Kamal es una herramienta dise&ntilde;ada para agilizar y simplificar la implementaci&oacute;n de aplicaciones web, haciendo que tu flujo de trabajo sea m&aacute;s eficiente y fiable. En este art&iacute;culo aprender&aacute;s a implementar aplicaciones web con Kamal en un entorno de servidor privado virtual (VPS). Tambi&eacute;n [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/ar\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":361,"featured_media":46491,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"C\u00f3mo implementar aplicaciones web con Kamal en %currentyear%","rank_math_description":"Aprende a implementar aplicaciones web con Kamal en este tutorial donde te explicamos paso a paso c\u00f3mo lograrlo.","rank_math_focus_keyword":"implementar aplicaciones web con Kamal","footnotes":""},"categories":[5700],"tags":[],"class_list":["post-40239","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/deploy-web-apps-using-kamal\/","default":1},{"locale":"fr-FR","link":"https:\/\/www.hostinger.com\/fr\/tutoriels\/deployer-applications-web-avec-kamal\/","default":0},{"locale":"es-ES","link":"https:\/\/www.hostinger.com\/es\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/","default":0},{"locale":"id-ID","link":"https:\/\/www.hostinger.com\/id\/tutorial\/cara-deploy-aplikasi-web-menggunakan-kamal\/","default":0},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-GB","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/deploy-web-apps-using-kamal\/","default":0},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/","default":0},{"locale":"es-MX","link":"https:\/\/www.hostinger.com\/mx\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/","default":0},{"locale":"es-CO","link":"https:\/\/www.hostinger.com\/co\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\/","default":0}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/posts\/40239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/users\/361"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/comments?post=40239"}],"version-history":[{"count":11,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/posts\/40239\/revisions"}],"predecessor-version":[{"id":46490,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/posts\/40239\/revisions\/46490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/media\/46491"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/media?parent=40239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/categories?post=40239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/ar\/tutoriales\/wp-json\/wp\/v2\/tags?post=40239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}