diff --git a/Makefile b/Makefile index acde039..39f3dff 100644 --- a/Makefile +++ b/Makefile @@ -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." diff --git a/README.md b/README.md index 961dd92..111e24b 100644 --- a/README.md +++ b/README.md @@ -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