Stack Docker pour auto-hébergement de services domestiques, organisée par profils fonctionnels.
Cette stack utilise un fichier docker-compose.yml unique avec des profils pour organiser les services par catégories :
- infrastructure : Services de base (Traefik, OMV-Proxy, Portainer, Watchtower, Homepage, Authentik, Glances)
- dashboard : Tableaux de bord (Homepage)
- media : Services liés aux médias (Jellyfin, Jellyseerr, Radarr, Sonarr, Prowlarr, qBittorrent)
- domotique : Services domotiques (Home Assistant)
- tools : Outils divers (Planka avec PostgreSQL dédié, Snapdrop)
- all : Tous les services
-
Configuration
cp .env.example .env # Éditer .env avec vos valeurs -
Démarrer tous les services
docker compose --profile all up -d
-
Démarrer un profil spécifique
# Infrastructure (obligatoire en premier) docker compose --profile infrastructure up -d # Puis d'autres profils selon vos besoins docker compose --profile media up -d docker compose --profile domotique up -d
-
Démarrer plusieurs profils simultanément
docker compose --profile infrastructure --profile media --profile domotique up -d
# Arrêter tous les services
docker compose --profile all down
# Arrêter un profil spécifique
docker compose --profile media down
# Voir les logs d'un service
docker compose logs -f [service]
# Voir les logs d'un profil
docker compose --profile media logs -f
# Redémarrer un service
docker compose restart [service]
# Redémarrer un profil
docker compose --profile media restart- Traefik : Reverse proxy avec SSL automatique (Let's Encrypt)
- OMV-Proxy : Proxy nginx pour OpenMediaVault
- Portainer : Gestion des conteneurs Docker
- Watchtower : Mises à jour automatiques des conteneurs avec notifications email
- Homepage : Dashboard principal d'accueil avec SSO Authentik via Forward Auth
- Authentik : Serveur SSO/Identity Provider (OIDC, OAuth2, Forward Auth) avec base de données PostgreSQL dédiée
- Glances : Monitoring système en temps réel (accès local uniquement sur port 61208)
- Jellyfin : Serveur de streaming de médias (alternative open-source à Plex)
- Jellyseerr : Interface de demandes de médias pour Jellyfin
- Radarr : Gestionnaire automatique de films
- Sonarr : Gestionnaire automatique de séries TV
- Prowlarr : Gestionnaire d'indexeurs pour Radarr/Sonarr
- qBittorrent : Client torrent avec interface web
- Home Assistant : Centre de contrôle domotique (mode host) avec intégration ZHA pour Zigbee
- Planka : Tableau Kanban pour gestion de projets
- Planka-DB : Base de données PostgreSQL dédiée pour Planka
- Snapdrop : Partage de fichiers local P2P
La stack media utilise une structure unifiée dans ${MEDIA_PATH} :
/srv/.../media/
├── downloads/ # Téléchargements qBittorrent
│ ├── movies/ # Films en cours
│ └── tv/ # Séries en cours
├── movies/ # Bibliothèque films (Jellyfin)
└── tv/ # Bibliothèque séries (Jellyfin)
Configuration recommandée :
- Radarr → Dossier racine :
/data/movies - Sonarr → Dossier racine :
/data/tv - qBittorrent → Téléchargements :
/data/downloads - Jellyfin → Bibliothèques :
/data/movieset/data/tv
Services de base nécessaires au fonctionnement de la stack.
- traefik : Reverse proxy avec SSL automatique (Let's Encrypt)
- omv-proxy : Proxy nginx pour accès à OpenMediaVault via Traefik
- portainer : Interface web de gestion Docker (dépend d'Authentik pour le démarrage)
- watchtower : Mises à jour automatiques des conteneurs (vérification quotidienne)
- homepage : Dashboard principal avec widgets personnalisables et SSO Authentik via Forward Auth
- authentik-server : Serveur SSO/Identity Provider avec support OIDC, OAuth2 et Forward Auth
- authentik-worker : Worker pour tâches en arrière-plan (provisioning, webhooks, etc.)
- authentik-db : PostgreSQL 16 dédié pour Authentik
- glances : Monitoring système en temps réel (CPU, RAM, réseau, Docker) accessible sur port 61208
Tableaux de bord et interfaces de contrôle.
- homepage : Dashboard léger avec widgets personnalisables et protection SSO
Stack complète de gestion et diffusion de médias.
- jellyfin : Serveur de streaming avec support transcoding (GPU non requis)
- jellyseerr : Interface de demandes de médias avec gestion utilisateurs
- radarr : Automatisation téléchargement et organisation des films
- sonarr : Automatisation téléchargement et organisation des séries
- prowlarr : Gestion centralisée des indexeurs torrent/usenet
- qbittorrent : Client torrent avec interface web, configuration DNS personnalisée pour trackers
Écosystème domotique avec support Zigbee natif.
- homeassistant : Centre de contrôle domotique (mode host pour accès périphériques)
Outils divers et utilitaires avec bases de données dédiées.
- planka : Tableau Kanban pour gestion de projets
- planka-db : PostgreSQL 15 dédié pour Planka
- snapdrop : Partage de fichiers local P2P (alternative à AirDrop)
Authentik est un Identity Provider (IdP) open-source qui fournit l'authentification unique (SSO) pour tous vos services. Il prend en charge plusieurs protocoles d'authentification :
- OIDC (OpenID Connect) : Pour les applications avec support natif
- OAuth2 : Pour les applications modernes
- SAML : Pour les applications d'entreprise
- Forward Auth : Pour les applications sans support SSO natif (Radarr, Sonarr, Prowlarr, Homepage)
Les services suivants utilisent Authentik comme proxy d'authentification via les middlewares Traefik Forward Auth :
- Homepage : Dashboard protégé par authentification Authentik
- Radarr : Authentification externe désactivée (
AuthenticationMethod=External) - Sonarr : Authentification externe désactivée (
AuthenticationMethod=External) - Prowlarr : Authentification externe désactivée (
AuthenticationMethod=External)
- Portainer : SSO OIDC (configuration manuelle requise dans l'interface)
- Jellyfin : SSO OIDC (configuration via plugin SSO)
- Planka : SSO OIDC (configuration via variables d'environnement)
Plusieurs services ont une dépendance explicite sur Authentik :
depends_on:
authentik-server:
condition: service_healthyServices concernés :
- Radarr, Sonarr, Prowlarr (Stack Arr)
- Portainer
- Homepage
- Planka
Comportement :
- ✅ Ces services ne démarreront que si Authentik est opérationnel
- ✅ Garantit que l'authentification est disponible avant l'accès aux services
⚠️ Si Authentik tombe, ces services ne redémarreront pas automatiquement
- URL :
https://auth.${DOMAIN_BASE} - Compte admin : Configuré via
AUTHENTIK_BOOTSTRAP_EMAILetAUTHENTIK_BOOTSTRAP_PASSWORDdans.env
Pour chaque service protégé par Authentik, vous devez créer :
- Provider : Configure le protocole d'authentification (OIDC, Forward Auth, etc.)
- Application : Relie le provider à votre service
- Embedded Outpost : Pour le Forward Auth (inclus dans le serveur Authentik)
Homepage utilise le Forward Auth intégré d'Authentik. La configuration est automatique via les labels Traefik :
labels:
- "traefik.http.routers.homepage.middlewares=authentik-homepage@docker"
- "traefik.http.middlewares.authentik-homepage.forwardauth.address=http://authentik-server:9000/outpost.goauthentik.io/auth/traefik"
- "traefik.http.middlewares.authentik-homepage.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.authentik-homepage.forwardauth.authResponseHeaders=X-authentik-username,X-authentik-groups,X-authentik-email,X-authentik-name,X-authentik-uid"Variables d'environnement dans .env :
HOMEPAGE_ALLOWED_HOSTS=${DOMAIN_BASE}
HOMEPAGE_VAR_DOMAIN=${DOMAIN_BASE}Étapes de configuration :
-
Dans Authentik : Créer un provider OIDC
- Aller dans
Applications→Providers→Create - Type :
OAuth2/OpenID Provider - Name :
portainer - Authorization flow : Choisir un flow (ex:
default-authorization-flow) - Redirect URIs :
https://portainer.${DOMAIN_BASE} - Signing Key : Sélectionner une clé disponible
- Copier le
Client IDetClient Secretgénérés
- Aller dans
-
Dans Authentik : Créer une application
- Aller dans
Applications→Create - Name :
Portainer - Slug :
portainer - Provider : Sélectionner le provider créé précédemment
- Aller dans
-
Dans Portainer : Activer OIDC
- Se connecter en tant qu'administrateur local
- Aller dans
Settings→Authentication - Activer
OAuth - Renseigner :
- Automatic user provision : On
- Provider : Custom
- Client ID : Celui généré dans Authentik
- Client Secret : Celui généré dans Authentik
- Authorization URL :
https://auth.${DOMAIN_BASE}/application/o/authorize/ - Access token URL :
https://auth.${DOMAIN_BASE}/application/o/token/ - Resource URL :
https://auth.${DOMAIN_BASE}/application/o/userinfo/ - Redirect URL :
https://portainer.${DOMAIN_BASE} - User identifier :
preferred_usernameouemail - Scopes :
openid profile email
-
Tester la connexion : Se déconnecter et tester l'authentification via Authentik
Variables d'environnement dans .env (pour référence uniquement) :
PORTAINER_OIDC_CLIENT_ID=<client_id_depuis_authentik>
PORTAINER_OIDC_CLIENT_SECRET=<client_secret_depuis_authentik>La stack Arr utilise le Forward Auth intégré d'Authentik via les middlewares Traefik. La configuration est similaire à Homepage :
- Créer une Application dans Authentik pour chaque service (Radarr, Sonarr, Prowlarr)
- Configurer un Forward Auth Provider pointant vers chaque application
- Les middlewares Traefik se connectent directement à :
http://authentik-server:9000/outpost.goauthentik.io/auth/traefik
Glances est un outil de monitoring système en temps réel accessible localement :
- URL :
http://<ip_serveur>:61208 - Fonctionnalités :
- Monitoring CPU, RAM, disques, réseau
- Surveillance des conteneurs Docker
- Accès en lecture seule au système hôte (PID host)
Avantages :
- ✅ Authentification centralisée pour tous les services
- ✅ Gestion unifiée des utilisateurs et groupes
- ✅ Support 2FA/MFA natif
- ✅ Logs d'authentification centralisés
- ✅ Monitoring système avec Glances
Risques à considérer :
⚠️ Point unique de défaillance (SPOF) : Si Authentik tombe, plusieurs services deviennent inaccessibles⚠️ Services avecAuthenticationMethod=Externaln'ont aucune protection si Authentik ne fonctionne pas
Recommandations :
- Monitoring : Surveiller l'état d'Authentik (healthcheck configuré)
- Sauvegardes : Sauvegarder régulièrement la base de données PostgreSQL
- Alertes : Configurer des notifications si Authentik devient indisponible
- Tests : Tester régulièrement le démarrage de la stack complète
Pour les services Arr, l'authentification interne a été désactivée en modifiant manuellement le fichier config.xml :
<AuthenticationMethod>External</AuthenticationMethod>Note : Cette configuration n'est pas disponible via variables d'environnement et doit être modifiée directement dans les fichiers de configuration.
Procédure :
- Arrêter les conteneurs :
docker compose stop radarr sonarr prowlarr - Modifier les fichiers
config.xmldans les volumes Docker - Redémarrer les conteneurs :
docker compose start radarr sonarr prowlarr