Files
2026-05-26 11:52:03 +02:00

149 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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** | **~ 12 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/).