From 6f965c1cc9f4e635ca73f35d087d35b006d40a2c Mon Sep 17 00:00:00 2001 From: Marko Djordjevic Date: Thu, 12 Feb 2026 15:40:57 +0100 Subject: [PATCH] fix: add automatic database migrations on startup and copy drizzle folder to Docker - Auto-run migrations when db module loads - Copy drizzle migrations folder to Docker image - Generate missing color column migration - Fixes 500 errors on /api/candles and /api/annotations in Docker --- Dockerfile | 3 +++ src/lib/db/index.ts | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/Dockerfile b/Dockerfile index efde12b..efb8a5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,9 @@ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static # Copy node_modules for native dependencies like better-sqlite3 COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules +# Copy drizzle migrations +COPY --from=builder --chown=nextjs:nodejs /app/drizzle ./drizzle + RUN mkdir -p /app/public /app/data && chown -R nextjs:nodejs /app/public /app/data ENV NODE_ENV=production PORT=3000 HOSTNAME=0.0.0.0 diff --git a/src/lib/db/index.ts b/src/lib/db/index.ts index cdfc91c..3370481 100644 --- a/src/lib/db/index.ts +++ b/src/lib/db/index.ts @@ -1,5 +1,6 @@ import Database from 'better-sqlite3'; import { drizzle } from 'drizzle-orm/better-sqlite3'; +import { migrate } from 'drizzle-orm/better-sqlite3/migrator'; import * as schema from './schema'; import path from 'path'; import fs from 'fs'; @@ -13,3 +14,12 @@ if (!fs.existsSync(dataDir)) { const dbPath = path.join(dataDir, 'candles.db'); const sqlite = new Database(dbPath); export const db = drizzle(sqlite, { schema }); + +// Run migrations on startup +try { + migrate(db, { migrationsFolder: path.join(process.cwd(), 'drizzle') }); + console.log('✅ Database migrations completed'); +} catch (error) { + console.error('❌ Migration failed:', error); + throw error; +}