← Tutte le note

Next.js su Coolify: la build non va nell'entrypoint

Deploy che va in timeout, container che non diventa mai healthy, nessun errore evidente nei log. Tutto sembrava colpa di Coolify, del webhook o della rete. Era un'altra cosa.

Il problema

Nel Dockerfile finiva solo la copia dei sorgenti. La build vera partiva dopo, nell'entrypoint.sh:

npx prisma generate
npm run build
npx prisma migrate deploy
npm start

Ogni avvio del container rifaceva next build. Su un branch di sviluppo, con una build da diversi minuti, il deploy andava in timeout prima che l'app fosse su. Per Coolify era fallito, per me era "solo lento".

La correzione

La build è un passo dell'immagine, non dell'avvio. Nel Dockerfile:

RUN npx prisma generate
RUN npm run build

E nell'entrypoint resta solo quello che deve succedere a ogni avvio:

npx prisma migrate deploy
npm start

Il container parte in secondi, l'immagine è identica tra un riavvio e l'altro e il rollback funziona come ci si aspetta.

Il bonus: Invalid signature

Se usi un webhook per far partire il deploy da Git (a me è capitato con Bitbucket) e vedi Invalid signature, controlla che il secret sia lo stesso nelle impostazioni del repository e in Coolify. Un carattere di differenza e ogni push viene rifiutato senza altri indizi.

Regola pratica

Se una cosa non cambia tra un avvio e l'altro, non va fatta all'avvio.