Préparation Environnement Docker
Arborescence standard
Nous allons mettre en place une arborescence cohérente pour gérer les différents fichiers nécessaire pour mettre en place un service avec Docker.
Les fichiers docker-composes.yml se trouveront dans le répertoire /docker puis dans un sous répertoire correspondant au nom du service. Par exemple, pour le service Nextcloud : /docker/nextcloud/docker-compose.yml
Les volumes qui devront être montés pour garder la persistance de certain fichiers utilisé par les images docker seront monté dans un dossier /volumes puis dans un sous répertoire correspondant au nom du service. Par exemple, pour le service Nextcloud : /volumes/nextcloud/config, /volumes/nextcloud/logs, etc...
# arborescence "infra"
sudo mkdir -p /docker/{nextcloud,immich,jellyfin,vault,bookstack,stump}
sudo mkdir -p /mnt/volumes/{nextcloud,immich,jellyfin,vault,bookstack,stump}
# exemples de sous-dossiers de données (ajustez selon vos besoins)
sudo mkdir -p /mnt/volumes/nextcloud/{config,data,db,redis,logs}
sudo mkdir -p /mnt/volumes/jellyfin/{config,cache,media}
sudo mkdir -p /mnt/volumes/bookstack/{config,uploads,db}
sudo mkdir -p /mnt/volumes/stump/{config,cache,media}
sudo mkdir -p /mnt/volumes/vault/{data,config}
sudo mkdir -p /mnt/volumes/immich/{config,photos,thumbs,db,redis}
Créer un unique utilisateur/groupe « technique »
Maintenant nous allons créer un utilisateur sans home ni SSH, qui servira d'utilisateur technique pour les services docker.
# 10050 est un exemple stable (en dehors de la plage "classique" des UIDs système)
sudo groupadd --system --gid 10050 dockersvc
sudo useradd --system --uid 10050 --gid 10050 \
--no-create-home --home-dir /nonexistent \
--shell /usr/sbin/nologin dockersvc
# par sécurité, verrouille le mot de passe
sudo passwd -l dockersvc
Cela permettra de donné tous les droits de lecture et d'écriture seulement à cet utilisateur pour éviter les erreurs d'accès.
Propriété et ACL par défaut sur les volumes
Deux approches possibles pour les permissions :
-
A. Standardiser les UID/GID des conteneurs sur
PUID=10050/PGID=10050(idéal avec les images linuxserver.io qui supportent ces variables). -
B. Si une image n’accepte pas PUID/PGID, nous pourrons soit forcer
user: "10050:10050"dans Compose (si l’image le supporte), soit laisser l’image avec son UID (ex:33pourwww-data) et ajouter une ACL pour quedockersvcait toujours les droits.
Je propose de faire les deux : on met dockersvc propriétaire des volumes et on pose des ACL par défaut pour éviter toute surprise si un service réécrit des permissions.
# propriété "dockersvc"
sudo chown -R dockersvc:dockersvc /mnt/volumes
# ACL: dockersvc = rwx et droits par défaut hérités (rwX)
sudo apt-get update && sudo apt-get install -y acl
sudo setfacl -R -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes
sudo setfacl -R -d -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes
Ainsi, un seul compte (dockersvc) maîtrise tous les dossiers, et les nouveaux fichiers héritent des bons droits.
Pour les images ne supportant pas user/PUID, on pourra ajouter au besoin des ACL ciblées sur leur UID (ex : setfacl -m u:33:rwx /mnt/volumes/nextcloud/data).