Zum Inhalt

Authentik per Docker Compose installieren und absichern

Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 4 Minuten

Authentik bündelt die Anmeldung für mehrere selbst gehostete Dienste und kann später Single Sign-on sowie Mehrfaktor-Anmeldung bereitstellen. Die offizielle Compose-Datei bringt Authentik und PostgreSQL passend vorkonfiguriert mit. Für Installation und Grundabsicherung solltest du etwa 25 Minuten einplanen.

Voraussetzungen

  • Ein Linux-Server mit mindestens 2 CPU-Kernen und 2 GB Arbeitsspeicher
  • Docker mit Docker Compose v2
  • Die Ports 9000 und 9443 sind im Heimnetz frei
  • OpenSSL und curl sind installiert
  • Eine feste IP-Adresse für den Server

1. Arbeitsordner anlegen

Führe diesen Befehl auf dem Docker-Server aus. Er erstellt den Projektordner und wechselt hinein:

mkdir -p ~/docker/authentik && cd ~/docker/authentik

2. Offizielle Compose-Datei laden

Dieser Befehl lädt die aktuelle, von Authentik bereitgestellte Compose-Datei als compose.yml:

curl -O https://docs.goauthentik.io/compose.yml

Compose-Datei nicht aus fremden Anleitungen kopieren

Die offizielle Datei verweist auf eine zum Veröffentlichungszeitpunkt passende Authentik- Version. Lade sie für eine Neuinstallation und später auch für ein Update erneut aus der offiziellen Dokumentation.

3. Geheimnisse erzeugen

Führe beide Befehle im Projektordner aus. Sie erzeugen ein zufälliges PostgreSQL-Passwort und einen geheimen Authentik-Schlüssel und schreiben die Werte in .env:

echo "PG_PASS=$(openssl rand -base64 36 | tr -d '\n')" >> .env
echo "AUTHENTIK_SECRET_KEY=$(openssl rand -base64 60 | tr -d '\n')" >> .env

Schütze die Datei vor anderen Benutzern auf dem Server:

chmod 600 .env

.env geheim halten

Veröffentliche .env niemals in Git, einem Forum oder einer Bildschirmaufnahme. Sichere die Datei verschlüsselt, denn der geheime Schlüssel gehört zu deiner Installation.

4. Konfiguration prüfen und starten

Prüfe im Projektordner zuerst, ob Docker Compose die Datei und Variablen fehlerfrei einliest:

docker compose config --quiet

Lade danach die vorgesehenen Images:

docker compose pull

Starte den vollständigen Stack im Hintergrund:

docker compose up -d

Kontrolliere den Zustand der Container:

docker compose ps

Zeitzone nicht in die Container einhängen

Authentik arbeitet intern mit UTC. Binde weder /etc/timezone noch /etc/localtime in die Authentik-Container ein, da dies OAuth- und SAML-Anmeldungen stören kann.

5. Administratorkonto einrichten

Öffne im Heimnetz http://<server-ip>:9000. Ersetze <server-ip> durch die feste IP-Adresse des Docker-Servers. Der Assistent fordert dich auf, für den vorhandenen Benutzer akadmin ein Passwort festzulegen. Verwende ein langes, nur hier eingesetztes Passwort und speichere es in einem Passwortmanager.

Melde dich danach einmal ab und wieder an. Damit prüfst du, ob das Administratorkonto und die Datenbank korrekt funktionieren.

6. Zugriff absichern

Leite Port 9000 oder 9443 nicht direkt im Router weiter. Für den Zugriff von außerhalb des Heimnetzes verwendest du ein privates VPN oder einen HTTPS-Reverse-Proxy mit gültigem Zertifikat. Richte danach in den Benutzereinstellungen von akadmin eine TOTP- Mehrfaktor-Anmeldung ein und bewahre die Wiederherstellungsdaten getrennt auf.

Zentraler Zugang braucht besonderen Schutz

Wer das Authentik-Administratorkonto übernimmt, kann später auf mehrere angebundene Dienste zugreifen. Verwende für die tägliche Nutzung ein separates Konto und behalte akadmin nur für Verwaltungsaufgaben.

Die offizielle Compose-Datei bindet standardmäßig den Docker-Socket in den Worker ein, damit Outposts automatisch verwaltet werden können. Benötigst du keine automatisch verwalteten Outposts, informiere dich vor einer Änderung über die manuelle Bereitstellung oder einen Docker-Socket-Proxy. Ein Container mit Socket-Zugriff besitzt weitreichende Rechte auf dem Host.

7. Backup anlegen

Lege im Projektordner einen Backup-Ordner an:

mkdir -p backup

Dieser Befehl erstellt mit dem PostgreSQL-Werkzeug pg_dump eine vollständige SQL-Sicherung. Die Option -T verhindert Steuerzeichen in der umgeleiteten Datei:

docker compose exec -T postgresql pg_dump -U authentik -d authentik -cC > "backup/authentik-$(date +%F).sql"

Prüfe, ob die Sicherung vorhanden und nicht leer ist:

test -s "backup/authentik-$(date +%F).sql" && echo "Datenbanksicherung vorhanden"

Sichere zusätzlich .env, compose.yml und verwendete Verzeichnisse für /data, /certs, /custom-templates oder /blueprints verschlüsselt auf einem zweiten System. Ohne die PostgreSQL-Datenbank lässt sich Authentik nicht sinnvoll wiederherstellen.

8. Aktualisieren und zurückkehren

Erstelle zuerst das Backup aus Schritt 7. Sichere die bisherige Compose-Datei:

cp compose.yml "compose-$(date +%F).yml"

Lade anschließend die neue offizielle Datei und starte den Stack damit neu:

curl -O https://docs.goauthentik.io/compose.yml
docker compose pull
docker compose up -d

Prüfe Anmeldung und Containerzustand. Bei Problemen stellst du die gesicherte Compose-Datei und die Datenbanksicherung wieder her. Lösche weder Volumes noch .env, solange der Rückweg nicht getestet ist.

9. Typische Fehler

  • Die Seite ist nicht erreichbar: Prüfe mit docker compose ps, ob alle Container laufen, und kontrolliere die Firewall für Port 9000.
  • Der Stack startet immer wieder neu: Zeige die letzten Meldungen mit docker compose logs --tail=100 an und prüfe freien Arbeitsspeicher sowie Speicherplatz.
  • Die Ersteinrichtung erscheint nicht: Öffne genau dieselbe Serveradresse ohne zwischengeschalteten Cache und teste ein privates Browserfenster.
  • Anmeldezeiten oder Tokens verhalten sich falsch: Entferne eigene Zeitzonen-Mounts aus der Compose-Datei; Authentik erwartet intern UTC.
  • Nach einer Wiederherstellung fehlen Bilder oder Vorlagen: Neben der Datenbank wurden die verwendeten statischen Verzeichnisse nicht gesichert.

10. Quellen und Videos

Fertig

Authentik läuft jetzt mit eigener PostgreSQL-Datenbank im Heimnetz. Öffne http://<server-ip>:9000, melde dich erneut als akadmin an und kontrolliere anschließend mit docker compose ps, ob alle Dienste weiterlaufen. Erst danach bindest du die erste Anwendung an.