diff --git a/.gitignore b/.gitignore index aac3a2f..2e1a7b7 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,17 @@ Thumbs.db # dotenv / Umgebungsvariablen .env +# SQLite-Datenbanken NIE versionieren. +# Die Produktivdatenbank liegt auf dem Server unter demselben Pfad +# (backend/data/rss_news.db, 95 MB). Solange die Datei im Repo lag, haette +# jeder Commit, der sie mitnimmt, beim naechsten Deploy die Live-Daten mit +# einem Entwicklungsstand ueberschrieben. init_db() legt die Datei beim +# ersten Start selbst an. +*.db +*.db-wal +*.db-shm +backend/data/ + # JSON-Datenbanken / Zwischenspeicherung # *.json # !feeds.json # optional entfernbar, wenn du Beispielfeeds mit versionieren willst diff --git a/backend/data/rss_news.db b/backend/data/rss_news.db deleted file mode 100644 index 7929307..0000000 Binary files a/backend/data/rss_news.db and /dev/null differ diff --git a/docs/AUTOMATION.md b/docs/AUTOMATION.md index 46c4f86..241a433 100644 --- a/docs/AUTOMATION.md +++ b/docs/AUTOMATION.md @@ -198,14 +198,45 @@ Alle externen Endpunkte benötigen den Header `X-API-Key: `. --- -## Deployment (Hetzner via GitHub) +## Deployment (Hetzner) -Das Deployment läuft automatisch über GitHub Actions beim Push auf `main`: +**Achtung: Das Deployment läuft derzeit NICHT automatisch.** Stand 24.08.2026 +geprüft — `.github/workflows/deploy.yml` ist GitHub-Actions-Syntax, das Remote +ist aber Forgejo (`git.giertz.biz`), und es greift kein Runner. Zusätzlich hat +der Server keinen Deploy-Key für das Repo: `git pull origin main` scheitert dort +mit `Permission denied (publickey)`. Ein Push auf `main` bewirkt also nichts. -1. GitHub Action führt Tests aus -2. Bei Erfolg: SSH-Deploy auf Hetzner -3. `pip install -r requirements.txt` -4. Systemd-Dienst `rss-app` neu starten +Bis das repariert ist, wird von Hand deployt. Weg über ein Git-Bundle, damit die +Historie auf dem Server korrekt bleibt (statt Dateien zu kopieren und die Stände +unbemerkt auseinanderdriften zu lassen): + +```bash +# lokal, = Commit, auf dem der Server steht +git bundle create /tmp/deploy.bundle ..main +scp /tmp/deploy.bundle hetzner:/root/deploy.bundle + +# auf dem Server +cd /opt/rss-news +git pull /root/deploy.bundle main +systemctl restart rss-news-api # zieht die DB-Migration automatisch nach +``` + +`pip install` nur, wenn sich `requirements.txt` oder `backend/requirements.txt` +tatsächlich geändert haben. + +Dienst: `rss-news-api` (systemd), `WorkingDirectory=/opt/rss-news`, +uvicorn auf `127.0.0.1:8790`, davor der Reverse Proxy. + +**Vor jedem Deploy die Datenbank sichern:** + +```bash +ssh hetzner "cp -a /opt/rss-news/backend/data/rss_news.db \ + /root/rss-news-backups/rss_news.db.$(date +%F-%H%M)" +``` + +Dauerhafte Reparatur (offen): entweder einen Deploy-Key auf dem Server +hinterlegen und in Forgejo eintragen, oder den Workflow nach +`.forgejo/workflows/` umziehen und einen Runner registrieren. Workflow-Dateien: `.github/workflows/test.yml` und `.github/workflows/deploy.yml` diff --git a/docs/TODO.md b/docs/TODO.md index f20d39a..989cec3 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -34,6 +34,9 @@ - [x] Manuelle Rechtsfreigabe als Publish-Gate ## Betrieb +- [ ] Deploy reparieren: Server hat keinen Deploy-Key (`git pull` scheitert), Forgejo hat keinen + Runner fuer `.github/workflows/deploy.yml`. Bis dahin Handbetrieb per Bundle, siehe `docs/AUTOMATION.md`. +- [x] `backend/data/rss_news.db` aus der Versionierung genommen (Live-DB 95 MB, Repo-Stand 200 KB) - [ ] Systemd-Service(s) fuer API/Worker erstellen - [ ] Nginx-Routing fuer neue App einrichten - [ ] Healthcheck-Endpunkte + Monitoring einrichten