Verständliche Anleitung für den Umgang mit Passwörtern, Tokens und Secret-Dateien in kleinen Self-Hosted-Umgebungen mit Docker und Compose.
In kleinen Self-Hosted-Umgebungen liegen sensible Werte erstaunlich oft an den falschen Orten: in Compose-Dateien, in Shell-History, in Screenshots, in Notizen oder direkt im Git-Repository. Genau deshalb lohnt sich ein bewusstes Secrets Management auch dann, wenn du noch kein grosses Team und keine riesige Plattform betreibst.
In dieser Anleitung schauen wir uns an, wie du Secrets in kleinen Self-Hosted-Umgebungen sinnvoll verwaltest, welche Stufen praxistauglich sind, wann eine einfache .env-Datei reicht und wo Docker-Compose-Secrets oder ein Passwort-Manager die sauberere Lösung sind.
1. Was überhaupt ein Secret ist
Ein Secret ist jeder Wert, der nicht öffentlich oder breit sichtbar herumliegen sollte. Typische Beispiele:
- Datenbank-Passwörter
- API-Tokens
- SMTP-Zugangsdaten
- JWT- oder Session-Secrets
- Backup-Passwörter
- SSH-Keys oder private Zertifikatsdateien
Wichtig ist nicht nur, ob ein Wert geheim ist, sondern auch wie kritisch sein Verlust oder Missbrauch wäre.
2. Die Grundfrage: Wie klein ist das Setup wirklich?
Nicht jede Umgebung braucht sofort ein grosses Secret-Management-System. Für viele kleine Self-Hosted-Setups reicht eine gute, disziplinierte Basis völlig aus.
Ein praktikables Reifestufenmodell sieht so aus:
- Stufe 1: saubere
.env-Dateien plus Passwort-Manager - Stufe 2: Secrets zusätzlich als Dateien oder Docker-Compose-Secrets strukturieren
- Stufe 3: bei grösserem Team oder höherem Risiko dediziertes Secret-Management prüfen
Viele kleine Umgebungen scheitern nicht an fehlender Enterprise-Software, sondern an fehlender Ordnung.
3. Die grössten Fehler zuerst vermeiden
- Secrets direkt in Compose-Dateien schreiben
.env-Dateien ins Git-Repository committen- denselben Secret-Wert in vielen Diensten wiederverwenden
- keinen Überblick haben, welche Secrets überhaupt existieren
- kritische Passwörter nur auf dem Server selbst speichern
Wenn du nur diese Fehler sauber vermeidest, hast du bereits einen sehr grossen Teil des Problems entschärft.
4. Die einfache und oft richtige Basis: .env plus Passwort-Manager
Für viele Compose-basierte Setups ist eine lokale .env-Datei pro Stack ein guter Startpunkt. Beispiel:
DB_PASSWORD=ein-langes-zufaelliges-passwort SMTP_PASSWORD=noch-ein-zufaelliger-wert AUTHENTIK_SECRET_KEY=ein-sehr-langer-geheimer-string
Wichtig ist dazu:
- die Datei nie committen
- Dateirechte sauber halten
- zusätzlich alle produktiven Secrets in einem Passwort-Manager oder sicheren Tresor dokumentieren
Damit hast du sowohl eine lokale Laufzeitbasis als auch eine vom Server getrennte sichere Referenz.
5. Docker Compose Secrets sinnvoll einordnen
Die offizielle Docker-Dokumentation beschreibt im Compose-Format Secrets als sensiblen Datentyp, der Diensten explizit zugewiesen wird. Die Quelle kann dabei eine Datei oder eine Host-Umgebungsvariable sein.
Ein einfaches Beispiel sieht so aus:
secrets:
db_password:
file: ./secrets/db_password.txt
services:
app:
image: ghcr.io/example/app:latest
secrets:
- db_password
Im Container landet das Secret typischerweise unter /run/secrets/.... Das ist oft sauberer als ein Passwort direkt als normale Umgebungsvariable zu übergeben, sofern die Anwendung dieses Muster unterstützt.
Wichtig ist aber auch: Nicht jede Anwendung kann Secrets-Dateien direkt lesen. Dann braucht es weiterhin Variablen oder ein vorgeschaltetes Startskript.
6. Wann Dateien für Secrets sinnvoll sind
Gerade für folgende Werte sind separate Dateien oft angenehm:
- lange Tokens
- private Schlüssel
- Zertifikate
- Passwörter für Anwendungen, die Dateipfade unterstützen
Eine mögliche Struktur:
~/stacks/authentik/ ├── compose.yaml ├── .env ├── secrets/ │ ├── smtp_password.txt │ └── db_password.txt └── data/
Damit wird schneller sichtbar, was Konfiguration, was Secret und was persistente Daten sind.
7. Rotation und Trennung mitdenken
Gute Secrets-Verwaltung bedeutet auch:
- nicht überall denselben Passwortwert verwenden
- produktive und Test-Zugangsdaten klar trennen
- wichtige Tokens rotierbar halten
- bei Personalwechsel oder Geräteverlust gezielt widerrufen können
Gerade bei SMTP, API-Diensten, Backup-Systemen oder Cloud-Zugängen ist Rotation viel realistischer, wenn du die Secrets überhaupt sauber dokumentiert hast.
8. Ein kleines Inventar ist Gold wert
Ich würde für kleine Umgebungen immer ein minimales Secret-Inventar pflegen. Darin steht nicht der geheime Wert selbst in Klartext, sondern:
- Name des Secrets
- wo es verwendet wird
- wo die sichere Ablage liegt
- wer Zugriff braucht
- wann es zuletzt geändert wurde
Schon diese kleine Übersicht verhindert, dass später niemand mehr weiss, welche Tokens eigentlich produktiv relevant sind.
9. Was ich für kleine Self-Hosted-Umgebungen konkret empfehlen würde
- pro Stack eigene
.env-Datei - kritische Secrets zusätzlich im Passwort-Manager dokumentieren
- wo möglich Datei-basierte Secrets oder Compose-Secrets nutzen
- keine Secrets in Git, Tickets oder Screenshots
- produktive und Test-Umgebung sauber trennen
Das ist keine Hochglanz-Enterprise-Lösung, aber für viele kleinere Server bereits sehr ordentlich und professionell.
10. Wann ein grösseres Secret-System sinnvoll wird
Spätestens wenn mehrere Personen regelmässig deployen, wenn viele Dienste stark miteinander integriert sind oder wenn Compliance- und Revisionsanforderungen steigen, lohnt sich ein dedizierteres Secret-System eher.
Für viele kleine Setups ist der Sprung dorthin aber erst sinnvoll, wenn die einfache Grundordnung bereits sauber funktioniert. Sonst baust du nur mehr Technik auf ein unaufgeräumtes Fundament.
11. Typische Stolpersteine
- die Anwendung unterstützt Datei-Secrets nicht, aber man plant damit
- Secrets liegen zwar in Dateien, diese sind aber ungesichert oder unklar benannt
- Passwort-Manager und Serverstand widersprechen sich
- Backups enthalten Secrets, aber niemand weiss, wie diese im Restore sicher behandelt werden
- die Rotation eines Secrets wird vergessen, weil Abhängigkeiten nicht dokumentiert sind
Auch hier hilft weniger Magie als klare Struktur.
12. Fazit
Secrets Management für kleine Self-Hosted-Umgebungen muss nicht kompliziert sein. Für viele Setups reicht eine disziplinierte Kombination aus .env-Dateien, sauberer Dateistruktur, Passwort-Manager und wo passend Docker-Compose-Secrets vollkommen aus.
Entscheidend ist, dass du Geheimnisse bewusst behandelst, dokumentierst und trennst. Genau das macht aus improvisierten Passwörtern eine wartbare Sicherheitsbasis.
Tipp:
Wenn du heute anfangen willst, dann prüfe zuerst deine bestehenden Compose-Dateien auf fest eingetragene Passwörter und ziehe diese systematisch in .env-Dateien oder Secret-Dateien um. Das ist oft der wichtigste erste Schritt.