Makes schema changes deploy automatically: edit schema -> db:generate -> commit -> push -> Dokploy redeploys -> migrations apply on container start. No more Dokploy database terminal. Components: - src/db/migrate.ts: standalone migrator (single short-lived connection, fails loud on error so a bad migration crashes the container instead of letting the app serve a half-migrated schema) - scripts/build-migrator.mjs: esbuild bundles migrate.ts -> dist/migrate.mjs with drizzle-orm + postgres inlined. Needed because Next.js standalone output keeps neither as a separate node_modules package. - Dockerfile: builder runs db:build-migrator; runner copies migrate.mjs + drizzle/; CMD is 'node migrate.mjs && node server.js' - package.json: db:generate / db:migrate / db:studio / db:pull / db:build-migrator scripts; esbuild promoted to an explicit devDependency - pnpm-lock.yaml resynced BUG FIX: .dockerignore had 'drizzle/' — migration SQL was excluded from the build context, so even a correct Dockerfile COPY would have found nothing. This was the second half (with the .gitignore bug in commit 1) of why the migration pipeline never worked. Now only _archived/_introspected are excluded. Verified: full docker build succeeds; runner image contains migrate.mjs + drizzle baseline; migrator tested end-to-end against a scratch DB (35 tables created, __drizzle_migrations populated, idempotent on rerun).
16 lines
357 B
Text
16 lines
357 B
Text
node_modules
|
|
.git
|
|
.next
|
|
.env*
|
|
README.md
|
|
.docker
|
|
docker-compose.dev.yml
|
|
docker/
|
|
*.log
|
|
dist
|
|
|
|
# NOTE: drizzle/ is intentionally NOT ignored — the migration SQL must be
|
|
# in the build context so the Dockerfile can COPY it into the runner image.
|
|
# Only the non-shipping sub-folders are excluded:
|
|
drizzle/_archived_pre_baseline_2026-05-19
|
|
drizzle/_introspected
|