Add Docker packaging and migrate from better-sqlite3 to libsql

Docker self-hosting support:
- Dockerfile (multi-stage Alpine build with tini init)
- docker-compose.yml with named volume for SQLite persistence
- /api/health endpoint for container health checks
- Auto-migration on startup via drizzle-orm/libsql/migrator
- Graceful shutdown (SIGTERM stops scheduler, closes DB)
- Next.js standalone output mode for minimal image size

Database driver migration (better-sqlite3 → @libsql/client):
- Eliminates native C++ compilation, enabling Alpine Docker images
- All DB queries converted from sync to async across services and routes
- DATABASE_URL now uses libsql file: prefix format
- drizzle.config.ts dialect changed to turso for libsql support
- Initial migration files generated in drizzle/

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 13:14:57 -05:00
co-authored by Claude Opus 4.6
parent 8f99a20a9c
commit 96213c3086
33 changed files with 3837 additions and 593 deletions
+9 -8
View File
@@ -8,6 +8,7 @@
"start": "next start",
"lint": "biome check",
"format": "biome format --write",
"check-types": "tsc --noEmit",
"db:generate": "drizzle-kit generate",
"db:migrate": "drizzle-kit migrate",
"db:push": "drizzle-kit push",
@@ -15,14 +16,14 @@
},
"dependencies": {
"@base-ui/react": "^1.2.0",
"@libsql/client": "^0.17.0",
"@tabler/icons-react": "^3.37.1",
"better-auth": "^1.4.19",
"better-sqlite3": "^12.6.2",
"better-auth": "^1.5.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"date-fns": "^4.1.0",
"drizzle-orm": "^0.45.1",
"drizzle-orm": "1.0.0-beta.15-859cf75",
"embla-carousel-react": "^8.6.0",
"motion": "^12.34.3",
"next": "16.1.6",
@@ -30,24 +31,24 @@
"react-day-picker": "^9.14.0",
"react-dom": "19.2.4",
"react-hotkeys-hook": "^5.2.4",
"react-resizable-panels": "^4.6.5",
"react-resizable-panels": "^4.7.0",
"recharts": "2.15.4",
"shadcn": "^3.8.5",
"sonner": "^2.0.7",
"tailwind-merge": "^3.5.0",
"tw-animate-css": "^1.4.0",
"uuid": "^13.0.0",
"vaul": "^1.1.2"
"vaul": "^1.1.2",
"zod": "^4.3.6"
},
"devDependencies": {
"@biomejs/biome": "2.4.4",
"@tailwindcss/postcss": "^4.2.1",
"@types/better-sqlite3": "^7.6.13",
"@types/node": "^25.3.2",
"@types/node": "^25.3.3",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"babel-plugin-react-compiler": "1.0.0",
"drizzle-kit": "^0.31.9",
"drizzle-kit": "1.0.0-beta.15-859cf75",
"tailwindcss": "^4.2.1",
"typescript": "^5.9.3"
}