Datenbank
Clavis speichert alle Daten in PostgreSQL. Änderungen am Datenmodell werden über Migrationen eingespielt; die Anwendung bringt sie selbst mit.
Die Datenbank läuft als eigener Container clavis-postgres neben dem Anwendungs-Stack. Datenbank und Benutzer heißen in der ausgelieferten Konfiguration beide clavis_a. Passe die folgenden Befehle an, wenn du bei der Installation andere Namen vergeben hast.
Migrationen
Migrationen laufen bei jedem Deploy automatisch (siehe Updates). Schlägt eine Migration fehl, bricht das Deploy ab und die laufende Version bleibt unverändert.
Manuell prüfen, auf welchem Stand die Datenbank ist:
docker exec clavis-api alembic currentManuell nachziehen (normalerweise nicht nötig):
docker exec clavis-api alembic upgrade headMigrationen nicht zurücknehmen
Alembic kann Migrationen theoretisch rückwärts ausführen (downgrade). Tu das im Produktivbetrieb nicht — es kann Daten unwiederbringlich verwerfen. Der sichere Weg zurück ist das Wiederherstellen eines Backups (siehe unten).
Sicherung
Automatisch vor jedem Deploy
Das Deploy-Skript legt vor jeder Änderung einen vollständigen Schnappschuss an:
- Ablage:
deployment/backups/ - Namensschema:
clavis-YYYYMMDDTHHMMSSZ.dump - Aufbewahrung: 30 Tage, ältere werden automatisch gelöscht
Dieser Schnappschuss ist die Grundlage für deploy.sh --rollback.
Manuell
cd deployment
bash scripts/backup.shTäglich per Cron
# crontab -e
0 3 * * * cd /pfad/zu/deployment && bash scripts/backup.sh >> /var/log/clavis-backup.log 2>&1Sicherungen gehören vom Server herunter
Die Schnappschüsse liegen auf demselben Rechner wie die Datenbank. Fällt die Festplatte aus oder wird der Server kompromittiert, sind sie mit weg. Kopiere sie regelmäßig auf ein anderes System (z. B. per rsync/restic auf einen Backup-Speicher). Das ist eine Betreiber-Aufgabe und nicht Teil der ausgelieferten Skripte.
Wiederherstellen
# 1. Anwendung anhalten, damit während der Wiederherstellung nichts schreibt
cd deployment
docker compose -f docker-compose.prod.yml stop api
# 2. Sicherheitskopie des JETZIGEN Zustands (falls die Wiederherstellung schiefgeht)
bash scripts/backup.sh
# 3. Dump zurückspielen (bestehende Objekte werden ersetzt)
docker exec -i clavis-postgres \
pg_restore -U clavis_a -d clavis_a --clean --if-exists < backups/clavis-<zeitstempel>.dump
# 4. Anwendung wieder starten
docker compose -f docker-compose.prod.yml start api
# 5. Prüfen
curl -s https://<deine-domain>/api/healthAlles überschreiben
Die Wiederherstellung ersetzt den kompletten Datenbestand durch den Stand des Dumps. Alles, was danach entstanden ist, geht verloren. Deshalb Schritt 2 nie überspringen.
Hochgeladene Dateien nicht vergessen
Fotos und andere Uploads liegen nicht in der Datenbank, sondern im Objektspeicher (MinIO, Container clavis-minio). Eine vollständige Sicherung umfasst beides: Datenbank-Dump und die MinIO-Daten. Werden nur die Datenbank zurückgespielt, verweisen Einreichungen auf Bilder, die es nicht mehr gibt.