feat(db): add migration script, migrate on each run

This commit is contained in:
ItzCrazyKns
2025-05-28 10:41:12 +05:30
parent 18da75ad97
commit 876487ad11
6 changed files with 25 additions and 3 deletions

View File

@ -12,6 +12,9 @@ COPY public ./public
RUN mkdir -p /home/perplexica/data
RUN yarn build
RUN yarn add --dev @vercel/ncc
RUN yarn ncc build ./src/lib/db/migrate.ts -o migrator
FROM node:20.18.0-slim
WORKDIR /home/perplexica
@ -21,7 +24,12 @@ COPY --from=builder /home/perplexica/.next/static ./public/_next/static
COPY --from=builder /home/perplexica/.next/standalone ./
COPY --from=builder /home/perplexica/data ./data
COPY drizzle ./drizzle
COPY --from=builder /home/perplexica/migrator/build ./build
COPY --from=builder /home/perplexica/migrator/index.js ./migrate.js
RUN mkdir /home/perplexica/uploads
CMD ["node", "server.js"]
COPY entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
CMD ["./entrypoint.sh"]

View File

@ -16,6 +16,7 @@ services:
dockerfile: app.dockerfile
environment:
- SEARXNG_API_URL=http://searxng:8080
- DATA_DIR=/home/perplexica
ports:
- 3000:3000
networks:

View File

@ -1,10 +1,11 @@
import { defineConfig } from 'drizzle-kit';
import path from 'path';
export default defineConfig({
dialect: 'sqlite',
schema: './src/lib/db/schema.ts',
out: './drizzle',
dbCredentials: {
url: './data/db.sqlite',
url: path.join(process.cwd(), 'data', 'db.sqlite'),
},
});

6
entrypoint.sh Normal file
View File

@ -0,0 +1,6 @@
#!/bin/sh
set -e
node migrate.js
exec node server.js

View File

@ -3,7 +3,8 @@ import Database from 'better-sqlite3';
import * as schema from './schema';
import path from 'path';
const sqlite = new Database(path.join(process.cwd(), 'data/db.sqlite'));
const DATA_DIR = process.env.DATA_DIR || process.cwd();
const sqlite = new Database(path.join(DATA_DIR, './data/db.sqlite'));
const db = drizzle(sqlite, {
schema: schema,
});

5
src/lib/db/migrate.ts Normal file
View File

@ -0,0 +1,5 @@
import db from './';
import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
import path from 'path';
migrate(db, { migrationsFolder: path.join(process.cwd(), 'drizzle') });