Aller au contenu

Secrets Docker

solyto utilise les secrets Docker pour gérer les identifiants sensibles. Les mots de passe, clés API et jetons sont stockés sous forme de fichiers dans le répertoire ./secrets/ et montés dans les conteneurs au démarrage. Cela permet de garder les secrets hors des variables d’environnement et du contrôle de version.

Chaque secret est un fichier texte brut dans ./secrets/. Le nom du fichier est le nom du secret :

secrets/
app_key
db_user
db_password
ai_api_key
...

Laravel et les autres services lisent les secrets selon la convention du suffixe _FILE. Par exemple, DB_PASSWORD_FILE=/run/secrets/db_password indique à Laravel de lire le mot de passe de la base de données depuis ce fichier plutôt que depuis une variable d’environnement.

Docker Compose monte ces fichiers en lecture seule dans les conteneurs sous /run/secrets/.

Ces 7 secrets doivent être présents pour que solyto démarre :

SecretDescriptionUtilisé par
app_keyClé de chiffrement Laravel (format : base64:...)api, queue
db_userUtilisateur applicatif MariaDBapi, queue, mariadb
db_passwordMot de passe applicatif MariaDBapi, queue, mariadb
dav_db_userUtilisateur PostgreSQL DAVdav, postgres
dav_db_passwordMot de passe PostgreSQL DAVdav, postgres
mariadb_root_passwordMot de passe root de MariaDBmariadb
postgres_root_passwordMot de passe superutilisateur de PostgreSQLpostgres

L’utilisateur et le mot de passe MariaDB sont fournis par db_user / db_password (les mêmes identifiants que ceux utilisés par l’API).

Ces 11 secrets activent des fonctionnalités optionnelles. Créez des fichiers vides ou omettez-les si vous n’en avez pas besoin :

SecretDescriptionActive
solyto_bot_webhook_tokenJeton de webhook du bot TelegramBot Telegram
solyto_bot_telegram_tokenJeton d’API du bot TelegramBot Telegram
hardcover_api_keyClé API livres HardcoverImports de métadonnées de livres
ai_api_keyClé API du fournisseur d’IARecommandations de bibliothèque
mailgun_secretClé API MailgunNotifications par e-mail
vapid_public_keyClé publique Web PushNotifications push du navigateur
vapid_private_keyClé privée Web PushNotifications push du navigateur
bgg_api_keyClé API BoardGameGeekMétadonnées de jeux
tmdb_access_tokenJeton d’accès API TMDBMétadonnées de films
imgproxy_keyClé d’authentification ImgproxyTraitement d’images via imgproxy
imgproxy_saltSel de signature d’URL ImgproxyTraitement d’images via imgproxy

Le script d’installation génère automatiquement tous les secrets requis :

Fenêtre de terminal
curl -fsSL "https://raw.githubusercontent.com/solyto/selfhosted/main/setup.sh?$(date +%s)" | bash

Si vous devez régénérer un secret manuellement :

Fenêtre de terminal
# Mot de passe hexadécimal aléatoire (32 octets)
openssl rand -hex 32 > secrets/db_password
# Clé d'application Laravel
echo "base64:$(openssl rand -base64 32)" > secrets/app_key
# Nom d'utilisateur simple
echo "solyto" > secrets/db_user
# Clé API (collez la vôtre)
echo "sk-your-openai-key-here" > secrets/ai_api_key
  • Ne jamais commiter les secrets dans le contrôle de version — le répertoire secrets/ doit figurer dans .gitignore
  • Permissions des fichiers — restreignez l’accès aux fichiers de secrets : chmod 600 secrets/*
  • Sauvegardes — sauvegardez votre répertoire secrets/ de manière sécurisée. Si vous perdez ces fichiers, vous devrez peut-être réinitialiser les identifiants de base de données
  • Rotation — pour faire tourner un secret, mettez à jour le fichier et redémarrez les services concernés avec docker compose up -d

Si un service ne démarre pas, vérifiez que les fichiers de secrets requis existent et sont lisibles :

Fenêtre de terminal
ls -la secrets/
docker compose logs api

Les problèmes courants incluent des fichiers manquants, des fichiers vides, ou des retours à la ligne superflus dans les fichiers de secrets.