Suchen...

Backup

Zuletzt aktualisiert am 23. September 2024, geschätzte Lesezeit: 5 Minuten 32 Sekunden

Zum Betrieb von TTS trax ist die Erstellung von Backups zwingend notwendig. Für kleinere Installationen mit einer geringen Nutzung ist es ausreichend, die virtuelle Maschine, auf der TTS trax betrieben wird, mit den entsprechenden Werkzeugen zu sichern.

Für größere Installationen kann der folgende Ansatz genutzt werden, um die notwendigen Daten zu sichern.

Daten einer trax-Installation sichern

Um ein vollständiges Backup zu erstellen, müssen sowohl

  • die Datenbankschlüssel und die Umgebungsvariablen-Konfiguration (einmalig),
  • die Datenbank-Dateien,
  • die Provisionierung der Mandanten im Verzeichnis provisioning, als auch
  • das Storage-Verzeichnis storage gesichert werden.

Initiale Konfiguration

Zur Erstellung der Datenbank-Backups muss zunächst ein Verzeichnis in den Datenbank-Container gebunden werden, in das die Datenbank-Backups gespeichert werden.

Erstellen Sie dazu in dem Verzeichnis, in dem die docker-compose.yml-Datei liegt, ein backups-Verzeichnis:

$ mkdir -p backups

Dieses Verzeichnis muss in der Datei docker-compose.yml als Volume-Mount konfiguriert werden:

# docker-compose.yml
services:
  # ...
 
  database:
    image: mariadb:10.3
    command: ...
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_SETUP_PASSWORD}
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}
    volumes:
      - mariadb-data:/var/lib/mysql
      - ./seed:/docker-entrypoint-initdb.d:ro
      - ./database/keys.enc:/etc/mysql/keys.enc:ro
      - ./database/keys.key:/etc/mysql/keys.key
      - ./backups:/backups                      # Diese Zeile hinzufügen
 
# ...

Wenn Sie Windows Server 2016 verwenden, erstellen Sie das backups-Verzeichnis an derselben Stelle, notieren aber statt ./backups:/backups die Angabe ./backups:C:\backups in der Datei docker-compose.yml.

Sicherung der Datenbankschlüssel und der Umgebungsvariablen

Sichern Sie die Datenbankschlüssel, die im Verzeichnis database hinterlegt wurden, im Idealfall an anderer Stelle als die Datenbackups. Diese können auch von einer regelmäßigen Sicherung ausgenommen werden, da diese sich im normalen Betrieb nicht ändern, und manuell gesichert werden.

Ähnlich verhält es sich mit der .env-Datei. Diese ändert sich im laufenden Betrieb nicht, sondern lediglich, wenn im Rahmen eines Updates Änderungen an dieser Datei vorgenommen werden müssen. Hier ist auch eine manuelle Sicherung ausreichend.

Erstellen eines Backups

Die folgenden Schritte sind immer auszuführen, um ein neues Backup zu erstellen. Diese Schritte können in einem Skript zusammengefasst werden und

Schritt 1: Backup der Datenbank

Um ein Backup der Datenbank zu erstellen, muss der folgende Befehl ausgeführt werden:

$ docker-compose exec database sh -c 'exec mariabackup --backup --target-dir=/backups/$(date +"%Y_%m_%d") --user=root --password="$MYSQL_ROOT_PASSWORD"'

Dieser Befehl erstellt im oben erstellten backups-Verzeichnis einen neuen Ordner, der nach dem aktuellen Datum benannt ist. Dieser Ordner enthält den aktuellen Stand des gesamten Datenbanksystems, d.h. die Daten aller Mandanten. Durch die Verwendung des Tools mariabackup ist sichergestellt, dass die Integrität dieser Daten gewährleistet ist.

Schritt 2: Sicherung des provisioning-Ordners

Der provisioning-Ordner muss komplett gesichert werden. Mit dem folgenden Befehl kann z.B. ein tar-Archiv dieses Ordners in dem backups-Verzeichnis erstellt werden, dabei ist $PATH_TO_DEPLOYMENT durch den auf dem System benötigten Pfad zum Ordner, in dem die docker-compose.yml liegt, zu ersetzen:

# cd $PATH_TO_DEPLOYMENT
# tar cf ./backups/$(date +"%Y_%m_%d")_provisioning.tar ./provisioning

Schritt 3: Sicherung des storage-Ordners

Zur Sicherung des storage-Ordners kann dasselbe Verfahren gewählt werden wie zur Sicherung des provisioning-Ordners:

# cd $PATH_TO_DEPLOYMENT
# tar cf ./backups/$(date +"%Y_%m_%d")_storage.tar ./storage

