Zum Inhalt springen

Docker Secrets

solyto nutzt Docker Secrets, um sensible Zugangsdaten zu verwalten. Passwörter, API-Schlüssel und Tokens werden als Dateien im Verzeichnis ./secrets/ gespeichert und zur Laufzeit in die Container eingebunden. So bleiben Secrets aus Umgebungsvariablen und der Versionskontrolle heraus.

Jedes Secret ist eine Textdatei in ./secrets/. Der Dateiname ist der Name des Secrets:

secrets/
app_key
db_user
db_password
ai_api_key
...

Laravel und andere Dienste lesen Secrets über die _FILE-Suffix-Konvention. Zum Beispiel weist DB_PASSWORD_FILE=/run/secrets/db_password Laravel an, das Datenbankpasswort aus dieser Datei statt aus einer Umgebungsvariable zu lesen.

Docker Compose bindet diese Dateien schreibgeschützt unter /run/secrets/ in die Container ein.

Diese 7 Secrets müssen vorhanden sein, damit solyto starten kann:

SecretBeschreibungGenutzt von
app_keyLaravel-Verschlüsselungsschlüssel (Format: base64:...)api, queue
db_userMariaDB-Anwendungsbenutzerapi, queue, mariadb
db_passwordMariaDB-Anwendungspasswortapi, queue, mariadb
dav_db_userPostgreSQL-DAV-Benutzerdav, postgres
dav_db_passwordPostgreSQL-DAV-Passwortdav, postgres
mariadb_root_passwordMariaDB-Root-Passwortmariadb
postgres_root_passwordPostgreSQL-Superuser-Passwortpostgres

Der MariaDB-Benutzer und das Passwort werden über db_user / db_password bereitgestellt (dieselben Zugangsdaten, die auch die API nutzt).

Diese 11 Secrets aktivieren optionale Funktionen. Erstelle leere Dateien oder lasse sie weg, wenn sie nicht benötigt werden:

SecretBeschreibungAktiviert
solyto_bot_webhook_tokenWebhook-Token des Telegram-BotsTelegram-Bot
solyto_bot_telegram_tokenAPI-Token des Telegram-BotsTelegram-Bot
hardcover_api_keyHardcover-Buch-API-SchlüsselBuch-Metadaten-Importe
ai_api_keyAPI-Schlüssel des KI-AnbietersBibliotheksempfehlungen
mailgun_secretMailgun-API-SchlüsselE-Mail-Benachrichtigungen
vapid_public_keyÖffentlicher Web-Push-SchlüsselBrowser-Push-Benachrichtigungen
vapid_private_keyPrivater Web-Push-SchlüsselBrowser-Push-Benachrichtigungen
bgg_api_keyBoardGameGeek-API-SchlüsselSpiele-Metadaten
tmdb_access_tokenTMDB-API-ZugriffstokenFilm-Metadaten
imgproxy_keyImgproxy-AuthentifizierungsschlüsselBildverarbeitung über imgproxy
imgproxy_saltImgproxy-URL-Signatur-SaltBildverarbeitung über imgproxy

Das Setup-Skript erzeugt alle erforderlichen Secrets automatisch:

Terminal-Fenster
curl -fsSL "https://raw.githubusercontent.com/solyto/selfhosted/main/setup.sh?$(date +%s)" | bash

Falls du ein Secret manuell neu erzeugen musst:

Terminal-Fenster
# Zufälliges Hex-Passwort (32 Byte)
openssl rand -hex 32 > secrets/db_password
# Laravel-App-Key
echo "base64:$(openssl rand -base64 32)" > secrets/app_key
# Einfacher Benutzername
echo "solyto" > secrets/db_user
# API-Schlüssel (füge deinen eigenen ein)
echo "sk-your-openai-key-here" > secrets/ai_api_key
  • Committe Secrets niemals in die Versionskontrolle — das Verzeichnis secrets/ sollte in der .gitignore stehen
  • Dateiberechtigungen — beschränke den Zugriff auf Secret-Dateien: chmod 600 secrets/*
  • Backups — sichere dein secrets/-Verzeichnis an einem sicheren Ort. Gehen diese Dateien verloren, musst du möglicherweise die Datenbank-Zugangsdaten zurücksetzen
  • Rotation — um ein Secret zu rotieren, aktualisiere die Datei und starte die betroffenen Dienste mit docker compose up -d neu

Wenn ein Dienst nicht startet, überprüfe, ob die erforderlichen Secret-Dateien vorhanden und lesbar sind:

Terminal-Fenster
ls -la secrets/
docker compose logs api

Häufige Ursachen sind fehlende Dateien, leere Dateien oder abschließende Zeilenumbrüche in den Secret-Dateien.