Ceci est une ancienne révision du document !
Table des matières
Architecture complète du serveur
Dernière mise à jour : juin 2026
Vue d'ensemble
Infrastructure à trois machines sur un LAN1 filaire, avec un réseau wifi (LAN2) isolé. Tous les services tournent sous Docker sur le serveur principal.
Internet
| 443/80
v
[ Routeur ] ──(isolé)──> [ LAN2 wifi ]
|
v LAN1
[ Proxy — Caddy ] TLS · Let's Encrypt · reverse proxy · forward_auth
|
v LAN1 (ports internes)
[ Serveur principal ]
|── Auth : Kanidm · Authelia
|── Services : Nextcloud · Blog · DokuWiki · Ampache · MariaDB
|── Surveillance : Cockpit · Uptime Kuma · Dozzle · CrowdSec · Homepage
└── Stockage : Soft-RAID mdadm 2 To (volumes Docker bindés)
[ Portables ×4 ]
|── kanidm-unixd (cache offline · PAM)
|── Home local (pas de NFS)
|── Client Nextcloud · Client Ampache · Navigateur web (SSO)
Les trois machines
Routeur
- NAT entrant : ports 80 et 443 redirigés vers Caddy
- Pare-feu : LAN2 wifi isolé du LAN1 filaire
- Le serveur principal n'est jamais exposé directement à Internet
Proxy — Caddy
- Terminaison TLS et gestion des certificats Let's Encrypt
- Reverse proxy vers les services du serveur principal
forward_authvers Authelia pour chaque requête entrante- Machines : proxy dédié sur LAN1, indépendant du serveur
Serveur principal
- OS : Debian Trixie (13), kernel 6.x
- Matériel : AMD x86, 8 Go RAM, 2 To en soft-RAID (mdadm)
- Conteneurisation : Docker CE (dépôt officiel), Docker Compose v2
- Cockpit installé en bare-metal (hors Docker), accessible LAN uniquement sur
:9090
Services Docker
Authentification
| Service | Rôle | Port exposé | RAM estimée |
|---|---|---|---|
| Kanidm | Source de vérité : comptes, groupes | LAN interne | ~50 Mo |
| Authelia | SSO web, règles d'accès par groupe | LAN interne :9091 | ~50 Mo |
Flux d'authentification :
- Login système portable : kanidm-unixd → Kanidm (cache local si offline)
- Services web (navigateur) : Caddy → forward_auth Authelia → Kanidm
- Client Nextcloud desktop/mobile : Nextcloud → LDAP → Kanidm directement
- Changement de mot de passe : interface web Kanidm → propagation au prochain sync
Gestion des droits :
- Groupes définis dans Kanidm (ex.
music_users,wiki_editors,admin) - Règles d'accès par groupe dans le fichier de config Authelia (YAML statique)
- Modification des droits → édition YAML + redémarrage Authelia
Services applicatifs
| Service | Rôle | Auth | Exposition |
|---|---|---|---|
| Nextcloud | Stockage et sync fichiers | LDAP → Kanidm + Authelia devant | Port interne → Caddy |
| Blog | Site web | Authelia devant | Port interne → Caddy |
| DokuWiki | Wiki | Authelia devant | Port interne → Caddy |
| Ampache | Streaming musical | Authelia devant | Port interne → Caddy |
| MariaDB | Base de données | Réseau Docker interne uniquement | Non exposé |
Nextcloud — deux chemins d'auth :
- Navigateur web : Authelia intercepte, puis Nextcloud vérifie aussi via LDAP/Kanidm
- Clients desktop/mobile : Nextcloud → LDAP → Kanidm directement (pas via Authelia)
Surveillance et sécurité
| Outil | Rôle | Accès | RAM estimée |
|---|---|---|---|
| Cockpit | Système, RAID, journaux, terminal web | LAN :9090 | bare-metal |
| Uptime Kuma | Disponibilité des services, alertes | LAN interne | ~50 Mo |
| Dozzle | Logs Docker en temps réel | LAN interne | ~10 Mo |
| Homepage | Page d'accueil unifiée, liens, statuts | LAN interne | ~20 Mo |
| CrowdSec | Détection intrusions, brute force | LAN interne | ~100 Mo |
| AIDE | Intégrité des fichiers système | Passif | négligeable |
Portables (×4)
Chaque portable dispose de :
kanidm-unixd: daemon de cache credentials, authentification PAM- Home local sur le disque du portable (pas de NFS)
- Au moins un login réseau réussi requis pour initialiser le cache offline
Mode offline : après le premier login, kanidm-unixd maintient un cache chiffré local. L'authentification fonctionne sans réseau. En cas de changement de mot de passe hors réseau, la resynchronisation se fait au prochain contact avec le serveur.
Exposition Kanidm vers l'extérieur : pour provisionner un nouveau portable hors LAN, Kanidm doit être accessible depuis Internet via Caddy sur un sous-domaine dédié, avec MFA activé (TOTP ou passkey).
Stockage
- Soft-RAID
mdadmsur le serveur principal, 2 To - Toutes les données persistantes (fichiers Nextcloud, base MariaDB, musique Ampache) sont montées via bind mounts ou volumes nommés vers le RAID
- Les données ne vivent jamais dans les couches des conteneurs Docker
- Fichiers réseau (Samba/NFS) : hors Docker, accessibles uniquement sur le LAN1
Plan de déploiement par étapes
Principe : chaque étape est fonctionnelle et stable avant de passer à la suivante. Retour arrière possible à tout moment.
Étape 1 — Socle de surveillance
Objectif : avoir de la visibilité sur le serveur avant de toucher aux services.
- Installer Cockpit en bare-metal (
apt install cockpit) - Déployer Dozzle (logs Docker)
- Déployer Uptime Kuma (surveillance services)
- Déployer Homepage (page d'accueil)
- Vérifier l'état du RAID via Cockpit
Risque : quasi nul — outils de lecture uniquement, aucun impact sur l'existant.
Étape 2 — Services applicatifs
Objectif : migrer les services actuels (bare-metal) vers Docker, un par un.
Ordre recommandé (du moins critique au plus critique) :
- DokuWiki (pas de base de données, migration simple)
- Blog (selon stack : WordPress ou statique)
- MariaDB (conteneurisation de la base, snapshot avant migration)
- Nextcloud (le plus complexe : permissions, config, clients existants)
- Ampache (dépend du volume de fichiers musique à monter)
Règle : conserver l'ancien service bare-metal actif jusqu'à validation complète du conteneur.
Risque : moyen — planifier une fenêtre de maintenance par service.
Étape 3 — Authentification centralisée (Kanidm)
Objectif : déployer Kanidm et connecter les portables, sans toucher aux services web.
- Déployer Kanidm en conteneur
- Créer les 4 comptes et les groupes
- Installer
kanidm-unixdsur chaque portable - Tester le login système + cache offline (couper le réseau et vérifier)
- Connecter Nextcloud en LDAP vers Kanidm
Risque : moyen — tester le fallback offline avant de valider. Garder les comptes locaux sur les portables en parallèle pendant la période de test.
Étape 4 — SSO web (Authelia)
Objectif : protéger tous les services web derrière un portail de login unique.
- Déployer Authelia
- Configurer
forward_authsur Caddy (côté proxy) - Définir les règles d'accès par groupe dans le YAML Authelia
- Tester service par service (DokuWiki en premier, Nextcloud en dernier)
Risque : moyen à élevé — une mauvaise config Authelia peut bloquer l'accès à tous les services. Prévoir un accès de secours direct (bypass temporaire sur une IP LAN fixe).
Étape 5 — Sécurité (optionnel)
Objectif : renforcer la détection d'intrusions sans surcharger le serveur.
- Déployer CrowdSec (analyse logs Caddy, SSH, Nextcloud)
- Installer AIDE (intégrité fichiers système)
- Configurer les alertes (mail ou webhook)
Risque : faible — outils passifs ou bloquants uniquement sur les IPs malveillantes connues.
Estimation ressources
| Service | RAM estimée |
|---|---|
| Nextcloud | 200–400 Mo |
| MariaDB | 200–400 Mo |
| Ampache | 100–200 Mo |
| Blog | 50–100 Mo |
| DokuWiki | 50 Mo |
| Kanidm | 50 Mo |
| Authelia | 50 Mo |
| Uptime Kuma | 50 Mo |
| Dozzle | 10 Mo |
| CrowdSec | 100 Mo |
| Homepage | 20 Mo |
| Total estimé | ~900 Mo – 1,4 Go |
Marge disponible sur 8 Go : confortable. Surveiller MariaDB et Nextcloud en charge réelle.
Principes de sécurité
- MariaDB n'est jamais exposé hors du réseau Docker interne
- Cockpit accessible uniquement depuis le LAN (port 9090 bloqué au routeur)
- Kanidm exposé vers Internet uniquement pour le provisionnement des portables, avec MFA obligatoire
- Les fichiers réseau (Samba/NFS) restent hors Docker, LAN1 uniquement
- LAN2 wifi isolé : aucun accès direct au serveur principal
