Zum Hauptinhalt springen

Backups & Wiederherstellung

Sobald du die Software in einem produktiven Betrieb verwendest, empfehlen wir regelmäßige Backups durchzuführen. Dies hilft einerseits gegen menschliche Fehler, wie zum Beispiel das unbeabsichtigte Löschen von Objekten, als auch gegen Datenverlust aufgrund von Hardwaredefekten.

Proxmox VM-Backup (empfohlen)

Da OpenVLE in der Regel als VM auf dem Proxmox VE Cluster betrieben wird, ist der einfachste und empfohlene Weg ein natives Proxmox-Backup der gesamten VM. Damit werden alle Datenbanken, Konfigurationsdateien und Docker-Volumes in einem Schritt gesichert.

Proxmox unterstützt verschiedene Backup-Ziele (z. B. Proxmox Backup Server, NFS, CIFS) und erlaubt sowohl manuelle als auch zeitgesteuerte Backups über die Proxmox-Weboberfläche oder CLI. Im Fehlerfall kann die gesamte VM aus dem Backup wiederhergestellt werden.

hinweis

Die Proxmox-Backup-Konfiguration erfolgt auf dem Proxmox VE Cluster selbst und ist nicht Teil der OpenVLE-Konfiguration. Weitere Informationen findest du in der Proxmox VE Backup-Dokumentation.

Datenbank-Dumps (ergänzend)

Ergänzend zu VM-Backups können Datenbank-Dumps für granulare Wiederherstellungen nützlich sein — z. B. wenn nur eine einzelne Datenbank zurückgesetzt werden soll, ohne die gesamte VM wiederherzustellen.

Was muss gesichert werden?

KomponenteDatenSpeicherortPriorität
MariaDBKernentitäten (Benutzer, VMs, Veranstaltungen, Rollen, etc.)./mariadb/dataKritisch
MongoDBAktivitäten, Logs, System-Events./mongodbHoch
RedisTask-Queue, CacheIn-Memory + AOFNiedrig
.envBackend-Konfiguration, Secrets./Kritisch
frontend.envFrontend-Konfiguration./Kritisch
docker-compose.ymlService-Definitionen./Mittel
Redis

Redis dient primär als Task-Queue und Cache. Die Daten werden bei einem Neustart automatisch aus der AOF-Datei wiederhergestellt. Ein separates Backup ist in der Regel nicht notwendig.

Backup erstellen

MariaDB

Die MariaDB-Datenbank enthält alle Kernentitäten und sollte täglich gesichert werden:

docker exec openvle-mariadb mariadb-dump \
-u "$MARIADB_USER" \
-p"$MARIADB_PASSWORD" \
"$MARIADB_DATABASE" > backup_mariadb_$(date +%Y%m%d).sql

Die Variablen (MARIADB_USER, MARIADB_PASSWORD, MARIADB_DATABASE) findest du in deiner .env. Siehe Konfigurationsreferenz.

MongoDB

MongoDB speichert Aktivitäten, Logs und System-Events:

docker exec openvle-mongodb mongodump \
--username="$MONGODB_USER" \
--password="$MONGODB_PASSWORD" \
--db="$MONGODB_DATABASE" \
--archive > backup_mongodb_$(date +%Y%m%d).archive

Konfigurationsdateien

Sichere die .env-Dateien und Docker-Compose-Konfigurationen:

cp .env .env.backup_$(date +%Y%m%d)
cp frontend.env frontend.env.backup_$(date +%Y%m%d)
cp docker-compose.yml docker-compose.yml.backup_$(date +%Y%m%d)

Wiederherstellung

vorsicht

Stoppe die betroffenen Container, bevor du ein Backup einspielst, um Dateninkonsistenzen zu vermeiden.

MariaDB

docker compose stop backend worker worker-vm-clone worker-periodic scheduler
docker exec -i openvle-mariadb mariadb \
-u "$MARIADB_USER" \
-p"$MARIADB_PASSWORD" \
"$MARIADB_DATABASE" < backup_mariadb_YYYYMMDD.sql
docker compose up -d backend worker worker-vm-clone worker-periodic scheduler

MongoDB

docker compose stop backend worker worker-vm-clone worker-periodic scheduler
docker exec -i openvle-mongodb mongorestore \
--username="$MONGODB_USER" \
--password="$MONGODB_PASSWORD" \
--db="$MONGODB_DATABASE" \
--archive --drop < backup_mongodb_YYYYMMDD.archive
docker compose up -d backend worker worker-vm-clone worker-periodic scheduler

Automatisierung (Cron)

Das folgende Beispiel-Skript sichert beide Datenbanken täglich und behält die Backups der letzten 14 Tage:

#!/bin/bash
BACKUP_DIR="/opt/openvle/backups"
RETENTION_DAYS=14
DATE=$(date +%Y%m%d)

mkdir -p "$BACKUP_DIR"

# MariaDB
docker exec openvle-mariadb mariadb-dump \
-u "$MARIADB_USER" -p"$MARIADB_PASSWORD" "$MARIADB_DATABASE" \
> "$BACKUP_DIR/mariadb_$DATE.sql"

# MongoDB
docker exec openvle-mongodb mongodump \
--username="$MONGODB_USER" --password="$MONGODB_PASSWORD" \
--db="$MONGODB_DATABASE" --archive \
> "$BACKUP_DIR/mongodb_$DATE.archive"

# Alte Backups entfernen
find "$BACKUP_DIR" -type f -mtime +$RETENTION_DAYS -delete

Dieses Skript kannst du als täglichen Cron-Job einrichten:

# Täglich um 02:00 Uhr
0 2 * * * /opt/openvle/backup.sh

Empfohlener Backup-Zeitplan

HäufigkeitMaßnahme
TäglichDatenbank-Dumps (MariaDB + MongoDB)
Vor jedem UpdateManuelles Backup aller Komponenten