Repository navigation
feat: despliegue versionado del frontend con rollback - #9
Merged
Merged
Conversation
Hasta ahora Caddy servia /home/david/RestFoodF/dist, la misma carpeta que escribe npm run build: compilar y publicar eran el mismo acto. Un build de prueba tiraba a produccion lo que hubiera en el arbol de trabajo, y no habia version anterior a la que volver porque el build ya la habia sobrescrito. Costo dos incidentes el 2026-07-27. Ahora Caddy sirve ~/deploys/restfood-frontend/current, un symlink a una release con fecha y sha. Publicar es mover el symlink -- atomico y sin recargar Caddy. deploy-frontend.sh exige main limpio y el check 'tests' en verde, aborta si existe .env.local (Vite lo carga tambien en producción y asi fue como el frontend acabo apuntando a staging), verifica que el bundle que pide index.html exista, comprueba contra el sitio real que se este sirviendo ese bundle y revierte solo si no. rollback-frontend.sh intercambia current y previous. Aqui el rollback siempre funciona: son archivos estaticos, no hay migraciones de por medio como en el backend.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
El problema
Caddy servía
/home/david/RestFoodF/dist— la misma carpeta que escribenpm run build. Compilar y publicar eran el mismo acto:dista medias, en vivo, con las tablets pegadas a él.Costó dos incidentes el 2026-07-27. Uno publicó un frontend apuntando a staging, porque Vite carga
.env.localtambién en los builds de producción.El arreglo
Caddy ahora sirve
~/deploys/restfood-frontend/current, un symlink a una release con fecha y sha. Publicar es mover el symlink: es atómico, ninguna petición ve un estado intermedio y no hay que recargar Caddy — la ruta se resuelve en cada petición.El
dist/del repo vuelve a ser lo que siempre debió ser: una carpeta de trabajo que no le importa a nadie.Es el mismo molde que
deploy/deploy.shdel backend, para que no haya dos formas de desplegar que aprender.deploy-frontend.shmain, limpio y actualizado.testsen verde para ese commit..env.local— es exactamente como el frontend acabó apuntando a staging, y Vite no avisa.rm -rf dist+npm ci).index.htmlexista en el build. Si no, la tablet carga un HTML que pide un JS inexistente: pantalla en blanco sin un solo error en el servidor.previousy luegocurrent.https://192.168.10.100/) que responda 200 y que esté sirviendo ese bundle. Si no, rollback automático.rollback-frontend.shIntercambia
currentyprevious, así un segundo rollback deshace el primero. Aquí el rollback siempre funciona: son archivos estáticos, sin migraciones de por medio como en el backend.Estado en el servidor
El cambio de
rooten el Caddyfile ya está aplicado (respaldo en/etc/caddy/Caddyfile.respaldo-20260728-1041). La primera release es una copia byte por byte deldistque ya se estaba sirviendo, verificada condiff -r, así que para las tablets no cambió nada. Verificado después de recargar: raíz 200, mismo bundleindex-DQjJfaAV.js,/inventario/existencias401 (la API sigue ruteando) y/admin/insumos200 (eltry_filessigue en pie).Y la comprobación que importa: se corrió
npm run builddespués del cambio y producción no se movió.Pendiente que esto NO resuelve
El
dist/del repo y la release en vivo pueden divergir sin que nada avise. No es grave — nadie sirve eldist— pero conviene saberlo al depurar.