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:
parent
61c430f2e6
commit
39981c0d17
58 changed files with 2313 additions and 651 deletions
116
Makefile
116
Makefile
|
|
@ -1,22 +1,18 @@
|
|||
# ==============================================================
|
||||
# VEREINS.HAUS — Makefile
|
||||
# Deploy-Strategie: SSH zur DS, Docker Compose
|
||||
# Stack: SvelteKit + better-sqlite3 (kein PocketBase)
|
||||
# ==============================================================
|
||||
|
||||
DS_HOST := ds
|
||||
DS_IP := 10.47.11.10
|
||||
DS_SSH_PORT := 4711
|
||||
DS_PATH := /volume1/docker/vereinshaus
|
||||
CONTAINER_PB := vereinshaus-pocketbase
|
||||
CONTAINER_APP := vereinshaus-app
|
||||
DOCKER := sudo /usr/local/bin/docker
|
||||
|
||||
STAGING_PATH := /volume1/docker/vereinshaus-staging
|
||||
CONTAINER_PB_STAGING := vereinshaus-staging-pocketbase
|
||||
CONTAINER_APP_STAGING:= vereinshaus-staging-app
|
||||
STAGING_PB_URL := http://localhost:8091
|
||||
STAGING_MIGRATIONS := $(STAGING_PATH)/pocketbase/migrations
|
||||
STAGING_HOOKS := $(STAGING_PATH)/pocketbase/data/pb_hooks
|
||||
STAGING_PATH := /volume1/docker/vereinshaus-staging
|
||||
CONTAINER_APP_STAGING := vereinshaus-staging-app
|
||||
|
||||
TAR_EXCLUDE := --exclude='.git' \
|
||||
--exclude='./app/node_modules' \
|
||||
|
|
@ -25,13 +21,8 @@ TAR_EXCLUDE := --exclude='.git' \
|
|||
--exclude='./.env' \
|
||||
--exclude='./.DS_Store'
|
||||
|
||||
HOOKS_SRC := pocketbase/pb_hooks
|
||||
HOOKS_DST := /volume1/docker/vereinshaus/pocketbase/data/pb_hooks
|
||||
MIGRATIONS_SRC := pocketbase/pb_migrations
|
||||
MIGRATIONS_DST := /volume1/docker/vereinshaus/pocketbase/migrations
|
||||
|
||||
.PHONY: help check-ssh start stop restart status logs logs-f logs-app \
|
||||
shell-pb pb-admin deploy
|
||||
.PHONY: help check-ssh start stop restart status logs logs-app logs-f deploy \
|
||||
staging-deploy staging-reset staging-seed staging-logs staging-status staging-stop
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Hilfe
|
||||
|
|
@ -40,17 +31,17 @@ help:
|
|||
@echo ""
|
||||
@echo " vereins.haus — verfügbare Befehle:"
|
||||
@echo ""
|
||||
@echo " make deploy App bauen + zur DS übertragen + Container neu starten"
|
||||
@echo " make start Alle Container starten"
|
||||
@echo " make stop Alle Container stoppen"
|
||||
@echo " make restart Alle Container neu starten"
|
||||
@echo " make status Container-Status anzeigen"
|
||||
@echo " make deploy App bauen + zur DS übertragen + Container neu starten"
|
||||
@echo " make start Container starten"
|
||||
@echo " make stop Container stoppen"
|
||||
@echo " make restart Container neu starten"
|
||||
@echo " make status Container-Status anzeigen"
|
||||
@echo " make logs App-Logs (100 Zeilen)"
|
||||
@echo " make logs-f App Live-Log"
|
||||
@echo ""
|
||||
@echo " make logs PocketBase-Logs (100 Zeilen)"
|
||||
@echo " make logs-app App-Logs (100 Zeilen)"
|
||||
@echo " make logs-f PocketBase Live-Log"
|
||||
@echo " make shell-pb Shell in PocketBase-Container"
|
||||
@echo " make pb-admin PocketBase Admin-URL anzeigen"
|
||||
@echo " make staging-deploy Staging deployen"
|
||||
@echo " make staging-seed Testdaten einfügen"
|
||||
@echo " make staging-reset Staging-DB löschen (Neustart)"
|
||||
@echo ""
|
||||
|
||||
# ----------------------------------------------------------
|
||||
|
|
@ -65,7 +56,7 @@ check-ssh:
|
|||
fi
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# DEPLOY
|
||||
# DEPLOY (Production)
|
||||
# ----------------------------------------------------------
|
||||
deploy: check-ssh
|
||||
@echo "→ Sync zu DS..."
|
||||
|
|
@ -74,23 +65,6 @@ deploy: check-ssh
|
|||
@if [ -f .env ]; then \
|
||||
cat .env | ssh $(DS_HOST) "cat > $(DS_PATH)/.env"; \
|
||||
fi
|
||||
@echo "→ PocketBase Hooks synchronisieren..."
|
||||
@if ls $(HOOKS_SRC)/*.pb.js 2>/dev/null | grep -q .; then \
|
||||
for f in $(HOOKS_SRC)/*.pb.js; do \
|
||||
cat "$$f" | ssh $(DS_HOST) "cat > $(HOOKS_DST)/$$(basename $$f)"; \
|
||||
done; \
|
||||
fi
|
||||
@echo "→ PocketBase Migrations synchronisieren (nur neue)..."
|
||||
@ssh $(DS_HOST) "mkdir -p $(MIGRATIONS_DST)"
|
||||
@if ls $(MIGRATIONS_SRC)/*.js 2>/dev/null | grep -q .; then \
|
||||
for f in $(MIGRATIONS_SRC)/*.js; do \
|
||||
fname=$$(basename "$$f"); \
|
||||
if ! ssh $(DS_HOST) "test -f $(MIGRATIONS_DST)/$$fname" 2>/dev/null; then \
|
||||
cat "$$f" | ssh $(DS_HOST) "cat > $(MIGRATIONS_DST)/$$fname"; \
|
||||
echo " ✓ $$fname"; \
|
||||
fi; \
|
||||
done; \
|
||||
fi
|
||||
@echo "→ Docker rebuild + restart..."
|
||||
@ssh $(DS_HOST) " \
|
||||
cd $(DS_PATH) && \
|
||||
|
|
@ -98,7 +72,7 @@ deploy: check-ssh
|
|||
$(DOCKER) compose build app && \
|
||||
$(DOCKER) compose up -d"
|
||||
@echo " ✓ Deploy fertig."
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=10"
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=15"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Container-Steuerung
|
||||
|
|
@ -124,27 +98,16 @@ status: check-ssh
|
|||
# Logs
|
||||
# ----------------------------------------------------------
|
||||
logs: check-ssh
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_PB) --tail=100"
|
||||
|
||||
logs-app: check-ssh
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=100"
|
||||
|
||||
logs-app: logs
|
||||
|
||||
logs-f: check-ssh
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_PB) -f"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Shell + Admin
|
||||
# ----------------------------------------------------------
|
||||
shell-pb: check-ssh
|
||||
@ssh -t $(DS_HOST) "$(DOCKER) exec -it $(CONTAINER_PB) sh"
|
||||
|
||||
pb-admin:
|
||||
@echo " PocketBase Admin: https://api.vereins.haus/_/"
|
||||
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) -f"
|
||||
|
||||
# ==============================================================
|
||||
# STAGING
|
||||
# ==============================================================
|
||||
.PHONY: staging-deploy staging-reset staging-seed staging-logs staging-status staging-stop
|
||||
|
||||
staging-deploy: check-ssh
|
||||
@echo "→ Sync zu DS (Staging)..."
|
||||
|
|
@ -153,20 +116,6 @@ staging-deploy: check-ssh
|
|||
@if [ -f .env ]; then \
|
||||
cat .env | ssh $(DS_HOST) "cat > $(STAGING_PATH)/.env"; \
|
||||
fi
|
||||
@echo "→ Hooks synchronisieren (Staging, vollständig)..."
|
||||
@ssh $(DS_HOST) "mkdir -p $(STAGING_HOOKS)"
|
||||
@if ls $(HOOKS_SRC)/*.pb.js 2>/dev/null | grep -q .; then \
|
||||
for f in $(HOOKS_SRC)/*.pb.js; do \
|
||||
cat "$$f" | ssh $(DS_HOST) "cat > $(STAGING_HOOKS)/$$(basename $$f)"; \
|
||||
done; \
|
||||
fi
|
||||
@echo "→ Migrations synchronisieren (Staging, immer aktuell)..."
|
||||
@ssh $(DS_HOST) "mkdir -p $(STAGING_MIGRATIONS)"
|
||||
@if ls $(MIGRATIONS_SRC)/*.js 2>/dev/null | grep -q .; then \
|
||||
for f in $(MIGRATIONS_SRC)/*.js; do \
|
||||
cat "$$f" | ssh $(DS_HOST) "cat > $(STAGING_MIGRATIONS)/$$(basename $$f)"; \
|
||||
done; \
|
||||
fi
|
||||
@echo "→ Docker rebuild + restart (Staging)..."
|
||||
@ssh $(DS_HOST) " \
|
||||
cd $(STAGING_PATH) && \
|
||||
|
|
@ -174,31 +123,26 @@ staging-deploy: check-ssh
|
|||
$(DOCKER) compose -f docker-compose.staging.yml build app-staging && \
|
||||
$(DOCKER) compose -f docker-compose.staging.yml up -d"
|
||||
@echo " ✓ Staging bereit."
|
||||
@echo " App: https://staging.vereins.haus"
|
||||
@echo " PocketBase: https://api-staging.vereins.haus/_/"
|
||||
@echo " App: https://staging.vereins.haus"
|
||||
|
||||
# Löscht alle PB-Daten auf Staging → Migrations laufen frisch durch
|
||||
# Löscht die SQLite-DB auf Staging → frischer Start
|
||||
# Danach: make staging-deploy && make staging-seed
|
||||
staging-reset: check-ssh staging-stop
|
||||
@echo "→ PocketBase-Daten auf Staging löschen..."
|
||||
@ssh $(DS_HOST) "rm -rf \
|
||||
$(STAGING_PATH)/pocketbase/data/storage \
|
||||
'$(STAGING_PATH)/pocketbase/data/data.db' \
|
||||
'$(STAGING_PATH)/pocketbase/data/data.db-wal' \
|
||||
'$(STAGING_PATH)/pocketbase/data/data.db-shm' \
|
||||
$(STAGING_PATH)/pocketbase/migrations"
|
||||
@echo "→ Alle Hooks auf Staging löschen (werden via staging-deploy neu geschrieben)..."
|
||||
@ssh $(DS_HOST) "rm -f $(STAGING_HOOKS)/*.pb.js"
|
||||
@echo "→ Staging-Daten löschen..."
|
||||
@ssh $(DS_HOST) "rm -f \
|
||||
$(STAGING_PATH)/data/vereinshaus.db \
|
||||
$(STAGING_PATH)/data/vereinshaus.db-wal \
|
||||
$(STAGING_PATH)/data/vereinshaus.db-shm && \
|
||||
rm -rf $(STAGING_PATH)/data/uploads"
|
||||
@echo " ✓ Reset fertig. Jetzt: make staging-deploy && make staging-seed"
|
||||
|
||||
staging-seed:
|
||||
@echo "→ Testdaten in Staging einfügen..."
|
||||
@echo " Voraussetzung: PB_EMAIL + PB_PASSWORD in .env gesetzt (Staging-Superuser)"
|
||||
@if [ -f .env ]; then \
|
||||
export $$(grep -v '^#' .env | xargs) && \
|
||||
PB_URL=https://api-staging.vereins.haus node scripts/seed.js; \
|
||||
APP_URL=https://staging.vereins.haus node scripts/seed.js; \
|
||||
else \
|
||||
PB_URL=https://api-staging.vereins.haus node scripts/seed.js; \
|
||||
APP_URL=https://staging.vereins.haus node scripts/seed.js; \
|
||||
fi
|
||||
|
||||
staging-logs: check-ssh
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue