Includes CACC/FINMA legal processes, updated AGB with PowerOn AG stammdaten, and internal legal and best-practice analysis report. Co-authored-by: Cursor <cursoragent@cursor.com>
183 lines
7.5 KiB
Markdown
183 lines
7.5 KiB
Markdown
# Datenbank-Handling: Exports, Imports, Backups & Datensicherung
|
|
|
|
Dieses Dokument beschreibt, wie die PowerOn-Plattform ihre Datenbanken verwaltet — von der strukturierten Datensicherung über flexible Export- und Import-Werkzeuge bis hin zur sicheren Wiederherstellung.
|
|
|
|
---
|
|
|
|
## 1. Datenbankübersicht
|
|
|
|
Die Plattform betreibt **13 separate Datenbanken** auf dem Datenbankserver `db.poweron.swiss`. Jede Datenbank gehört einem fachlichen Bereich:
|
|
|
|
| Datenbank | Inhalt |
|
|
|---|---|
|
|
| `poweron_app` | Benutzer, Mandate, Berechtigungen, Features — Kern der Plattform |
|
|
| `poweron_management` | Workflows, Prompts, Verbindungen (Connections) |
|
|
| `poweron_billing` | Abonnements, Rechnungen, Stripe-Daten |
|
|
| `poweron_chat` | Chat-Konversationen und Nachrichten |
|
|
| `poweron_chatbot` | Chatbot-Feature: Konversationen, Logs |
|
|
| `poweron_knowledge` | RAG-Wissensdatenbank, Dokumentenindizes |
|
|
| `poweron_workspace` | Workspace-Daten |
|
|
| `poweron_trustee` | Treuhand-spezifische Daten |
|
|
| `poweron_realestate` | Immobilien-Daten |
|
|
| `poweron_commcoach` | CommCoach-Feature |
|
|
| `poweron_neutralization` | Content-Neutralisierung |
|
|
| `poweron_teamsbot` | Microsoft Teams Bot |
|
|
| `poweron_test` | Testdaten (wird bei Exports ausgeschlossen) |
|
|
|
|
---
|
|
|
|
## 2. Export
|
|
|
|
Ein Export erstellt eine vollständige Kopie aller Daten in einem lesbaren JSON-Format. Er dient als Grundlage für Backups, Migrationen zwischen Umgebungen (z. B. Prod → Int) und als Sicherungspunkt vor grösseren Änderungen.
|
|
|
|
### 2.1 Export via Admin-UI (empfohlen)
|
|
|
|
Im SysAdmin-Bereich der Plattform gibt es einen integrierten Export-Button. Er erzeugt eine JSON-Datei, die direkt heruntergeladen wird.
|
|
|
|
- **Zugriff:** Nur für SysAdmins (höchste Berechtigungsstufe)
|
|
- **Umfang:** Alle Datenbanken oder einzelne auswählbar
|
|
- **Dateiname:** `migration_backup_YYYY-MM-DD_HH-MM.json`
|
|
- **Rate-Limit:** Max. 2 Exports pro Minute (Schutzmassnahme gegen versehentliche Mehrfachausführung)
|
|
|
|
Auch sehr grosse Datenbanken werden sicher übertragen, ohne dass der Server dabei überlastet wird.
|
|
|
|
### 2.2 Export via Script (für Entwickler / Server-Zugriff)
|
|
|
|
Direkt auf dem Server kann das Export-Script ausgeführt werden:
|
|
|
|
```bash
|
|
ssh ubuntu@api.poweron.swiss
|
|
cd /srv/gateway/current
|
|
source .venv/bin/activate
|
|
|
|
# Alle Datenbanken exportieren
|
|
python scripts/script_db_export_migration.py --pretty
|
|
|
|
# Nur bestimmte Datenbanken
|
|
python scripts/script_db_export_migration.py --db poweron_app,poweron_management
|
|
|
|
# Ohne Metadaten (kleiner, für Archivierung)
|
|
python scripts/script_db_export_migration.py --exclude Token,AuthEvent
|
|
|
|
# Mit Zusammenfassung (zeigt Tabellen- und Zeilenanzahl)
|
|
python scripts/script_db_export_migration.py --summary
|
|
```
|
|
|
|
Das Script erstellt automatisch zwei Dateien:
|
|
- `migration_export_TIMESTAMP.json` — vollständige Daten
|
|
- `migration_export_TIMESTAMP_structure.json` — nur Tabellenstruktur, keine Daten
|
|
|
|
### 2.3 Was wird beim Export ausgeschlossen?
|
|
|
|
Aus Sicherheits- und Datenschutzgründen werden folgende Tabellen **nie** exportiert:
|
|
- `Token` (aktive Login-Sessions)
|
|
- `AuthEvent` (Login-Protokoll)
|
|
- `poweron_test` (Testdatenbank)
|
|
|
|
---
|
|
|
|
## 3. Import
|
|
|
|
Ein Import spielt einen zuvor erstellten Export wieder ein. Typische Anwendungsfälle:
|
|
- Wiederherstellung eines früheren Datenstands
|
|
- Migration zwischen Umgebungen (z. B. Produktionsdaten auf die Testumgebung übertragen)
|
|
- Initialisierung einer neuen Instanz
|
|
|
|
### 3.1 Zwei Import-Modi
|
|
|
|
**Replace (Ersetzen):**
|
|
Löscht alle bestehenden Daten (ausser geschützte System-Objekte, siehe unten) und schreibt den Backup-Stand vollständig neu. Verwenden bei vollständiger Wiederherstellung.
|
|
|
|
**Merge (Zusammenführen):**
|
|
Fügt nur Datensätze ein, die noch nicht existieren (anhand ID). Bestehende Daten bleiben unverändert. Verwenden wenn nur fehlende Daten ergänzt werden sollen.
|
|
|
|
### 3.2 Import via Admin-UI
|
|
|
|
1. JSON-Datei hochladen
|
|
2. Validation läuft automatisch (prüft Format-Version, Struktur, System-Objekte)
|
|
3. Import-Modus wählen: `replace` oder `merge`
|
|
4. Import starten — Ergebnis zeigt Anzahl eingespielter Datensätze pro Tabelle
|
|
|
|
Auch sehr grosse Backup-Dateien können problemlos importiert werden, ohne den Server zu überlasten.
|
|
|
|
### 3.3 Geschützte System-Objekte
|
|
|
|
Beim Import werden drei kritische Objekte **nie gelöscht oder überschrieben**, unabhängig vom Import-Modus:
|
|
- Root-Mandat
|
|
- Admin-Benutzer
|
|
- Event-Benutzer
|
|
|
|
Falls diese Objekte im Backup andere interne Kennungen hatten als in der Zielumgebung, passt das System alle betroffenen Verknüpfungen **automatisch** an. Das verhindert inkonsistente Daten nach dem Import.
|
|
|
|
### 3.4 Import via Script
|
|
|
|
```bash
|
|
ssh ubuntu@api.poweron.swiss
|
|
cd /srv/gateway/current
|
|
source .venv/bin/activate
|
|
sudo systemctl stop gateway
|
|
|
|
# Import-Script (Pendant zum Export-Script)
|
|
# Datei übergeben, Modus wählen
|
|
python scripts/script_db_export_migration.py --help # zeigt alle Optionen
|
|
|
|
sudo systemctl start gateway
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Backups & Datensicherung
|
|
|
|
### 4.1 Backup-Strategie
|
|
|
|
Die Plattform verfügt über ein durchdachtes, mehrschichtiges Sicherungskonzept:
|
|
|
|
**Infrastruktur-Ebene:** Der Datenbankserver läuft auf der Infomaniak Public Cloud, die Snapshot-Funktionalitäten für Managed Databases bereitstellt.
|
|
|
|
**Anwendungs-Ebene:** Über die integrierte Admin-UI kann jederzeit ein vollständiger Export aller Datenbanken erstellt werden — on-demand, gezielt pro Datenbank oder als Gesamtexport. Die Backup-Dateien sind vollständig portabel und können auf jedem Speicher archiviert werden.
|
|
|
|
### 4.2 Empfohlene Backup-Praxis
|
|
|
|
| Zeitpunkt | Aktion |
|
|
|---|---|
|
|
| Vor jedem Deployment | Export via Admin-UI, Datei lokal speichern |
|
|
| Vor Datenbank-Migrationen | Export erstellen und beschriftet archivieren |
|
|
| Wöchentlich | Export als Archiv-Backup ablegen |
|
|
|
|
---
|
|
|
|
## 5. Datenbankmigrationen (Struktur-Änderungen)
|
|
|
|
Wenn sich das Datenmodell weiterentwickelt — z. B. durch neue Felder oder Tabellen — stellt die Plattform dedizierte Hilfsprogramme bereit, die Datenbankstruktur kontrolliert und sicher anzupassen:
|
|
|
|
| Programm | Zweck |
|
|
|---|---|
|
|
| `script_db_adapt_to_models.py` | Passt die Datenbankstruktur automatisch an den aktuellen Code an (mit Vorschau-Modus ohne Änderungen) |
|
|
| `script_db_audit_legacy_state.py` | Analysiert den Datenbankzustand vor einem Bereinigungsschritt |
|
|
| `script_db_migrate_*.py` | Datenmigrations-Programme für spezifische Features |
|
|
| `script_db_init_automation2.py` | Erstellt die Datenbankstruktur für das Automation-Feature |
|
|
| `script_db_init_chatbot.py` | Erstellt die Datenbankstruktur für das Chatbot-Feature |
|
|
|
|
Beim Start der Anwendung prüft die Plattform ausserdem automatisch, ob alle benötigten Tabellen vorhanden sind, und legt fehlende selbstständig an.
|
|
|
|
---
|
|
|
|
## 6. Datenschutz-Hinweise
|
|
|
|
- Export-Dateien enthalten **alle Kundendaten** (Mandate, Benutzer, Chats, Dokumente, etc.) und sind entsprechend zu behandeln
|
|
- Dateien dürfen **nicht auf unsicheren Speichern** (persönliche Dropbox, E-Mail, etc.) abgelegt werden
|
|
- Export-Dateien sollten nach Nutzung gelöscht werden wenn sie nicht mehr benötigt werden
|
|
- Der Zugriff auf Export/Import ist auf SysAdmins beschränkt und wird serverseitig geloggt
|
|
|
|
---
|
|
|
|
## Zusammenfassung: Datenbankoperationen im Überblick
|
|
|
|
| Aufgabe | Wie |
|
|
|---|---|
|
|
| Fehlende Tabellen beim Start anlegen | Automatisch beim Plattform-Start |
|
|
| Datenbank-Export / Backup | Admin-UI (ein Klick) oder Entwickler-Script |
|
|
| Datenbank-Import / Wiederherstellung | Admin-UI mit geführtem Prozess oder Entwickler-Script |
|
|
| Infrastruktur-Snapshots | Infomaniak Cloud (Serverebene) |
|
|
| Struktur-Anpassungen bei Updates | Kontrolliert durch Entwickler-Hilfsprogramme |
|
|
| Datenbankpflege & Bereinigung | Admin-UI |
|