Skip to main content

Exemple mise en place d'un nouveau service

Nous allons mettre en place le servie Postgres pour la première fois. Voici les démarches à suivre pour que le nouveau service fonctionne avec notre environnement :

Etape 1 : Création de la structure des volumes

sudo mkdir -p /mnt/volumes/postgres/{data,logs,conf,init}
sudo chown -R dockersvc:dockersvc /mnt/volumes/postgres
sudo setfacl -R -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes/postgres
sudo setfacl -R -d -m u:dockersvc:rwx,g:dockersvc:rwx /mnt/volumes/postgres

Cette arborescence permet :

  • data/ → stockage des bases

  • logs/ → logs PostgreSQL hors conteneur

  • conf/ → fichiers de configuration personnalisés (postgresql.conf, pg_hba.conf)

  • init/ → scripts SQL ou shell exécutés au premier lancement

Etape 2 : Création du docker-compose.yml PostgreSQL

version: "3.9"

services:
  postgres:
    image: postgres:${POSTGRES_VERSION}-alpine
    container_name: postgres
    restart: unless-stopped
    user: "${PUID}:${PGID}" # ✅ On force l'utilisation de dockersvc
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - TZ=${TZ}
    volumes:
      - ${VOLROOT}/postgres/data:/var/lib/postgresql/data
      - ${VOLROOT}/postgres/logs:/var/log/postgresql
      - ${VOLROOT}/postgres/conf:/etc/postgresql/custom
      - ${VOLROOT}/postgres/init:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5

Etape 3 : Démarrer et Vérifier les UID/GID

Pour vérifier les UID/GID après le premier démarrage :

docker exec -it postgres id

Résultat attendu :

uid=10050(dockersvc) gid=10050(dockersvc) groups=10050(dockersvc)

Si l’image officielle PostgreSQL refuse user: "${PUID}:${PGID}", alors on garde dockersvc propriétaire des volumes mais on lance le conteneur sous avec l'utilisateur par défaut mais on va ajouter des ACL spécifique.

Pour ajouter une ACL spécifique :

sudo setfacl -R -m u:999:rwx /mnt/volumes/postgres