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:17-alpine
    container_name: postgres
    restart: unless-stopped
    user: ${PUID}:${PGID}
    networks:
      - bddnetwork
    ports:
      - 5432:5432
    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
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=OYsA4X8N0xC0AN
      - TZ=${TZ}
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U ${POSTGRES_USER}
      interval: 10s
      timeout: 5s
      retries: 5
volumes:
  postgres: null
networks:
  bddnetwork:
    external: true

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