- Phosphor Icons (Icon.svelte, svg-Registry) - Schema-Abgleich: alle Felder zwischen PB-Migrations und types.ts konsistent - Stripe entfernt, SEPA pain.008 XML-Export implementiert (sepa.ts) - Beiträge: vollständiges CRUD + SEPA-Einzug-Sheet mit Vorschau - Termine: vollständiges CRUD (upcoming/vergangen, datetime-local) - Mitglieder: Formulare um alle Felder erweitert (Adresse, SEPA-Mandat, Notizen) - Nachrichten: Brevo E-Mail via PocketBase-Hook, UI mit Gruppen-Filter - Push-Notifications: VAPID, Custom Service Worker (injectManifest), Subscribe/Send API-Routen, automatische Subscription nach Login - Onboarding: 3-Schritt-Flow für neue Vereine, Guard im App-Layout - Makefile: .env wird vollständig zur DS übertragen
135 lines
4.6 KiB
Makefile
135 lines
4.6 KiB
Makefile
# ==============================================================
|
|
# VEREINS.HAUS — Makefile
|
|
# Deploy-Strategie: SSH zur DS, Docker Compose
|
|
# ==============================================================
|
|
|
|
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
|
|
|
|
TAR_EXCLUDE := --exclude='.git' \
|
|
--exclude='./app/node_modules' \
|
|
--exclude='./app/.svelte-kit' \
|
|
--exclude='./app/build' \
|
|
--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
|
|
|
|
# ----------------------------------------------------------
|
|
# Hilfe
|
|
# ----------------------------------------------------------
|
|
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 ""
|
|
@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 ""
|
|
|
|
# ----------------------------------------------------------
|
|
# 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
|
|
# ----------------------------------------------------------
|
|
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 "→ 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) && \
|
|
$(DOCKER) compose down && \
|
|
$(DOCKER) compose build app && \
|
|
$(DOCKER) compose up -d"
|
|
@echo " ✓ Deploy fertig."
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=10"
|
|
|
|
# ----------------------------------------------------------
|
|
# 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_PB) --tail=100"
|
|
|
|
logs-app: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER_APP) --tail=100"
|
|
|
|
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/_/"
|