This commit is contained in:
team3
2026-08-29 11:32:23 +02:00
parent f5aeaadc42
commit 1130575e43
2 changed files with 40 additions and 1 deletions

View File

@@ -1,4 +1,4 @@
.PHONY: install dev stop sync build prod logs down
.PHONY: install dev stop sync build prod logs down push pull
install:
cd backend && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
@@ -31,3 +31,28 @@ logs:
down:
docker compose down
# ── Datenbank hin und her (lokal ausführen) ───────────────────────────────────
SERVER = root@178.104.67.87
REMOTE = /var/www/horror
LOKAL = backend/horror.db
# Eine laufende App schreibt weiter, während kopiert wird. Deshalb erst eine
# in sich stimmige Kopie ziehen, statt die Datei direkt anzufassen.
SICHERN = import sqlite3,sys; q=sqlite3.connect(sys.argv[1]); z=sqlite3.connect(sys.argv[2]); q.backup(z); z.close(); q.close()
push:
@echo "Überschreibt die Datenbank auf dem Server, auch die Vorschläge."
backend/.venv/bin/python -c '$(SICHERN)' $(LOKAL) /tmp/horror-push.db
ssh $(SERVER) 'mkdir -p $(REMOTE)/data && [ ! -f $(REMOTE)/data/horror.db ] || cp $(REMOTE)/data/horror.db $(REMOTE)/data/horror.db.bak'
scp /tmp/horror-push.db $(SERVER):$(REMOTE)/data/horror.db
@rm -f /tmp/horror-push.db
@echo "Fertig. Die alte Datenbank liegt als data/horror.db.bak daneben."
pull:
@echo "Überschreibt deine lokale Datenbank."
ssh $(SERVER) 'python3 -c "$(SICHERN)" $(REMOTE)/data/horror.db /tmp/horror-pull.db'
@[ ! -f $(LOKAL) ] || cp $(LOKAL) $(LOKAL).bak
scp $(SERVER):/tmp/horror-pull.db $(LOKAL)
@ssh $(SERVER) 'rm -f /tmp/horror-pull.db'
@echo "Fertig. Deine alte Datenbank liegt als $(LOKAL).bak daneben."

View File

@@ -52,6 +52,20 @@ make down
Die SQLite-Datei liegt im Bind-Mount `./data`, überlebt also jeden Rebuild.
### Datenbank abgleichen
```bash
make push # lokaler Stand → Server
make pull # Server-Stand → lokal
```
Beide ziehen erst eine in sich stimmige Kopie über SQLites `backup`, statt die
Datei einer laufenden App direkt zu kopieren. Die überschriebene Datenbank
bleibt als `.bak` daneben liegen.
`make push` überschreibt auch die Vorschläge auf dem Server. Wer schon einen
Film fürs Rad eingereicht hat, verliert ihn.
Ohne Docker geht es auch:
```bash