Authentik – Restore der Datenbank

Um eine Datenbank-Sicherung, die man mit pg_dump erstellt hat, wieder in Ihren authentik-Container einzuspielen, muß man den Backup-Prozess umkehren.

Da die Datei backup_db.sql bereits lokal im Verzeichnis /opt/authentik/ liegt, nutzt man pg_restore bzw. das Standard-Tool psql für SQL-Dumps.

Wichtige Vorbereitung

Bevor man das Backup einspieltn, muss man sicherstellen, dass Authentik nicht auf die Datenbank schreibt, da es sonst zu Fehlern während des Imports kommen kann.

  1. Dienste stoppen: Stoppen Sie des Authentik-Container, damit keine aktiven Verbindungen zur Datenbank bestehen:

    cd /opt/authentik
    docker compose stop server worker
  1. Backup einspielen
    • Daten HINZUFÜGEN: 
      Nutze den Befehl cat in Kombination mit docker exec und psql. Dies leitet den Inhalt des lokalen Backups direkt in den Container:

      cat backup_db.sql | docker exec -i authentik-postgresql-1 psql -U authentik authentik

      Hinweis: Wenn man den PG_USER in der .env geändert hat, ersetzt  man das -U authentik durch den entsprechenden Benutzernamen.
    • Daten ÜBERSCHREIBEN:
      Um die Datenbank komplett zu überschreiben (d. h. den aktuellen Zustand vollständig zu löschen und durch den Zustand aus dem Backup zu ersetzen), müssen Sie die Datenbank im Container einmal „neu aufsetzen“.
      Hier ist der sicherste Ablauf, um das Backup sauber wiederherzustellen:
      • Dienste stoppen
        Stoppen Sie die authentik-Dienste, um zu verhindern, dass während des Vorgangs auf die Datenbank zugegriffen wird:

        cd /opt/authentik
        docker compose stop server worker

      • Datenbank leeren (WICHTIG)
        Um die Datenbank wirklich zu überschreiben, müssen Sie die vorhandenen Tabellen löschen. Der sauberste Weg ist, die Datenbank innerhalb des Containers neu zu erstellen:

        # Datenbank löschen
        docker exec -t authentik-postgresql-1 dropdb -U authentik authentik
        # Datenbank neu erstellen
        docker exec -t authentik-postgresql-1 createdb -U authentik authentik

        Hinweis: Falls der Datenbank-Benutzer in der .env nicht authentik heißt, passen man das -U entsprechend an.

      • Backup einspielen
        Jetzt ist die Datenbank leer. Sie können nun den SQL-Dump in die frische Datenbank einspielen:

        cat backup_db.sql | docker exec -i authentik-postgresql-1 psql -U authentik authentik

      • Dienste wieder starten
        Nachdem der Prozess abgeschlossen ist, starten Sie die authentik-Dienste wieder:

        docker compose up -d

      • Fehlerprüfung: Wenn cat eine Fehlermeldung ausgibt, schauen Sie bitte sofort in die Logs von Postgres, um zu sehen, ob das Backup eventuell korrupt oder unvollständig war:

        docker compose logs postgresql

      • Rechte: Sollten man Probleme mit Berechtigungen haben, sicher stellen, dass der SQL-User (im pg_dump Befehl verwendet) identisch mit dem User ist, der jetzt psql ausführt.

        Backup-Inhalt: Falls das Backup sehr groß ist, kann es ein paar Minuten dauern, bis der cat-Befehl abgeschlossen ist. Gedulden Sie sich, bis das Terminal wieder zur Eingabeaufforderung zurückkehrt.
  1. Dienste wieder starten: Nachdem der Befehl ohne Fehler durchgelaufen ist, startet man die Container wieder:

    docker compose up -d

Was man bei der Wiederherstellung beachten sollte

  • Alternativer Restore (Dateibasiert): Falls die Datei sehr groß ist, ist es manchmal stabiler, die Datei in den Container zu kopieren:
  1. docker cp ./backup_db.sql authentik-postgresql-1:/tmp/backup.sql
  2. docker exec -it authentik-postgresql-1 psql -U authentik -d authentik -f /tmp/backup.sql

Wichtiger Hinweis: Wenn man ein Backup einspielt, das von einer neueren Version von authentik stammt, in eine ältere Version, wird dies wahrscheinlich fehlschlagen, da sich das Datenbank-Schema (die Struktur der Tabellen) mit den Updates geändert hat. Ein Backup ist daher immer nur für die exakte Version oder als Sicherheitsnetz bei misslungenen Updates gedacht.