Migrate: PocketBase → SvelteKit + better-sqlite3 + JWT

Vollständige Migration weg von PocketBase. Neuer Stack:
- better-sqlite3 (WAL-Mode, direkte SQLite-Abfragen)
- jose (JWT HS256, 30 Tage Laufzeit)
- bcryptjs (Passwort-Hashing, cost 12)

Neue Dateien:
- src/lib/server/db.ts    → SQLite-Singleton + Schema + Helpers
- src/lib/server/auth.ts  → JWT sign/verify, bcrypt, Bearer-Token
- src/lib/user.ts         → Svelte-Store (ersetzt pb.authStore)
- src/lib/api.ts          → fetch()-Wrapper (ersetzt pb.collection())
- src/app.d.ts            → App.Locals TypeScript-Deklaration
- 30 neue API-Routes unter src/routes/api/

Entfernt:
- Abhängigkeit von pocketbase npm-Paket (bleibt im package.json bis
  alle Referenzen bereinigt sind)
- PocketBase-Container aus docker-compose.yml
- Migrations und Hooks aus Deploy-Pipeline

Docker: Ein einziger Container, SQLite-Volume unter /data/
Makefile: PocketBase-spezifische Targets entfernt
seed.js: Komplett neu für neue REST-API
This commit is contained in:
rene 2026-05-21 21:55:04 +02:00
parent 61c430f2e6
commit 39981c0d17
58 changed files with 2313 additions and 651 deletions

View file

@ -1,42 +1,27 @@
version: "3.8"
services:
pocketbase-staging:
image: ghcr.io/muchobien/pocketbase:latest
container_name: vereinshaus-staging-pocketbase
restart: unless-stopped
command: ["--migrationsDir=/pb_data/migrations"]
volumes:
- /volume1/docker/vereinshaus-staging/pocketbase/data:/pb_data
- /volume1/docker/vereinshaus-staging/pocketbase/storage:/pb_public
- /volume1/docker/vereinshaus-staging/pocketbase/data/pb_hooks:/pb_hooks
- /volume1/docker/vereinshaus-staging/pocketbase/migrations:/pb_data/migrations
environment:
- TZ=Europe/Berlin
- BREVO_KEY=${BREVO_KEY}
- BREVO_SENDER=${BREVO_SENDER:-noreply@vereins.haus}
networks:
default: {}
npm_bridge:
ipv4_address: 172.25.0.14
app-staging:
build:
context: ./app
dockerfile: Dockerfile
args:
VITE_PB_URL: https://api-staging.vereins.haus
image: vereinshaus-staging-app
container_name: vereinshaus-staging-app
restart: unless-stopped
volumes:
- /volume1/docker/vereinshaus-staging/data:/data
environment:
- TZ=Europe/Berlin
- HOST=0.0.0.0
- PORT=3000
- DB_PATH=/data/vereinshaus.db
- UPLOAD_DIR=/data/uploads
- JWT_SECRET=${JWT_SECRET:-staging-secret-change-me}
- PUBLIC_VAPID_KEY=${PUBLIC_VAPID_KEY}
- VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- VAPID_SUBJECT=${VAPID_SUBJECT:-mailto:info@vereins.haus}
- PB_URL=http://pocketbase-staging:8090
- BREVO_KEY=${BREVO_KEY}
- BREVO_SENDER=${BREVO_SENDER:-noreply@vereins.haus}
networks:
default: {}
npm_bridge: