Build en modo standalone
next.config.ts activa output: "standalone". El build empaqueta solo lo
que Next.js necesita para arrancar (.next/standalone + .next/static +
public), sin el resto de node_modules.
El CLI de Prisma no viaja dentro del bundle standalone. Por eso la
imagen final incluye, aparte, un toolkit de migraciones separado (más
abajo).
next.config.ts también fuerza el file-tracing de sharp y @img con
outputFileTracingIncludes, porque el tracing automático de Next.js no
siempre los detecta al construir el bundle standalone; sin ese ajuste, el
procesamiento de imágenes falla en producción.
Arranque: docker-entrypoint.sh
Al arrancar el contenedor, un script de entrypoint corre antes que
node server.js:
- Crea los directorios de upload (
public/uploads/avatars,
public/uploads/camellos) por si la imagen arranca sin volumen o con un
volumen montado vacío.
- Aplica
prisma migrate deploy usando un toolkit de Prisma (CLI, schema y
cliente generado) instalado aparte, en /migrate, precisamente porque el
CLI no está incluido en el bundle standalone.
El seed no corre en cada deploy — se asume que el entorno ya tiene
datos. Se ejecuta a mano, con npm run db:seed, solo cuando hace falta.
Integración continua
El workflow de CI corre en cada push y pull request contra master, en
una matriz con Node.js 22 y 25:
Construir y ejecutar la imagen
Seed o creación de un admin dentro del contenedor (si tienes shell):