vereinshaus/Makefile
rene 375a3305bb Add PocketBase schema migrations and migration pipeline
- 8 collections: vereine, gruppen, mitglieder, beitraege, einzuege,
  termine, nachrichten, push_subscriptions
- verein_id relation added to users (multi-tenant isolation)
- API rules enforce tenant separation via @request.auth.verein_id
- docker-compose: --migrationsDir=/pb_data/migrations flag + volume mount
- Makefile: migrations sync step added to deploy target
2026-05-19 20:40:47 +02:00

131 lines
4.5 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 \
grep -E "BREVO_KEY" .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..."
@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 \
cat "$$f" | ssh $(DS_HOST) "cat > $(MIGRATIONS_DST)/$$(basename $$f)"; \
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/_/"