{"id":40239,"date":"2024-06-03T02:30:10","date_gmt":"2024-06-03T00:30:10","guid":{"rendered":"\/tutoriales\/?p=40239"},"modified":"2025-12-18T22:00:23","modified_gmt":"2025-12-18T21:00:23","slug":"como-implementar-aplicaciones-web-con-kamal","status":"publish","type":"post","link":"\/es\/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>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>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>Al final de esta gu&iacute;a tendr&aacute;s todo para aprovechar la potencia de Kamal en tus proyectos. Comencemos.<\/p><p>\n\n\n\n\n\n\n\n<div class=\"protip\">\n                    <h4 class=\"title\">&iquest;Qu&eacute; es Kamal?<\/h4>\n                    <p> 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\n\n\n<\/p><p>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>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>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\/32\/2024\/06\/image.png\/public\" alt=\"Portada de Kamal\" class=\"wp-image-40256\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/image.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/image.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/image.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2024\/06\/image.png\/w=768,fit=scale-down 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>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=\"\/es\/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>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>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=\"\/es\/servidor-vps\">hosting VPS<\/a> de Hostinger para configurar tu entorno.<\/p><p>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=\"\/es\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/public\" alt=\"\" class=\"wp-image-29287\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1536,fit=scale-down 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><p>Tras preparar tu VPS, <a href=\"\/es\/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>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>Si est&aacute;s desarrollando una aplicaci&oacute;n Rails, aseg&uacute;rate de tener <a href=\"\/es\/tutoriales\/instalar-ruby-on-rails-en-ubuntu\">instalado el framework Ruby on Rails<\/a>. Si no, puedes <a href=\"\/es\/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>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>Esto hace que Kamal sea accesible desde cualquier directorio de tu servidor.<\/p><p>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>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>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>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><\/p><p>Recuerda mantener tus credenciales seguras sustituyendo <strong>KAMAL_REGISTRY_PASSWORD <\/strong>por tu token de acceso al registro de Docker.<\/p><p>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>Esto prepara tus servidores creando directorios, estableciendo permisos y realizando otras tareas necesarias.<\/p><p>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>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>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>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>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>Luego, utiliza el comando <strong>kamal env push <\/strong>para transferir el archivo a tu servidor de forma segura.<\/p><p>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>Estos procedimientos son fundamentales para hacer funcionar adecuadamente <a href=\"\/es\/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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>Puedes hacerle consultas a Kodee para obtener instrucciones sobre c&oacute;mo automatizar tu flujo de trabajo.<\/p><p>Por ejemplo, inicia una consulta con un prompt como &laquo;&iquest;C&oacute;mo automatizo las copias de seguridad del servidor de base de datos utilizando Kamal?&raquo;<\/p><p>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=\"\/es\/servidor-vps\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/public\" alt=\"\" class=\"wp-image-29287\" srcset=\"https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=1024,fit=scale-down 1024w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=300,fit=scale-down 300w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=150,fit=scale-down 150w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/2023\/02\/ES-VPS-hosting_in-text-banner.png\/w=768,fit=scale-down 768w, https:\/\/imagedelivery.net\/LqiWLm-3MGbYHtFuUbcBtA\/wp-content\/uploads\/sites\/32\/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>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>A continuaci&oacute;n te explicamos c&oacute;mo incorporar un bloqueo de implementaci&oacute;n a tus estrategias con Kamal:<\/p><p><strong>Antes<\/strong><\/p><p>Inicia un bloqueo de implementaci&oacute;n para impedir que se solapen los procesos utilizando el comando kamal <strong>lock acquire -m &laquo;Tu motivo para el bloqueo&raquo;<\/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><strong>Durante<\/strong><\/p><p>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>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><strong>Despu&eacute;s<\/strong><\/p><p>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>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>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>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>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>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>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>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>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>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>\n\n\n\n<div class=\"protip\">\n                    <h4 class=\"title\">Aprende otras herramientas de implementaci&oacute;n y contenedorizaci&oacute;n<\/h4>\n                    <p> <a href=\"\/es\/tutoriales\/que-es-docker\">&iquest;Qu&eacute; es Docker y c&oacute;mo funciona?<\/a><\/p>\n                <\/div>\n\n\n\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>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 \"><strong>&iquest;Cu&aacute;les son los requisitos previos para utilizar Kamal?<\/strong><\/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 \"><strong>&iquest;Puedo implementar diferentes tipos de aplicaciones web con Kamal?<\/strong><\/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 \"><strong>&iquest;Es Kamal adecuado para escalar aplicaciones web?<\/strong><\/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=\"\/es\/tutoriales\/como-implementar-aplicaciones-web-con-kamal\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":361,"featured_media":40261,"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":0},{"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-UK","link":"https:\/\/www.hostinger.com\/uk\/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-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/deploy-web-apps-using-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},{"locale":"es-AR","link":"https:\/\/www.hostinger.com\/ar\/tutoriales\/como-implementar-aplicaciones-web-con-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}],"acf":[],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/40239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/users\/361"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/comments?post=40239"}],"version-history":[{"count":10,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/40239\/revisions"}],"predecessor-version":[{"id":49722,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/posts\/40239\/revisions\/49722"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/media\/40261"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/media?parent=40239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/categories?post=40239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/es\/tutoriales\/wp-json\/wp\/v2\/tags?post=40239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}