# Backups und Umzug

Bei einer selbst gehosteten Installation sind Sie für die Datensicherung selbst verantwortlich. Zu sichern sind immer **zwei Dinge gemeinsam**: die **Datenbank** und der **Datenordner** `data/`. Mit beiden zusammen lässt sich der Shop vollständig wiederherstellen oder auf einen anderen Server umziehen.

## Was wo liegt

**Datenbank** – Produkte, Bestellungen, Kunden, Seiten, Einstellungen, Mitarbeiterkonten, die Lizenz und alle Zugangsdaten, die Sie im Admin hinterlegt haben (verschlüsselt).

**Datenordner** `data/` im Anwendungsordner (bei Docker das Volume `/data`):

| Inhalt | Bedeutung |
|---|---|
| `secrets.env` | automatisch erzeugter Schlüssel, mit dem gespeicherte Zugangsdaten (z. B. für Zahlungsanbieter und Mailserver) verschlüsselt sind |
| `database.env` | die Datenbankverbindung aus dem Web-Installer |
| `files/` | hochgeladene Bilder und Dateien, sofern als Dateispeicher **Lokal** eingestellt ist |
| `logs/` | Protokolle des Shops |
| `versions/` | per Update installierte Versionen (werden bei Bedarf neu geladen) |

:::warning
Ohne die Datei `secrets.env` kann der Shop die in der Datenbank verschlüsselt gespeicherten Zugangsdaten nicht mehr lesen – Sie müssten sie dann alle neu eintragen. Bewahren Sie den Datenordner deshalb immer zusammen mit der Datenbanksicherung auf.
:::

Nutzen Sie als Dateispeicher einen S3-kompatiblen Dienst (**Einstellungen → System → Dateispeicher**), liegen Bilder und Dateien dort; sichern Sie in diesem Fall zusätzlich den Bucket bzw. nutzen Sie die Sicherungsfunktion des Anbieters.

## Backup erstellen

**Datenbank**

- **Hosting-Panel:** Die meisten Panels bieten Export oder Backup der Datenbank (z. B. über phpMyAdmin oder die Datenbank-Verwaltung des Panels) sowie automatische Sicherungen.
- **MariaDB/MySQL auf eigenem Server:** zum Beispiel `mysqldump --single-transaction -u BENUTZER -p DATENBANK > shop.sql`
- **PostgreSQL:** zum Beispiel `pg_dump -U BENUTZER DATENBANK > shop.sql`
- **Docker (MariaDB):** zum Beispiel `docker compose exec db sh -c 'mariadb-dump -u plazello -p"$MARIADB_PASSWORD" plazello' > shop.sql`

**Datenordner**

Sichern Sie den Ordner `data/` als Archiv (Dateimanager des Panels oder `tar -czf data.tar.gz data`). Bei Docker sichern Sie das Volume, zum Beispiel über einen temporären Container, der `/data` einbindet und archiviert.

Empfehlenswert sind **tägliche, automatische Sicherungen**, die an einem anderen Ort als dem Shop-Server aufbewahrt werden. Erstellen Sie außerdem vor jedem Update eine aktuelle Datenbanksicherung.

## Wiederherstellen

1. App stoppen.
2. Datenbank aus der Sicherung einspielen (in eine leere Datenbank).
3. Datenordner `data/` zurückspielen.
4. App starten. Ist die Sicherung älter als die installierte Version, passt der Shop die Datenbank beim Start automatisch an.

## Umzug auf einen neuen Server

1. **Auf dem alten Server:** App stoppen, damit keine neuen Bestellungen mehr eingehen, dann Datenbank und Datenordner sichern.
2. **Auf dem neuen Server:** eine leere Datenbank mit UTF-8 anlegen und die Sicherung einspielen.
3. Das Installationspaket in der Version, die zuletzt auf dem alten Server lief (oder einer neueren), entpacken und den gesicherten Ordner `data/` hineinkopieren (bei Docker: in das neue Volume).
4. Haben sich die Datenbank-Zugangsdaten geändert, passen Sie die Zeile `DATABASE_URL=…` in der Datei `data/database.env` an (Sonderzeichen im Passwort URL-kodiert) – oder geben Sie die Verbindung per `DATABASE_URL` in der `.env` bzw. der Docker-Konfiguration vor.
5. App starten wie bei der Erstinstallation (siehe [Installation auf Webhosting](doc:installation-webhosting) bzw. [Installation mit Docker](doc:installation-docker)). Der Web-Installer erscheint dabei nicht erneut.
6. Domain auf den neuen Server umstellen und HTTPS einrichten. Ändert sich die Adresse des Shops, tragen Sie sie unter **Einstellungen → System → Allgemein** bei **Öffentliche Adresse des Shops** ein.

Die Konto-Verknüpfung und Ihr Tarif hängen an der Installation in der Datenbank – sie bleiben beim Umzug erhalten, eine erneute Verknüpfung ist nicht nötig.

:::info
Ein Wechsel des Datenbanksystems (etwa von MySQL zu PostgreSQL) lässt sich nicht einfach per Sicherung erledigen, da die Sicherungen der Systeme nicht untereinander austauschbar sind. Bleiben Sie beim Umzug beim bisherigen Datenbanksystem.
:::
