# Backups

Eine produktive Installation braucht regelmäßige Backups. Zwei Dinge müssen gesichert werden:
die **PostgreSQL-Datenbank** und der **Datei-Storage** (hochgeladene Dokumente).

## Datenbank sichern

Erstelle ein Dump mit `pg_dump` — in der Container-Installation direkt im DB-Container:

```bash
docker compose exec db pg_dump -U lalabase lalabase_production > backup.sql
```

Für regelmäßige Backups bietet sich ein Cronjob auf dem Host an, der das Dump anlegt und
versioniert wegschreibt (z. B. auf einen separaten Storage).

## Datei-Storage sichern

Die hochgeladenen Dateien liegen im `storage`-Volume. Sichere es als Archiv:

```bash
docker compose cp web:/rails/storage ./storage-backup
```

<div class="docs-callout docs-callout--warning">
  <div class="docs-callout__title">Konsistenz</div>
  <p>Sichere Datenbank und Storage möglichst im selben Zeitfenster — sonst können Verweise auf Dateien ins Leere zeigen.</p>
</div>

## Wiederherstellen

Spiele ein Dump in eine leere Datenbank zurück:

```bash
cat backup.sql | docker compose exec -T db psql -U lalabase lalabase_production
```

<div class="docs-callout docs-callout--danger">
  <div class="docs-callout__title">Achtung</div>
  <p>Teste deine Backups regelmäßig durch eine Probe-Wiederherstellung. Ein ungetestetes Backup ist kein Backup.</p>
</div>
