Initial commit: Rapport Website (Hugo + Hextra)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
---
|
||||
title: Datenhaltung & Backup
|
||||
linkTitle: Datenhaltung
|
||||
weight: 5
|
||||
toc: true
|
||||
---
|
||||
|
||||
Wo Rapport seine Daten speichert, wie du sie sicherst und wiederherstellst.
|
||||
|
||||
> **Diese Seite beschreibt die Desktop-App (Single-User).** Wer im Team arbeitet und Rapport gegen einen [Rapport Server](../../server/) betreibt, sichert stattdessen die Postgres-Datenbank — siehe [Rapport Server § Backup](../../server/#backup).
|
||||
|
||||
## Speicherort (Desktop-App)
|
||||
|
||||
Die Desktop-App speichert **alles lokal** — keine Cloud, kein Server.
|
||||
|
||||
### macOS
|
||||
|
||||
```text
|
||||
~/Library/Application Support/com.rapport.app/
|
||||
```
|
||||
|
||||
Dort liegt eine einzelne **`localStorage`**-Datenbank des WebView, in der **alle** Rapport-Daten als JSON unter dem Key `studio_data_v1` gespeichert sind:
|
||||
|
||||
- Bürodaten, Logo, IBAN
|
||||
- Mitarbeiter, Kunden, Projekte, Offerten
|
||||
- Zeit-Einträge, Rechnungen
|
||||
- Spesen, Lohnabrechnungen, Protokolle
|
||||
- App-Einstellungen
|
||||
|
||||
> **Konsequenz:** Wer den Application-Support-Ordner kopiert, hat ein vollständiges Backup. Wer ihn löscht, verliert alle Daten.
|
||||
|
||||
### Warum localStorage?
|
||||
|
||||
In der Desktop-App ist Rapport eine **Single-User-Anwendung**. localStorage ist dafür:
|
||||
|
||||
- **Schnell** — keine Datenbank-Roundtrips
|
||||
- **Einfach** — keine Migration nötig, JSON-Schema im Code
|
||||
- **Portabel** — eine Datei → ein Backup
|
||||
|
||||
Für **Multi-User-Betrieb** existiert [Rapport Server](../../server/) — Postgres + Auth + Realtime in einem Docker-Compose. Wechsel zwischen Desktop- und Server-Modus erfolgt im Login-Bildschirm der App.
|
||||
|
||||
## Backup-Strategien
|
||||
|
||||
### A · Einfach (manuell)
|
||||
|
||||
Den ganzen Ordner kopieren:
|
||||
|
||||
```bash
|
||||
cp -R "~/Library/Application Support/com.rapport.app" \
|
||||
"~/Documents/Rapport-Backup-$(date +%Y%m%d)"
|
||||
```
|
||||
|
||||
→ Auf USB-Stick, externen Datenträger oder in die Cloud.
|
||||
|
||||
### B · Time Machine
|
||||
|
||||
Wenn Time Machine läuft, ist der Ordner automatisch dabei. Versionierung inbegriffen.
|
||||
|
||||
> **Einschränkung:** Time Machine sichert nur lokal/USB. Für off-site-Backup separat sorgen.
|
||||
|
||||
### C · Cron-Job (täglich automatisch)
|
||||
|
||||
```bash
|
||||
# In ~/Library/LaunchAgents/com.rapport.backup.plist hinterlegen
|
||||
# oder als crontab-Eintrag:
|
||||
0 22 * * * rsync -a "$HOME/Library/Application Support/com.rapport.app/" \
|
||||
"$HOME/Backups/rapport/$(date +\%Y\%m\%d)/"
|
||||
```
|
||||
|
||||
### D · iCloud Drive (off-site)
|
||||
|
||||
Application-Support liegt **nicht** automatisch in iCloud. Wer das will:
|
||||
|
||||
```bash
|
||||
# Symlink anlegen
|
||||
mkdir -p "~/iCloud Drive/Rapport"
|
||||
ln -s "~/Library/Application Support/com.rapport.app" "~/iCloud Drive/Rapport/data"
|
||||
```
|
||||
|
||||
> **Achtung:** iCloud-Sync mit aktiver App kann zu **Race-Conditions** führen. Besser den Sync zeitversetzt (z. B. nachts via Cron).
|
||||
|
||||
## Wiederherstellung
|
||||
|
||||
### Vollständig (Rapport komplett tot)
|
||||
|
||||
1. Rapport beenden (Cmd+Q, nicht nur Fenster zu)
|
||||
2. Aktuellen Ordner umbenennen (falls noch da):
|
||||
```bash
|
||||
mv "~/Library/Application Support/com.rapport.app" \
|
||||
"~/Library/Application Support/com.rapport.app.bak"
|
||||
```
|
||||
3. Backup-Ordner zurück kopieren:
|
||||
```bash
|
||||
cp -R "~/Documents/Rapport-Backup-20260523" \
|
||||
"~/Library/Application Support/com.rapport.app"
|
||||
```
|
||||
4. Rapport starten
|
||||
|
||||
### Selektiv (nur einzelne Daten)
|
||||
|
||||
Da alle Daten in **einem JSON unter `studio_data_v1`** liegen, ist selektive Wiederherstellung **manuell**:
|
||||
|
||||
1. Backup-`localStorage`-Datei öffnen (WebKit-Format → mit Tool wie [WebKit Storage Inspector] lesen, oder via Rapport DevTools)
|
||||
2. Gewünschte Felder in die aktuelle Instanz übertragen
|
||||
|
||||
In der Praxis: meistens lohnt sich die **vollständige** Wiederherstellung mehr.
|
||||
|
||||
## Export-Funktionen (in der App)
|
||||
|
||||
Aus Rapport selbst:
|
||||
|
||||
| Was | Wo | Format |
|
||||
|---|---|---|
|
||||
| **Zeit-Auswertung** | Zeit → Export | CSV |
|
||||
| **Rechnung** | Rechnung → PDF | PDF (inkl. QR) |
|
||||
| **Offerte** | Offerte → PDF | PDF |
|
||||
| **Lohnabrechnung** | Mitarbeiter → PDF | PDF |
|
||||
| **Jahres-Buchhaltung** | Buchhaltung → Export | CSV |
|
||||
|
||||
Die Exports sind für externe Verwendung (Buchhalter, Treuhänder, Archiv) gedacht — kein Full-Backup.
|
||||
|
||||
## Schema-Migrationen
|
||||
|
||||
Bei Updates kann sich das Datenformat ändern. Rapport hat einen **Migrations-Mechanismus**: beim Start prüft die App, ob das gespeicherte Format dem aktuellen entspricht, und migriert es automatisch.
|
||||
|
||||
Code: [src/storage/migrations.js](https://git.kgva.ch/karim/RAPPORT/src/branch/main/APP/src/storage/migrations.js).
|
||||
|
||||
> **Empfehlung:** Vor jedem grösseren Update ein Backup machen — Migrationen sind getestet, aber 100%-Sicherheit gibt es nicht.
|
||||
|
||||
## Was wird **nicht** gespeichert?
|
||||
|
||||
- **WebView-Cache** — `~/Library/Caches/com.rapport.app/` und `~/Library/WebKit/com.rapport.app/` sind sicher zu löschen (UI-Caches, regenerieren sich)
|
||||
- **App-Updates** — werden bei Bedarf erneut runtergeladen
|
||||
- **Logs** — `~/Library/Logs/com.rapport.app/` (geplant, derzeit nicht geschrieben)
|
||||
|
||||
## Datenmenge
|
||||
|
||||
Typische Grössen pro Bürojahr:
|
||||
|
||||
| Inhalt | Grösse |
|
||||
|---|---|
|
||||
| Logo (PNG/SVG) | 50 KB – 1 MB |
|
||||
| 1 Jahr Zeiterfassung (1 MA) | ~ 80 KB |
|
||||
| 1 Jahr Zeiterfassung (5 MA) | ~ 400 KB |
|
||||
| 50 Projekte mit je 5 Rechnungen | ~ 800 KB |
|
||||
| **Total typisches Solo-Büro / Jahr** | **~ 1–2 MB** |
|
||||
|
||||
localStorage hat Limits (i. d. R. ~10 MB pro Origin). Für Solo-Büros reicht das problemlos für viele Jahre. Wer das Limit erreicht oder im Team arbeitet → [Rapport Server](../../server/).
|
||||
Reference in New Issue
Block a user