Files
dogfather-universe/WIEDERHERSTELLUNG.md
T
DogFatherGitandClaude Opus 5 1f2823f35a Wiederherstellung: Anleitung auf den automatischen Lauf umgestellt
Der Abschnitt beschrieb noch einen Befehl, den man woechentlich selbst
eintippt. Seit die Windows-Aufgabe laeuft, stimmt das nicht mehr -- und
eine Anleitung, die etwas Falsches behauptet, ist schlimmer als keine.

Dazu ein neuer Abschnitt: woran man sieht, dass es noch laeuft.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-31 18:35:56 +02:00

166 lines
6.4 KiB
Markdown

# Wiederherstellung des Creator Workspace
Für den Tag, an dem etwas kaputt ist. Geschrieben, damit sie auch dann
funktioniert, wenn man aufgeregt ist und keine Zeit zum Nachdenken hat.
**Der wichtigste Satz zuerst:** Die Datei `workspace.db` allein ist **nicht** die
Datenbank. Im WAL-Betrieb stehen die neuesten Änderungen in `workspace.db-wal`.
Wer nur die `.db` kopiert, kopiert unter Umständen **nichts** — genau das war am
31.08.2026 der Fall (Datenbank 4 KB, WAL 2,1 MB).
Deshalb: **Nie Dateien kopieren. Immer die fertigen Sicherungen benutzen.**
---
## Wo alles liegt
| Was | Wo |
|---|---|
| Datenbank | `/home/dogiweb/workspace-daten/workspace.db` |
| Hochgeladene Dateien | `/home/dogiweb/workspace-daten/dateien/` |
| Wissens-Bibliothek (PDFs) | `/home/dogiweb/workspace-daten/wissen/` |
| Sicherungen (Server) | `/home/dogiweb/workspace-daten/sicherungen/` |
| Sicherungen (dieser PC) | `~/Documents/Obelix/Sicherungen/workspace/` |
Aufgehoben werden **7 tägliche, 4 wöchentliche, 6 monatliche**. Geschrieben wird
jede Nacht ab 3 Uhr, geprüft direkt danach.
---
## Fall 1: „Ich habe aus Versehen etwas gelöscht"
Nichts überstürzen. Die Sicherung von heute Nacht hat es noch.
**Erst nachsehen, ob es sich lohnt** — ohne irgendetwas anzufassen:
```
ssh dogfather-server "cd /home/dogiweb/workspace-daten/sicherungen && ls -la && for f in *.db; do echo \"--- \$f\"; sqlite3 \$f 'SELECT COUNT(*) FROM personen; SELECT COUNT(*) FROM aufgaben;'; done"
```
Dann weiter mit Fall 2.
---
## Fall 2: Datenbank zurückspielen
**Ein Block, von oben nach unten.** Er stoppt den Dienst, legt den kaputten Stand
zur Seite (nicht löschen — vielleicht braucht man ihn noch), spielt die Sicherung
ein, prüft sie und startet erst dann wieder.
`DATUM` vorher auf die gewünschte Sicherung ändern.
```
ssh dogfather-server 'DATUM=2026-08-31; S=/home/dogiweb/workspace-daten; sudo systemctl stop dogiweb.service && sleep 2 && mv $S/workspace.db $S/kaputt-$(date +%Y%m%d%H%M).db 2>/dev/null; rm -f $S/workspace.db-wal $S/workspace.db-shm; cp $S/sicherungen/taeglich-$DATUM.db $S/workspace.db && chown dogiweb:dogiweb $S/workspace.db && sqlite3 $S/workspace.db "PRAGMA integrity_check; PRAGMA foreign_key_check; SELECT COUNT(*) || \" Personen\" FROM personen;" && sudo systemctl start dogiweb.service && sleep 3 && systemctl is-active dogiweb.service'
```
Danach **auf der echten Domain nachsehen**, nicht nur auf die Erfolgsmeldung
vertrauen:
```
curl -s -o /dev/null -w "%{http_code}\n" https://dogfather-universe.com/workspace/ && curl -sI https://dogfather-universe.com/ | grep -i via
```
**Wichtig:** `mv` statt `rm`. Die kaputte Datei bleibt als `kaputt-…db` liegen.
Wenn sich herausstellt, dass die Sicherung älter war als gedacht, kann man
daraus noch Einzelnes herausholen. Später von Hand aufräumen.
---
## Fall 3: Der Server ist ganz weg
Dann liegt die letzte Sicherung auf diesem PC. Zuerst holen, was noch geht —
falls der Server noch antwortet:
```
bash ~/Documents/Obelix/DogiHompage/tools/sicherung-holen.sh
```
Wiederaufbau in dieser Reihenfolge:
1. Server neu aufsetzen, Benutzer `dogiweb` anlegen (**macht Filipe**, nicht ich —
siehe `CLAUDE.md`)
2. `git clone` von Gitea nach `/home/dogiweb/dogfather-universe`
3. Ordner `/home/dogiweb/workspace-daten/` anlegen
4. Neueste Sicherung von diesem PC hochladen:
```
scp ~/Documents/Obelix/Sicherungen/workspace/taeglich-*.db dogfather-server:/home/dogiweb/workspace-daten/workspace.db
```
5. `dogiweb.service` und Caddy einrichten, Dienst starten
6. Auf `https://dogfather-universe.com/workspace/` anmelden und prüfen
7. Hochgeladene Dateien und Bibliothek zurückspielen — die stecken **nicht** in
der Datenbanksicherung, sondern liegen als Dateien daneben:
```
scp -r ~/Documents/Obelix/Sicherungen/workspace/dateien/. dogfather-server:/home/dogiweb/workspace-daten/dateien/ && scp -r ~/Documents/Obelix/Sicherungen/workspace/wissen/. dogfather-server:/home/dogiweb/workspace-daten/wissen/
```
---
## Sicherungen auf diesen PC holen
**Das läuft von allein** — täglich um 13:30 über die Windows-Aufgabenplanung
(„Dogfather Workspace - Sicherung holen"). War der Rechner zu der Zeit aus, holt
Windows den Lauf beim nächsten Hochfahren nach.
Eingerichtet wurde das einmalig mit:
```
powershell -ExecutionPolicy Bypass -File ~/Documents/Obelix/DogiHompage/tools/sicherung-einrichten.ps1
```
Von Hand anstoßen geht trotzdem jederzeit:
```
bash ~/Documents/Obelix/DogiHompage/tools/sicherung-holen.sh
```
Holt **drei** Dinge: die Datenbanksicherungen, die hochgeladenen Dateien und die
PDFs der Bibliothek. Prüft danach jede Datenbankdatei sofort auf Unversehrtheit und
darauf, dass wirklich Personen darin stehen — und sagt es, wenn etwas nicht stimmt.
**Warum die Dateien nur hier landen und nicht auch auf dem Server:** Eine zweite
Kopie auf derselben Platte hilft gegen nichts, was die erste nicht schon überlebt
hätte. Und weil `scp` nie löscht, bleibt ein hier einmal geholtes PDF erhalten,
auch wenn es auf dem Server verschwindet.
---
## Von Hand sichern, bevor man etwas Größeres anfasst
Im Workspace unter **Automationen → Sicherung & Zustand → „Jetzt sichern"**.
Dauert Millisekunden. Oder über die Kommandozeile:
```
ssh dogfather-server "sudo systemctl status dogiweb.service --no-pager | head -3"
```
---
## Was noch fehlt
- **Nur ein Ort.** Server und dieser PC stehen beide bei uns. Gegen Feuer oder
Diebstahl hilft das nicht. Eine verschlüsselte Kopie an einem dritten Ort wäre
die Ausbaustufe — kostenlos möglich, aber eine eigene Entscheidung.
---
## Woran man sieht, dass es noch läuft
Im Workspace unter **Automationen → Sicherung & Zustand**. Dort steht in der Zeile
**„Kopie außer Haus"**, wann dieser Rechner zuletzt geholt hat.
Kommt zehn Tage lang nichts, wird der Kasten gelb und nennt den Grund. Das ist der
eigentliche Zweck der Rückmeldung: Eine Sicherung, die still aufhört zu laufen, ist
gefährlicher als gar keine — weil man sich auf sie verlässt.
Prüfen, ob die Aufgabe eingerichtet ist:
```
powershell -Command "Get-ScheduledTaskInfo -TaskName 'Dogfather Workspace - Sicherung holen' | Select-Object LastRunTime, LastTaskResult, NextRunTime"
```
`LastTaskResult` muss **0** sein. Jeder Lauf steht außerdem in
`~/Documents/Obelix/Sicherungen/workspace/lauf-protokoll.txt` — auch die
gescheiterten. Ohne das wäre hinterher nicht zu klären, ob die Aufgabe gar nicht
lief oder ob sie lief und scheiterte. Das sind zwei sehr verschiedene Fehler.