No results
1
Secrets
pepper edited this page 2026-06-27 03:07:55 +00:00
Table of contents
🔑 Secrets — Gestion des mots de passe
Principe
Aucun mot de passe n'est en clair dans docker-compose.yml ou .env.
Tous les secrets sont des fichiers texte dans ./secrets/ :
- Montés en lecture seule via Docker secrets (
/run/secrets/<nom>) - Accessibles uniquement aux services qui en ont besoin
- Exclus du dépôt git (
secrets/dans.gitignore)
Liste des secrets
| Fichier | Usage |
|---|---|
authentik_db_password.txt |
Mot de passe PostgreSQL rôle authentik_user |
authentik_secret_key.txt |
Clé secrète Django Authentik (SECRET_KEY) |
forgejo_db_password.txt |
Mot de passe PostgreSQL rôle forgejo_user |
nextcloud_db_password.txt |
Mot de passe PostgreSQL rôle nextcloud_user |
nextcloud_admin_password.txt |
Mot de passe admin Nextcloud (init uniquement) |
redis_password.txt |
Mot de passe Redis Authentik |
redis_nextcloud_password.txt |
Mot de passe Redis Nextcloud |
grafana_oauth_secret.txt |
Client secret OIDC Grafana ↔ Authentik |
grafana_admin_password.txt |
Mot de passe admin local Grafana |
jellyfin_api_key.txt |
Clé API Jellyfin (utilisée par jellyfin-sso-init) |
jellyfin_sso_secret.txt |
Client secret OIDC Jellyfin ↔ Authentik |
crowdsec_api_key.txt |
Clé API bouncer SWAG ↔ CrowdSec LAPI |
hcaptcha_site_key.txt |
Clé publique hCaptcha (visible dans le HTML) |
hcaptcha_secret_key.txt |
Clé secrète hCaptcha (validation côté serveur) |
forgejo_git_token.txt |
Token API Forgejo pour git-push.sh |
Comment un service lit un secret
Services supportant _FILE nativement
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db_password
secrets:
- db_password
Services sans support _FILE (Redis, Authentik, Grafana...)
L'entrypoint lit le fichier et exporte la variable avant de lancer le programme :
#!/bin/sh
export REDIS_PASSWORD="$(cat /run/secrets/redis_password)"
exec redis-server --requirepass "$REDIS_PASSWORD"
Pattern FILE__* (SWAG / CrowdSec bouncer)
environment:
- FILE__CROWDSEC_SITE_KEY=/run/secrets/hcaptcha_site_key
Le mod lit le fichier au démarrage et remplace la variable.
Créer un nouveau secret
# 1. Générer un mot de passe fort
openssl rand -base64 32 > secrets/nouveau_service_password.txt
chmod 600 secrets/nouveau_service_password.txt
# 2. Déclarer dans docker-compose.yml
# Section globale `secrets:` :
secrets:
nouveau_service_password:
file: ./secrets/nouveau_service_password.txt
# Section du service :
services:
mon-service:
secrets:
- nouveau_service_password
# 3. Recréer le service
sudo docker compose up -d mon-service
Changer un mot de passe existant
# 1. Mettre à jour le fichier secret
echo "nouveau_mot_de_passe" > secrets/<nom>.txt
# 2. Si c'est un mot de passe PostgreSQL, mettre à jour la base
sudo docker exec -it postgresql psql -U postgres -c "ALTER ROLE <user> PASSWORD 'nouveau_mot_de_passe';"
# 3. Recréer le(s) service(s) concerné(s)
sudo docker compose up -d --force-recreate <service>
Sécurité des fichiers
# Vérifier les permissions (doivent être 600 ou 640)
ls -la secrets/
# Corriger si nécessaire
chmod 600 secrets/*.txt
Les secrets sont sauvegardés dans
backup.sh(inclus dans l'archive) et exclus du dépôt git.