Actualizar y volver atrás
Cómo se publica un cambio, qué pasa con las migraciones y qué hacer cuando algo sale mal.
Cómo se publica un cambio
Cada push a main dispara un despliegue si el webhook de GitHub está activo.
Si no, se pulsa Deploy en Dokploy.
El flujo es siempre el mismo, y en este orden:
Construcción
Docker construye la imagen. Si la compilación falla, no pasa nada más: el contenedor que está sirviendo sigue sirviendo.
Migraciones
Al arrancar, el contenedor aplica las migraciones pendientes con
prisma migrate deploy, que sólo aplica lo que falta y nunca recrea nada.
Si una migración falla, el contenedor no arranca. Es deliberado: es preferible que el despliegue se detenga a que la aplicación sirva sobre una base a medio migrar.
Arranque y comprobación
Next.js arranca y el healthcheck empieza a responder. Traefik no enruta tráfico al contenedor nuevo hasta que está sano.
Migraciones compatibles hacia atrás
Durante unos segundos conviven la versión vieja y la nueva. Si una migración rompe lo que la versión vieja espera, esos segundos son errores para quien esté usando el sistema.
Por eso, siempre que se pueda:
| En vez de | Haz |
|---|---|
| Renombrar una columna | Añadir la nueva, escribir en ambas, migrar los datos, quitar la vieja después |
| Añadir una columna obligatoria | Añadirla opcional, rellenarla, hacerla obligatoria en un despliegue posterior |
| Borrar una columna | Dejar de usarla, desplegar, y borrarla en el siguiente |
`migrate dev` jamás en producción
Puede recrear la base entera. En producción sólo corre migrate deploy, que es
lo que hace el contenedor por su cuenta.
Volver atrás
Redesplegar la versión anterior
Deployments en Dokploy → localiza el despliegue que funcionaba → Redeploy.
Esto devuelve el código, no la base de datos.
Comprobar si basta
Si el problema era del código —un fallo de interfaz, una consulta rota, un cálculo mal— con esto se resuelve.
Si la migración fue destructiva, no basta
Volver al código anterior sobre una base ya migrada deja la aplicación hablando con un esquema que no espera.
Ahí hay que restaurar el respaldo, y por eso importa haber probado una restauración antes de necesitarla. El procedimiento está en Operación diaria.
Ver qué está pasando
Application → Logs en Dokploy.
La aplicación emite JSON por línea, así que se puede filtrar:
docker logs NOMBRE_DEL_CONTENEDOR 2>&1 | grep '"level":"error"'docker logs NOMBRE_DEL_CONTENEDOR 2>&1 | tail -50Nunca se registran contraseñas, tokens, secretos de almacenamiento, códigos de acceso a propiedades ni las firmas completas de las URLs. La redacción es automática por nombre de campo: no depende de que quien escribe el registro se acuerde.
Cuando el contenedor no arranca
Mira los registros del arranque. Los tres casos habituales:
| Lo que dice | Qué es |
|---|---|
| «Variables de entorno inválidas o faltantes» | Falta una obligatoria. El mensaje dice cuál |
| Error de migración | Una migración falló. No la fuerces: revisa qué pasó |
| «AUTH_SECRET debe tener al menos 32 caracteres» | Exactamente eso |
Más síntomas y sus causas en Diagnóstico.
Actualizar la documentación
El sitio de documentación es un servicio aparte. Se redespliega igual, desde su propio panel, y no tiene migraciones ni base que restaurar: volver atrás es siempre suficiente.