{"id":21,"date":"2026-10-01T08:00:00","date_gmt":"2026-10-01T08:00:00","guid":{"rendered":"https:\/\/prensabot.com\/blog\/?p=21"},"modified":"2026-10-01T08:00:00","modified_gmt":"2026-10-01T08:00:00","slug":"del-escritorio-al-servidor-el-caotico-primer-despliegue-de-prensabot","status":"publish","type":"post","link":"https:\/\/prensabot.com\/blog\/del-escritorio-al-servidor-el-caotico-primer-despliegue-de-prensabot\/","title":{"rendered":"Del escritorio al servidor: el ca\u00f3tico primer despliegue de PrensaBot"},"content":{"rendered":"<p>Todo desarrollo parece impecable mientras vive en el entorno controlado de la computadora local. Pero la verdadera prueba llega al momento del despliegue. El equipo detr\u00e1s de PrensaBot, la plataforma SaaS construida con Laravel y Filament para gestionar contenidos period\u00edsticos, aprendi\u00f3 esta lecci\u00f3n de manera abrupta durante su primera migraci\u00f3n a un entorno productivo real. El objetivo era claro: trasladar una aplicaci\u00f3n desarrollada en Windows con Laragon a un servidor Hostinger con Linux, Apache\/LiteSpeed. Lo que sigui\u00f3 fue una sucesi\u00f3n de problemas que pusieron en jaque la operaci\u00f3n inicial.<\/p>\n<h2>La pantalla roja y el CSS fantasma<\/h2>\n<p>El primer golpe fue un error 403 al intentar acceder a la ruta \/admin. El servidor negaba el acceso. Tras ajustes en el archivo .htaccess y la reconfiguraci\u00f3n del document root para que apuntara correctamente a la carpeta public\/, el panel de administraci\u00f3n finalmente apareci\u00f3. Sin embargo, la victoria fue ef\u00edmera: la interfaz de login se mostraba completamente desprovista de estilos. El problema radicaba en los assets compilados mediante Vite; en producci\u00f3n, el sistema no pod\u00eda encontrarlos en las rutas que el entorno local daba por sentadas. La aplicaci\u00f3n funcionaba, pero era inusable visualmente.<\/p>\n<h2>La contrase\u00f1a que se encriptaba dos veces<\/h2>\n<p>Superado el obst\u00e1culo visual, surgi\u00f3 un fallo m\u00e1s insidioso: la autenticaci\u00f3n. Los usuarios no pod\u00edan iniciar sesi\u00f3n. La investigaci\u00f3n descubri\u00f3 un conflicto en la capa de seguridad. Por un lado, el seeder de la base de datos utilizaba la funci\u00f3n Hash::make para proteger las contrase\u00f1as iniciales. Por otro, un mutator en el modelo de Usuario aplicaba nuevamente el hash al mismo valor al guardarlo. El resultado era que la contrase\u00f1a almacenada sufr\u00eda un doble encriptado, haciendo imposible la comparaci\u00f3n durante el login. Un cl\u00e1sico error de desarrollo que solo se manifiesta al integrar todos los componentes.<\/p>\n<p>El proceso de correcci\u00f3n fue met\u00f3dico. Se revis\u00f3 y ajust\u00f3 el flujo completo de autenticaci\u00f3n, se regeneraron los assets para el entorno de producci\u00f3n y se verificaron minuciosamente las configuraciones de rutas. La verificaci\u00f3n final no fue una simple comprobaci\u00f3n t\u00e9cnica. El equipo realiz\u00f3 las tres pruebas fundamentales: acceso f\u00edsico al panel administrativo, carga correcta de todos los archivos CSS y JavaScript, y, lo m\u00e1s crucial, un inicio de sesi\u00f3n exitoso con credenciales reales desde el servidor remoto.<\/p>\n<p>La lecci\u00f3n qued\u00f3 grabada a fuego: <strong>una aplicaci\u00f3n no est\u00e1 lista solo porque funcione localmente<\/strong>. La transici\u00f3n al entorno productivo es un salto cualitativo que exige una validaci\u00f3n exhaustiva con un usuario real, bajo las condiciones reales del servidor. Fue un rito de iniciaci\u00f3n en Infraestructura y Rendimiento que defini\u00f3 los protocolos de despliegue futuro de PrensaBot.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La migraci\u00f3n de un entorno local de Windows a un servidor Linux expuso errores cr\u00edticos que casi paralizan la plataforma. Una cr\u00f3nica del aprendizaje forzoso en infraestructura.<\/p>\n","protected":false},"author":2,"featured_media":20,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-21","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infraestructura-y-rendimiento"],"_links":{"self":[{"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":1,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":38,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/38"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/media\/20"}],"wp:attachment":[{"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prensabot.com\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}