# ============================================================== # BAN YARO — Makefile # Alle häufigen Operationen mit kurzen Befehlen. # Verwendung: make # ============================================================== # Konfiguration DS_HOST := ds DS_IP := 10.47.11.10 DS_SSH_PORT := 22 DS_PATH := /volume1/docker/ban-yaro CONTAINER := ban-yaro GIT_REMOTE := origin .PHONY: help deploy push pull logs logs-f shell db restart stop status build \ clean-cache dev lint check-ssh # ---------------------------------------------------------- # SSH-Prüfung — intern, wird von allen DS-Befehlen genutzt # ---------------------------------------------------------- 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 ""; \ echo " SSH-Port $(DS_SSH_PORT) ist geschlossen oder DS ist offline."; \ echo " → Port in der Fritz!Box / DS-Firewall öffnen, dann erneut versuchen."; \ echo ""; \ exit 1; \ fi # ---------------------------------------------------------- # Standard: Hilfe anzeigen # ---------------------------------------------------------- help: @echo "" @echo " Ban Yaro — verfügbare Befehle:" @echo "" @echo " make deploy Push zu Git + Rebuild auf DS (häufigster Befehl)" @echo " make push Nur Git push (ohne DS-Deploy)" @echo " make pull Nur auf DS pullen + neustarten (ohne Git push)" @echo " make restart Container neustarten (ohne Rebuild)" @echo " make build Nur Docker-Image neu bauen (ohne Start)" @echo " make stop Container stoppen" @echo " make status Container-Status auf DS anzeigen" @echo "" @echo " make logs Letzte 100 Log-Zeilen" @echo " make logs-f Log-Stream (live)" @echo " make shell Bash-Shell im Container" @echo " make db SQLite-Shell auf DS" @echo "" @echo " make dev Lokaler Entwicklungsserver (ohne Docker)" @echo " make clean-cache Service Worker + Browser-Cache leeren (Push)" @echo "" # ---------------------------------------------------------- # DEPLOY: Git push → DS pull → Rebuild → Neustart # Das ist der Befehl den du am meisten nutzen wirst. # ---------------------------------------------------------- deploy: check-ssh @echo "→ Git push..." @git push $(GIT_REMOTE) main @echo "→ DS: pull + rebuild + restart..." @ssh $(DS_HOST) "cd $(DS_PATH) && \ git pull && \ sudo docker compose down && \ sudo docker compose build --no-cache && \ sudo docker compose up -d && \ echo '✓ Deploy fertig.' && \ sudo docker compose logs --tail=20" # ---------------------------------------------------------- # NUR Git push (z.B. um nur Code zu sichern) # ---------------------------------------------------------- push: git push $(GIT_REMOTE) main # ---------------------------------------------------------- # NUR auf DS deployen (ohne neuen Git push) # z.B. wenn jemand anderes gepusht hat # ---------------------------------------------------------- pull: check-ssh @ssh $(DS_HOST) "cd $(DS_PATH) && \ git pull && \ sudo docker compose down && \ sudo docker compose up -d --build && \ echo '✓ Pull + Restart fertig.'" # ---------------------------------------------------------- # Nur neustarten (kein Rebuild, kein Git) # z.B. nach .env-Änderung # ---------------------------------------------------------- restart: check-ssh @ssh $(DS_HOST) "cd $(DS_PATH) && \ sudo docker compose restart $(CONTAINER) && \ echo '✓ Container neugestartet.'" # ---------------------------------------------------------- # Nur bauen (kein Start) # ---------------------------------------------------------- build: check-ssh @ssh $(DS_HOST) "cd $(DS_PATH) && \ sudo docker compose build --no-cache" # ---------------------------------------------------------- # Stoppen # ---------------------------------------------------------- stop: check-ssh @ssh $(DS_HOST) "cd $(DS_PATH) && sudo docker compose down" # ---------------------------------------------------------- # Status # ---------------------------------------------------------- status: check-ssh @ssh $(DS_HOST) "sudo docker ps --filter name=$(CONTAINER) --format \ 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'" # ---------------------------------------------------------- # LOGS # ---------------------------------------------------------- logs: check-ssh @ssh $(DS_HOST) "sudo docker logs $(CONTAINER) --tail=100" logs-f: check-ssh @ssh $(DS_HOST) "sudo docker logs $(CONTAINER) -f" # ---------------------------------------------------------- # SHELL im Container # ---------------------------------------------------------- shell: check-ssh @ssh -t $(DS_HOST) "sudo docker exec -it $(CONTAINER) bash" # ---------------------------------------------------------- # SQLite direkt öffnen # ---------------------------------------------------------- db: check-ssh @ssh -t $(DS_HOST) "sudo docker exec -it $(CONTAINER) \ sqlite3 /data/banyaro.db" # ---------------------------------------------------------- # Lokale Entwicklung (ohne Docker, direkt auf Mac) # Voraussetzung: Python-Venv in backend/venv/ # ---------------------------------------------------------- dev: @cd backend && \ test -d venv || python3 -m venv venv && \ . venv/bin/activate && \ pip install -q -r requirements.txt && \ KI_MODE=off ENV=development \ JWT_SECRET=dev-secret \ DB_PATH=./dev.db \ uvicorn main:app --reload --port 8001 # ---------------------------------------------------------- # Service-Worker-Cache auf DS forciert leeren # (nach größeren CSS/JS-Änderungen sinnvoll) # ---------------------------------------------------------- clean-cache: @ssh $(DS_HOST) "cd $(DS_PATH) && \ sudo docker exec $(CONTAINER) \ sed -i 's/by-v[0-9]*/by-v'$$(date +%s)'/g' /app/static/sw.js && \ echo '✓ Cache-Version aktualisiert.'" @$(MAKE) restart