Deploy via rsync statt git auf DS — kein git auf DS nötig
This commit is contained in:
parent
4499055b99
commit
43c63f0e59
2 changed files with 141 additions and 141 deletions
145
Makefile
145
Makefile
|
|
@ -1,10 +1,9 @@
|
|||
# ==============================================================
|
||||
# BAN YARO — Makefile
|
||||
# Alle häufigen Operationen mit kurzen Befehlen.
|
||||
# Verwendung: make <ziel>
|
||||
# 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.
|
||||
# ==============================================================
|
||||
|
||||
# Konfiguration
|
||||
DS_HOST := ds
|
||||
DS_IP := 10.47.11.10
|
||||
DS_SSH_PORT := 22
|
||||
|
|
@ -12,108 +11,128 @@ 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
|
||||
# rsync: was NICHT auf die DS übertragen wird
|
||||
RSYNC_EXCLUDE := --exclude='.git' \
|
||||
--exclude='data/' \
|
||||
--exclude='backend/venv/' \
|
||||
--exclude='backend/__pycache__/' \
|
||||
--exclude='backend/*.pyc' \
|
||||
--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 — intern, wird von allen DS-Befehlen genutzt
|
||||
# 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 ist offline."; \
|
||||
echo " → Port in der Fritz!Box / DS-Firewall öffnen, dann erneut versuchen."; \
|
||||
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
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Standard: Hilfe anzeigen
|
||||
# Hilfe
|
||||
# ----------------------------------------------------------
|
||||
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 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 auf DS anzeigen"
|
||||
@echo " make status Container-Status 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 " 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 Entwicklungsserver (ohne Docker)"
|
||||
@echo " make clean-cache Service Worker + Browser-Cache leeren (Push)"
|
||||
@echo " make dev Lokaler Dev-Server auf Mac (Port 8001)"
|
||||
@echo " make clean-cache SW-Cache-Version erhöhen + restart"
|
||||
@echo ""
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# DEPLOY: Git push → DS pull → Rebuild → Neustart
|
||||
# Das ist der Befehl den du am meisten nutzen wirst.
|
||||
# DEPLOY — der Haupt-Befehl
|
||||
# 1. Git push (Backup)
|
||||
# 2. rsync zum DS
|
||||
# 3. Docker rebuild + restart
|
||||
# ----------------------------------------------------------
|
||||
deploy: check-ssh
|
||||
@echo "→ Git push..."
|
||||
@echo "→ Git push (Backup)..."
|
||||
@git push $(GIT_REMOTE) main
|
||||
@echo "→ DS: pull + rebuild + restart..."
|
||||
@ssh $(DS_HOST) "cd $(DS_PATH) && \
|
||||
git pull && \
|
||||
@echo "→ Sync zu DS..."
|
||||
@rsync -az --delete $(RSYNC_EXCLUDE) \
|
||||
./ $(DS_HOST):$(DS_PATH)/
|
||||
@echo "→ Docker rebuild + restart..."
|
||||
@ssh $(DS_HOST) " \
|
||||
cd $(DS_PATH) && \
|
||||
sudo docker compose down && \
|
||||
sudo docker compose build --no-cache && \
|
||||
sudo docker compose up -d && \
|
||||
echo '✓ Deploy fertig.' && \
|
||||
sudo docker compose logs --tail=20"
|
||||
sudo docker compose up -d"
|
||||
@echo ""
|
||||
@echo " ✓ Deploy fertig. Letzte Logs:"
|
||||
@ssh $(DS_HOST) "sudo docker logs $(CONTAINER) --tail=15"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# NUR Git push (z.B. um nur Code zu sichern)
|
||||
# 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..."
|
||||
@rsync -az --delete $(RSYNC_EXCLUDE) \
|
||||
./ $(DS_HOST):$(DS_PATH)/
|
||||
@echo " ✓ Sync fertig."
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# PUSH — nur Git, ohne DS-Deploy
|
||||
# ----------------------------------------------------------
|
||||
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 — kein Rebuild, nur Container neu starten
|
||||
# Nach sync von reinen Frontend-Änderungen ausreichend
|
||||
# ----------------------------------------------------------
|
||||
restart: check-ssh
|
||||
@ssh $(DS_HOST) "cd $(DS_PATH) && \
|
||||
sudo docker compose restart $(CONTAINER) && \
|
||||
echo '✓ Container neugestartet.'"
|
||||
@ssh $(DS_HOST) " \
|
||||
cd $(DS_PATH) && \
|
||||
sudo docker compose restart $(CONTAINER)"
|
||||
@echo " ✓ Neugestartet."
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Nur bauen (kein Start)
|
||||
# BUILD — nur Docker-Image neu bauen
|
||||
# ----------------------------------------------------------
|
||||
build: check-ssh
|
||||
@ssh $(DS_HOST) "cd $(DS_PATH) && \
|
||||
@ssh $(DS_HOST) " \
|
||||
cd $(DS_PATH) && \
|
||||
sudo docker compose build --no-cache"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Stoppen
|
||||
# STOP
|
||||
# ----------------------------------------------------------
|
||||
stop: check-ssh
|
||||
@ssh $(DS_HOST) "cd $(DS_PATH) && sudo docker compose down"
|
||||
@echo " ✓ Gestoppt."
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Status
|
||||
# STATUS
|
||||
# ----------------------------------------------------------
|
||||
status: check-ssh
|
||||
@ssh $(DS_HOST) "sudo docker ps --filter name=$(CONTAINER) --format \
|
||||
'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
||||
@ssh $(DS_HOST) "sudo docker ps \
|
||||
--filter name=$(CONTAINER) \
|
||||
--format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# LOGS
|
||||
|
|
@ -131,15 +150,14 @@ shell: check-ssh
|
|||
@ssh -t $(DS_HOST) "sudo docker exec -it $(CONTAINER) bash"
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# SQLite direkt öffnen
|
||||
# SQLite
|
||||
# ----------------------------------------------------------
|
||||
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 — lokaler Server auf Mac (kein Docker, kein DS)
|
||||
# ----------------------------------------------------------
|
||||
dev:
|
||||
@cd backend && \
|
||||
|
|
@ -152,12 +170,13 @@ dev:
|
|||
uvicorn main:app --reload --port 8001
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Service-Worker-Cache auf DS forciert leeren
|
||||
# (nach größeren CSS/JS-Änderungen sinnvoll)
|
||||
# CACHE leeren — SW-Version erhöhen, dann restart
|
||||
# Nach größeren CSS/JS-Änderungen wenn SW gecacht hat
|
||||
# ----------------------------------------------------------
|
||||
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.'"
|
||||
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."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue