Updates und Backups¶
Versionen¶
Die Container-Images erscheinen auf der GitHub Container Registry:
| Image | Inhalt |
|---|---|
ghcr.io/mandarioss/mandari:<tag> | Anwendung (Insight, Work, Session) |
ghcr.io/mandarioss/ingestor:<tag> | Ingestor und Texterkennung |
ghcr.io/mandarioss/website:<tag> | Öffentliche Website |
Jeder Build trägt ein unveränderliches Tag aus Branch und Commit (main-<kurzer-hash>) sowie das bewegliche Tag des Branches. Für den Betrieb empfehlen wir das unveränderliche Tag in IMAGE_TAG, damit ein Update eine bewusste Entscheidung ist. Release-Notes erscheinen unter GitHub Releases.
Update durchführen¶
- Backup anlegen, siehe unten.
- Release-Notes lesen. Migrationen sind additiv angelegt, trotzdem können einzelne Releases Hinweise enthalten.
-
Neues Tag in
.envsetzen und den Stack aktualisieren: -
Prüfen:
curl -sf https://<domain>/healthantwortet mitOK, der Betriebsmonitor zeigt grün, die Sync-Läufe laufen weiter.
Reihenfolge bei Schemaänderungen
Anwendung und Ingestor teilen sich die Datenbank. Bei Releases mit Migrationen erst die Anwendung aktualisieren und migrieren, dann den Ingestor neu starten.
Was in ein Backup gehört¶
| Bestandteil | Warum |
|---|---|
| Datenbank (PostgreSQL) | Alle Inhalte, Nutzer, Einstellungen, Audit-Logs |
.env | Schlüssel. Ohne ENCRYPTION_MASTER_KEY sind verschlüsselte Felder im Datenbank-Backup wertlos. Getrennt und sicher aufbewahren. |
Medien (MEDIA_ROOT) | Hochgeladene Dateien, Logos, Personenfotos, Demo-PDFs |
Dokument-Cache (OPARL_FILES_ROOT) | Optional. Lässt sich aus den Quellen wieder aufbauen, ist aber groß und dauert. |
Elasticsearch muss nicht gesichert werden, der Index lässt sich aus der Datenbank neu aufbauen.
Datenbank sichern¶
# Dump erzeugen (komprimiert)
docker compose exec -T postgres pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB" > mandari-$(date +%F).dump
# Wiederherstellen in eine leere Datenbank
docker compose exec -T postgres pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB" --clean --if-exists < mandari-2026-09-08.dump
Ein täglicher Cron mit Aufbewahrung von mindestens 14 Tagen und einer Kopie außerhalb des Servers ist das Minimum. Die Wiederherstellung einmal im Quartal testen.
Wiederherstellung im Überblick¶
- Server mit Docker vorbereiten, Compose-Dateien und die gesicherte
.enveinspielen. - Stack ohne Anwendung starten:
docker compose up -d postgres redis elasticsearch. - Datenbank-Dump einspielen, Medien und optional den Dokument-Cache zurückkopieren.
- Anwendung starten, migrieren, Suchindex neu aufbauen:
docker compose exec mandari python manage.py setup_elasticsearchund Reindex über die Admin-Aktionen oder die Management-Befehle der Suche. - DNS auf den neuen Server zeigen lassen. Caddy holt die Zertifikate automatisch.