Secrets und Backups¶
Diese Seite beschreibt die dienstübergreifenden Regeln für Secrets, persistente Daten und Backups. Konkrete Datenpfade pro Dienst stehen zusätzlich auf den jeweiligen Dienstseiten.
Grundregeln für Secrets¶
Secrets werden nicht in der Dokumentation ausgeschrieben. Dazu gehören insbesondere:
- Passwörter
- API-Keys
- Tokens
- Session-Secrets
- Datenbank-URLs mit Passwortanteil
- SMTP-/IMAP-Zugangsdaten
- OAuth-Tokens
Die Dokumentation darf Secret-Namen und Speicherorte nennen, aber keine Werte.
Lokale Secret-Dateien¶
Aktuell werden mehrere Dienste über lokale .env-Dateien unter /opt/selfhost/secrets/ versorgt.
Konvention:
/opt/selfhost/secrets/<dienst>.env
Empfohlene Rechte:
sudo chown root:selfhost /opt/selfhost/secrets/<dienst>.env
sudo chmod 660 /opt/selfhost/secrets/<dienst>.env
Diese Dateien sind backuprelevant, dürfen aber nicht in öffentliche Repositories, HTML-Ausgaben oder Tickets kopiert werden.
Bekannte Secret-Dateien¶
| Datei | Verwendung |
|---|---|
/opt/selfhost/secrets/stalwart.env |
Stalwart-Initial-/Betriebswerte |
/opt/selfhost/secrets/bulwark.env |
Bulwark-Konfiguration und Zugangsdaten/Secrets |
/opt/selfhost/secrets/litellm.env |
LiteLLM-Keys, Datenbankvariablen, UI-Login, Provider-/Callback-Konfiguration |
/opt/selfhost/secrets/langfuse.env |
Langfuse-, Datenbank-, ClickHouse- und MinIO-Secrets |
/opt/selfhost/secrets/caddymanager.env |
CaddyManager JWT_SECRET und sonstige geheime Werte |
Die Liste dokumentiert Speicherorte, nicht Inhalte.
Bitwarden Secrets Manager¶
Langfristig ist Bitwarden Secrets Manager als Zielmodell vorgesehen. Auf diesem Server ist die EU-Cloud-Konfiguration relevant:
| Variable | Wert |
|---|---|
BWS_API_URL |
https://vault.bitwarden.eu/api |
BWS_IDENTITY_URL |
https://vault.bitwarden.eu/identity |
Das ist wichtig, weil SDKs und CLIs sonst standardmäßig die US-Endpunkte verwenden können. Die lokalen .env-Dateien sind deshalb als aktueller Betriebsstand und teilweise Übergangsmodell zu verstehen, nicht als endgültiges Ideal.
Persistente Daten¶
Persistente Daten sind alles, was bei Container-Neuerstellung erhalten bleiben muss. Dazu gehören:
- Anwendungsdatenbanken
- Uploads und Objektspeicher
- Konfigurationsdateien
- OAuth-Token-Verzeichnisse
- Benutzerkonten und Dienstzustände
- Monitoring- und Historienwerte
Typische Speicherorte:
/opt/selfhost/data/<dienst>/
/opt/selfhost/stacks/<dienst>/config/
Docker-Volumes sind ebenfalls persistent, aber weniger offensichtlich als Hostpfade. Wenn ein Stack benannte Docker-Volumes verwendet, muss die Dienstseite diese explizit nennen.
Backup-Relevanz nach Kategorien¶
| Kategorie | Beispiele | Backup-Priorität |
|---|---|---|
| Identität/Zugriff | Dienst-Logins, API-Keys, OAuth-Tokens | sehr hoch |
| Stalwart-Konfiguration und Maildaten | sehr hoch | |
| KI-Gateway | LiteLLM-Datenbank, OAuth-Tokens, Modellkonfiguration | hoch |
| Observability | Langfuse PostgreSQL/ClickHouse/MinIO | hoch |
| Admin-Tools | Portainer, Uptime Kuma, CaddyManager | mittel bis hoch |
| Generierte Artefakte | /opt/selfhost/generated/, /opt/selfhost/site/ |
niedrig, reproduzierbar |
Lokaler Backup-Timer¶
Es gibt einen aktiven systemd-Timer:
selfhost-config-backup.timer
Er läuft täglich und erzeugt lokale Konfigurationsbackups. Lokale Backups ersetzen keine externe/offsite Sicherung, sind aber nützlich für schnelle Rückverfolgung und Wiederherstellung nach Konfigurationsfehlern.
Nützliche Befehle:
systemctl list-timers --all selfhost-config-backup.timer
systemctl status selfhost-config-backup.timer
systemctl status selfhost-config-backup.service
Was gesichert werden sollte¶
Mindestens backuprelevant sind:
/opt/selfhost/registry/routes.json
/opt/selfhost/stacks/
/opt/selfhost/data/
/opt/selfhost/secrets/
/opt/selfhost/docs/
/opt/selfhost/mkdocs.yml
/etc/caddy/Caddyfile
/opt/selfhost/generated/openclaw-error/
Bei /opt/selfhost/generated/ ist zu unterscheiden: Die meisten Dateien sind reproduzierbar. Die OpenClaw-Hinweisseite ist dagegen eine bewusst gepflegte statische Seite und sollte erhalten bleiben.
Was nicht als alleinige Quelle gelten sollte¶
Nicht als einzige Quelle sollten gelten:
/opt/selfhost/site/, weil es aus MkDocs neu gebaut werden kann./opt/selfhost/generated/caddy/routes.caddy, weil es ausroutes.jsonneu generiert wird./opt/selfhost/generated/homepage/services.yaml, weil es ausroutes.jsonneu generiert wird.- Container-Dateisysteme ohne Volume, weil sie bei Recreate verloren gehen können.
Wiederherstellungslogik¶
Eine grobe Wiederherstellung folgt dieser Reihenfolge:
- Host-Basisdienste bereitstellen: Docker, Caddy, Tailscale.
/opt/selfhostmit Registry, Stacks, Daten, Secrets und Docs wiederherstellen.- Docker-Compose-Stacks starten.
- Registry-Artefakte neu generieren.
- Caddy validieren und reloaden.
- MkDocs neu bauen.
- Dienstweise prüfen: Mail, Agents, KI-Dienste, Admin-Oberflächen.
Dokumentationsregel¶
Dienstseiten sollen einen Abschnitt „Persistente Daten und Backups“ enthalten. Dort wird pro Dienst festgehalten:
- welche Hostpfade oder Docker-Volumes wichtig sind,
- welche Konfigurationsdateien dazugehören,
- welche Secret-Datei verwendet wird,
- ob Daten reproduzierbar oder kritisch sind.