Deploy-Skripte: Makefile, setup-ds.sh, new-feature.sh

This commit is contained in:
rene 2026-04-12 16:43:16 +02:00
parent 00be2bbcd5
commit e364e43480
3 changed files with 370 additions and 0 deletions

147
Makefile Normal file
View file

@ -0,0 +1,147 @@
# ==============================================================
# BAN YARO — Makefile
# Alle häufigen Operationen mit kurzen Befehlen.
# Verwendung: make <ziel>
# ==============================================================
# Konfiguration
DS_HOST := ds
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
# ----------------------------------------------------------
# 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:
@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:
@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:
@ssh $(DS_HOST) "cd $(DS_PATH) && \
sudo docker compose restart $(CONTAINER) && \
echo '✓ Container neugestartet.'"
# ----------------------------------------------------------
# Nur bauen (kein Start)
# ----------------------------------------------------------
build:
@ssh $(DS_HOST) "cd $(DS_PATH) && \
sudo docker compose build --no-cache"
# ----------------------------------------------------------
# Stoppen
# ----------------------------------------------------------
stop:
@ssh $(DS_HOST) "cd $(DS_PATH) && sudo docker compose down"
# ----------------------------------------------------------
# Status
# ----------------------------------------------------------
status:
@ssh $(DS_HOST) "sudo docker ps --filter name=$(CONTAINER) --format \
'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
# ----------------------------------------------------------
# LOGS
# ----------------------------------------------------------
logs:
@ssh $(DS_HOST) "sudo docker logs $(CONTAINER) --tail=100"
logs-f:
@ssh $(DS_HOST) "sudo docker logs $(CONTAINER) -f"
# ----------------------------------------------------------
# SHELL im Container
# ----------------------------------------------------------
shell:
@ssh -t $(DS_HOST) "sudo docker exec -it $(CONTAINER) bash"
# ----------------------------------------------------------
# SQLite direkt öffnen
# ----------------------------------------------------------
db:
@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