180 lines
6.3 KiB
Makefile
180 lines
6.3 KiB
Makefile
# ==============================================================
|
|
# BAN YARO — Makefile
|
|
# Deploy-Strategie: rsync vom Mac zur DS (kein git auf DS nötig)
|
|
# Git wird nur lokal auf dem Mac und für Forgejo-Backup genutzt.
|
|
# ==============================================================
|
|
|
|
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
|
|
DOCKER := sudo /usr/local/bin/docker
|
|
|
|
# tar: was NICHT auf die DS übertragen wird
|
|
TAR_EXCLUDE := --exclude='.git' \
|
|
--exclude='./data' \
|
|
--exclude='./backend/venv' \
|
|
--exclude='./backend/__pycache__' \
|
|
--exclude='./.env' \
|
|
--exclude='./*.db' \
|
|
--exclude='./.DS_Store'
|
|
|
|
.PHONY: help deploy sync push restart build stop status \
|
|
logs logs-f shell db dev clean-cache check-ssh
|
|
|
|
# ----------------------------------------------------------
|
|
# SSH-Prüfung — Abhängigkeit aller DS-Befehle
|
|
# ----------------------------------------------------------
|
|
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 offline."; \
|
|
echo " → Port in Fritz!Box / DS-Firewall öffnen, dann erneut versuchen."; \
|
|
echo ""; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# ----------------------------------------------------------
|
|
# Hilfe
|
|
# ----------------------------------------------------------
|
|
help:
|
|
@echo ""
|
|
@echo " Ban Yaro — verfügbare Befehle:"
|
|
@echo ""
|
|
@echo " make deploy Sync + Rebuild + Neustart (häufigster Befehl)"
|
|
@echo " make sync Nur Dateien zur DS übertragen (ohne Rebuild)"
|
|
@echo " make push Nur Git push zu Forgejo (Backup/Versionierung)"
|
|
@echo " make restart Container neustarten (kein Rebuild)"
|
|
@echo " make build Docker neu bauen (ohne Neustart)"
|
|
@echo " make stop Container stoppen"
|
|
@echo " make status Container-Status anzeigen"
|
|
@echo ""
|
|
@echo " make logs Letzte 100 Zeilen"
|
|
@echo " make logs-f Live-Log-Stream"
|
|
@echo " make shell Bash im Container"
|
|
@echo " make db SQLite-Shell"
|
|
@echo ""
|
|
@echo " make dev Lokaler Dev-Server auf Mac (Port 8001)"
|
|
@echo " make clean-cache SW-Cache-Version erhöhen + restart"
|
|
@echo ""
|
|
|
|
# ----------------------------------------------------------
|
|
# DEPLOY — der Haupt-Befehl
|
|
# 1. Git push (Backup)
|
|
# 2. rsync zum DS
|
|
# 3. Docker rebuild + restart
|
|
# ----------------------------------------------------------
|
|
deploy: check-ssh
|
|
@echo "→ Git push (Backup)..."
|
|
@git push $(GIT_REMOTE) main
|
|
@echo "→ Sync zu DS..."
|
|
@COPYFILE_DISABLE=1 tar czf - $(TAR_EXCLUDE) . | ssh $(DS_HOST) "tar xzf - -C $(DS_PATH)/"
|
|
@echo "→ Docker rebuild + restart..."
|
|
@ssh $(DS_HOST) " \
|
|
cd $(DS_PATH) && \
|
|
$(DOCKER) compose down && \
|
|
$(DOCKER) compose build --no-cache && \
|
|
$(DOCKER) compose up -d"
|
|
@echo ""
|
|
@echo " ✓ Deploy fertig. Letzte Logs:"
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER) --tail=15"
|
|
|
|
# ----------------------------------------------------------
|
|
# SYNC — nur Dateien übertragen, kein Docker
|
|
# Sinnvoll für reine Frontend-Änderungen (CSS, JS, HTML)
|
|
# danach nur make restart statt make deploy
|
|
# ----------------------------------------------------------
|
|
sync: check-ssh
|
|
@echo "→ Sync zu DS..."
|
|
@COPYFILE_DISABLE=1 tar czf - $(TAR_EXCLUDE) . | ssh $(DS_HOST) "tar xzf - -C $(DS_PATH)/"
|
|
@echo " ✓ Sync fertig."
|
|
|
|
# ----------------------------------------------------------
|
|
# PUSH — nur Git, ohne DS-Deploy
|
|
# ----------------------------------------------------------
|
|
push:
|
|
git push $(GIT_REMOTE) main
|
|
|
|
# ----------------------------------------------------------
|
|
# RESTART — kein Rebuild, nur Container neu starten
|
|
# Nach sync von reinen Frontend-Änderungen ausreichend
|
|
# ----------------------------------------------------------
|
|
restart: check-ssh
|
|
@ssh $(DS_HOST) " \
|
|
cd $(DS_PATH) && \
|
|
$(DOCKER) compose restart $(CONTAINER)"
|
|
@echo " ✓ Neugestartet."
|
|
|
|
# ----------------------------------------------------------
|
|
# BUILD — nur Docker-Image neu bauen
|
|
# ----------------------------------------------------------
|
|
build: check-ssh
|
|
@ssh $(DS_HOST) " \
|
|
cd $(DS_PATH) && \
|
|
$(DOCKER) compose build --no-cache"
|
|
|
|
# ----------------------------------------------------------
|
|
# STOP
|
|
# ----------------------------------------------------------
|
|
stop: check-ssh
|
|
@ssh $(DS_HOST) "cd $(DS_PATH) && $(DOCKER) compose down"
|
|
@echo " ✓ Gestoppt."
|
|
|
|
# ----------------------------------------------------------
|
|
# STATUS
|
|
# ----------------------------------------------------------
|
|
status: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) ps \
|
|
--filter name=$(CONTAINER) \
|
|
--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
|
|
|
# ----------------------------------------------------------
|
|
# LOGS
|
|
# ----------------------------------------------------------
|
|
logs: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER) --tail=100"
|
|
|
|
logs-f: check-ssh
|
|
@ssh $(DS_HOST) "$(DOCKER) logs $(CONTAINER) -f"
|
|
|
|
# ----------------------------------------------------------
|
|
# SHELL im Container
|
|
# ----------------------------------------------------------
|
|
shell: check-ssh
|
|
@ssh -t $(DS_HOST) "$(DOCKER) exec -it $(CONTAINER) bash"
|
|
|
|
# ----------------------------------------------------------
|
|
# SQLite
|
|
# ----------------------------------------------------------
|
|
db: check-ssh
|
|
@ssh -t $(DS_HOST) "$(DOCKER) exec -it $(CONTAINER) \
|
|
sqlite3 /data/banyaro.db"
|
|
|
|
# ----------------------------------------------------------
|
|
# DEV — lokaler Server auf Mac (kein Docker, kein DS)
|
|
# ----------------------------------------------------------
|
|
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
|
|
|
|
# ----------------------------------------------------------
|
|
# CACHE leeren — SW-Version erhöhen, dann restart
|
|
# Nach größeren CSS/JS-Änderungen wenn SW gecacht hat
|
|
# ----------------------------------------------------------
|
|
clean-cache: check-ssh
|
|
@NEW_VER="by-v$$(date +%s)"; \
|
|
ssh $(DS_HOST) " \
|
|
sed -i \"s/by-v[0-9]*/$$NEW_VER/g\" \
|
|
$(DS_PATH)/backend/static/sw.js"
|
|
@$(MAKE) restart
|
|
@echo " ✓ Cache-Version erhöht."
|