163 lines
5.8 KiB
Makefile
163 lines
5.8 KiB
Makefile
# ==============================================================
|
|
# BAN YARO — Makefile
|
|
# Alle häufigen Operationen mit kurzen Befehlen.
|
|
# Verwendung: make <ziel>
|
|
# ==============================================================
|
|
|
|
# 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
|