# ============================================================== # 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 .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 "→ 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/_/"