Zur Sicherung dieser Dateien können root-Rechte nötig sein, da die Berechtigungen auf einigen Dateien in diesem Verzeichnis stark eingeschränkt sind.

Schritt 4: Übertragung des Backups

Übertragen Sie die in den vorherigen drei Schritten erzeugten Dateien an einen sicheren Ablageort für Backups.

Optional: Sicherung der verwendeten trax-Version

Sollte eine Wiederherstellung in die aktuelle verfügbare Version von TTS trax nicht möglich sein, ist es hilfreich, die verwendete trax-Version als Teil des Backup-Prozesses zu speichern. Diese kann mit folgendem Befehl in eine Textdatei gesichert werden:

$ docker-compose exec trax php artisan trax:version > ./backups/$(date +"%Y_%m_%d")_version.txt

Wiederherstellung

Vorbereitung der trax-Installation

Installieren Sie zunächst trax neu auf Basis der Installationsanleitung.

Um eine Wiederherstellung in eine bestimmte trax-Version vorzunehmen, ersetzen Sie in der Datei docker-compose.yml in der Zeile image: registry.tts-trax.com/trax:TRAXVERSION die anstelle von TRAXVERSION notierte Versionsnummer durch die im Backup gespeicherte Versionsnummer.

Achten Sie darauf, dass das backups-Verzeichnis erneut in der docker-compose.yml-Datei zu hinterlegen und auch anzulegen. Kopieren Sie die drei Backup-Artefakte (Datenbankbackup und Sicherung des provisioning und storage-Verzeichnisses) aus den vorherigen Schritten in diesen Ordner.

Beenden Sie nach der Installation das trax-System:

$ docker-compose down

Für die folgenden Schritte ist es zwingend notwendig, dass die trax-Installation mit dem obigen Befehl beendet wurde!

Wiederherstellung des provisioning und des storage-Verzeichnisses

Zur Wiederherstellung dieser beiden Verzeichnisse müssen die entsprechenden Archive entpackt werden. Ersetzen Sie in den folgenden Befehlen den Wert der Variable RECOVERY_DATE durch das entsprechende Wiederherstellungsdatum.

Um die Dateien mit den korrekten Berechtigungen wiederherzustellen, muss das Kommando mit root-Rechten ausgeführt werden!

# RECOVERY_DATE=2022_03_13
# cd $PATH_TO_NEW_DEPLOYMENT
# tar xvf backups/$RECOVERY_DATE_provisioning.tar ./provisioning
# tar xvf backups/$RECOVERY_DATE_storage.tar ./storage

Wiederherstellung der Datenbankschlüssel und der Umgebungsvariablen

Überschreiben Sie die im Rahmen der Installation erzeugten Schlüssel und die Umgebungsvariablen-Datei .env aus dem entsprechendem Backup.

Wiederherstellung der Datenbankdateien

Zum Wiederherstellen des Backups muss zunächst ein sogenannter prepare-Schritt ausgeführt werden. Führen Sie dazu den folgenden Befehl aus, achten Sie dabei darauf, dass in der Variablen $RECOVERY_DATE erneut das korrekte Datum steht:

$ docker-compose run --rm database mariabackup --prepare --target-dir=/backups/$RECOVERY_DATE

Nun muss das Datenbank-Volume wiederhergestellt werden. Führen Sie dazu zunächst den Befehl docker volume ls aus. Suchen Sie in der Ausgabe des Befehls nach dem Volume, dessen Name auf mariadb-data endet, im Falle des Beispiels ist dies deployment_mariadb-data:

$ docker volume ls
DRIVER              VOLUME NAME
local               deployment_mariadb-data
local               deployment_redis

Dieses Volume, das bei der Neuinstallation von trax angelegt wurde, muss nun gelöscht werden:

$ docker volume rm deployment_mariadb-data

Nun können die Datenbankdateien wiederhergestellt werden. Dabei wird automatisch ein neues Volume mit demselben Namen angelegt:

$ docker-compose run --rm database mariabackup --copy-back --target-dir=/backups/$RECOVERY_DATE

Start der trax-Installation

Die Wiederherstellung ist damit abgeschlossen. Sie können trax nun mit dem folgenden Befehl starten:

$ docker-compose up -d

trax sollte nun mit dem Datenbestand des Backups starten. Überprüfen Sie im Zweifel die Log-Ausgabe auf etwaige Fehlermeldungen:

$ docker-compose logs -f trax

Wenn Sie das Backup aus einer älteren Version von trax wiederherstellen als der Version, die sie frisch installiert haben, werden beim ersten Start unter Umständen einige Migrationen ausgeführt, weshalb der Start einige Zeit dauern kann.

© 2024 TTS trusted technologies and solutions GmbH — Impressum - Datenschutz