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]>
166 lines
6.4 KiB
Markdown
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.
|