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
158 lines
5.5 KiB
Makefile
158 lines
5.5 KiB
Makefile
# ==============================================================
|
|
# 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_APP := vereinshaus-app
|
|
DOCKER := sudo /usr/local/bin/docker
|
|
|
|
STAGING_PATH := /volume1/docker/vereinshaus-staging
|
|
CONTAINER_APP_STAGING := vereinshaus-staging-app
|
|
|
|
TAR_EXCLUDE := --exclude='.git' \
|
|
--exclude='./app/node_modules' \
|
|
--exclude='./app/.svelte-kit' \
|
|
--exclude='./app/build' \
|
|
--exclude='./.env' \
|
|
--exclude='./.DS_Store'
|
|
|
|
.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
|
|
# ----------------------------------------------------------
|
|
help:
|
|
@echo ""
|
|
@echo " vereins.haus — verfügbare Befehle:"
|
|
@echo ""
|
|
@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 staging-deploy Staging deployen"
|
|
@echo " make staging-seed Testdaten einfügen"
|
|
@echo " make staging-reset Staging-DB löschen (Neustart)"
|
|
@echo ""
|
|
|
|
# ----------------------------------------------------------
|
|
# SSH-Prüfung
|
|
# ----------------------------------------------------------
|
|
check-ssh:
|
|
@if ! nc -z -w3 $(DS_IP) $(DS_SSH_PORT) 2>/dev/null; then \
|
|
echo ""; \
|
|
echo " ✗ DS nicht erreichbar ($(DS_IP):$(DS_SSH_PORT))"; \
|
|
echo ""; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# ----------------------------------------------------------
|
|
# DEPLOY (Production)
|
|
# ----------------------------------------------------------
|
|
deploy: check-ssh
|
|
@echo "→ Sync zu DS..."
|
|
@COPYFILE_DISABLE=1 tar czf - $(TAR_EXCLUDE) . | ssh $(DS_HOST) "tar xzf - -C $(DS_PATH)/"
|
|
@echo "→ .env auf DS aktualisieren..."
|
|
@if [ -f .env ]; then \
|
|
cat .env | ssh $(DS_HOST) "cat > $(DS_PATH)/.env"; \
|
|
fi
|
|
@echo "→ Docker rebuild + restart..."
|
|
@ssh $(DS_HOST) " \
|
|
cd $(DS_PATH) && \
|
|
$(DOCKER) compose down && \
|
|
$(DOCKER) compose build app && \
|
|
$(DOCKER) compose up -d"
|
|
@echo " ✓ Deploy fertig."
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=15"
|
|
|
|
# ----------------------------------------------------------
|
|
# Container-Steuerung
|
|
# ----------------------------------------------------------
|
|
start: check-ssh
|
|
@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose up -d"
|
|
@echo " ✓ Gestartet."
|
|
|
|
stop: check-ssh
|
|
@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose down"
|
|
@echo " ✓ Gestoppt."
|
|
|
|
restart: check-ssh
|
|
@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose restart"
|
|
@echo " ✓ Neugestartet."
|
|
|
|
status: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) ps \
|
|
--filter name=vereinshaus \
|
|
--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
|
|
|
# ----------------------------------------------------------
|
|
# Logs
|
|
# ----------------------------------------------------------
|
|
logs: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=100"
|
|
|
|
logs-app: logs
|
|
|
|
logs-f: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) -f"
|
|
|
|
# ==============================================================
|
|
# STAGING
|
|
# ==============================================================
|
|
|
|
staging-deploy: check-ssh
|
|
@echo "→ Sync zu DS (Staging)..."
|
|
@COPYFILE_DISABLE=1 tar czf - $(TAR_EXCLUDE) . | ssh $(DS_HOST) "tar xzf - -C $(STAGING_PATH)/"
|
|
@echo "→ .env auf DS (Staging)..."
|
|
@if [ -f .env ]; then \
|
|
cat .env | ssh $(DS_HOST) "cat > $(STAGING_PATH)/.env"; \
|
|
fi
|
|
@echo "→ Docker rebuild + restart (Staging)..."
|
|
@ssh $(DS_HOST) " \
|
|
cd $(STAGING_PATH) && \
|
|
$(DOCKER) compose -f docker-compose.staging.yml down && \
|
|
$(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"
|
|
|
|
# Löscht die SQLite-DB auf Staging → frischer Start
|
|
# Danach: make staging-deploy && make staging-seed
|
|
staging-reset: check-ssh staging-stop
|
|
@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..."
|
|
@if [ -f .env ]; then \
|
|
export $$(grep -v '^#' .env | xargs) && \
|
|
APP_URL=https://staging.vereins.haus node scripts/seed.js; \
|
|
else \
|
|
APP_URL=https://staging.vereins.haus node scripts/seed.js; \
|
|
fi
|
|
|
|
staging-logs: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP_STAGING) --tail=50"
|
|
|
|
staging-status: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) ps \
|
|
--filter name=vereinshaus-staging \
|
|
--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
|
|
|
staging-stop: check-ssh
|
|
@ssh $(DS_HOST) "cd $(STAGING_PATH) && $(DOCKER) compose -f docker-compose.staging.yml down"
|
|
@echo " ✓ Staging gestoppt."
|