Aller au contenu

đŸ› ïž Guide de dĂ©ploiement on-premise (Docker Compose)

Ce document décrit comment déployer Maarch Courrier on-premise via Docker Compose.

  • Public cible : intĂ©grateurs / admins avec des bases Docker + Linux
  • Objectif : obtenir une instance fonctionnelle (DB + App + Typesense)

✅ PrĂ©requis

Docker Engine

Docker est nécessaire pour exécuter les conteneurs.

Docker Compose

Docker Compose (plugin docker compose) est nécessaire pour orchestrer plusieurs services.

Typesense

Un moteur de recherche open source pour les fonctionnalités de recherche référentiel Base adresse nationale (BAN) et plein texte des documents.


đŸ§© Architecture dĂ©ployĂ©e

Services déployés par défaut :

  • db-mc : PostgreSQL (base de donnĂ©es)
  • app-mc : Maarch Courrier (application)
  • typesense : Typesense (moteur de recherche)

Si vous avez dĂ©jĂ  un PostgreSQL existant, vous pouvez supprimer db-mc et adapter la configuration de l’application (selon votre mode de paramĂ©trage).


📁 Étape 1 — PrĂ©parer l’environnement

Créer des répertoires hÎte requis (adaptez selon votre infra) :

mkdir -p /home/maarch/courrier/{docservers,custom,librairies,cron}
  • docservers
  • custom
  • librairies (si nĂ©cessaire selon votre usage)
  • cron (lecture)

đŸ§Ÿ Étape 2 — CrĂ©er le fichier d’environnement docker.env

Créer docker.env dans /home/maarch/courrier/ et copier le contenu suivant :

# Port d'exposition de l'application
APP_PORT=8080

# Chemins de stockage et de personnalisation
DOCSERVERS_ROOT_PATH=/home/maarch/courrier/docservers
CUSTOM_PATH=/home/maarch/courrier/custom
LIBRAIRIES_PATH=/home/maarch/courrier/librairies
CRON_CONFIGURATION_PATH=/home/maarch/courrier/cron
MAARCH_TMP_DIR=/tmp

# Typesense
TYPESENSE_API_KEY=change_me_please

Bonnes pratiques : Ă©vitez les clĂ©s “en dur” dans compose.yml. Centralisez-les ici.


đŸ§± Étape 3 — CrĂ©er le fichier compose.yml

Créer compose.yml dans /home/maarch/courrier/ et copier le contenu suivant :

# compose.yml

services:
  # Base de données PostgreSQL (optionnelle si vous avez déjà un PostgreSQL externe)
  db-mc:
    image: postgres:16-alpine
    restart: unless-stopped
    networks:
      - network-mc
    command: ["-c", "datestyle=iso,dmy"]
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB -h localhost -p 5432"]
      interval: 2s
      timeout: 5s
      retries: 15
    volumes:
      - db-data:/var/lib/postgresql/data
      - sql_path:/home/sql
      - script_path:/home/scripts
    environment:
      POSTGRES_DB: MaarchCourrier
      POSTGRES_USER: maarch
      POSTGRES_PASSWORD: maarch
      # ⚠ "trust" est pratique en local, mais dĂ©conseillĂ© en production.
      POSTGRES_HOST_AUTH_METHOD: "trust"

  app-mc:
    depends_on:
      db-mc:
        condition: service_healthy
      typesense:
        condition: service_started
    image: registry.maarch.org/maarch/maarchcourrier:latest
    # ⚠ Recommandation : garder "no" si une migration/MAJ peut rendre l'app indisponible
    restart: "no"
    networks:
      - network-mc
    healthcheck:
      test: ["CMD", "healthcheck.sh"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 5s
    volumes:
      - ${DOCSERVERS_ROOT_PATH}:/opt/maarch/docservers:rw
      - ${CUSTOM_PATH}:/var/www/html/MaarchCourrier/custom:rw
      - sql_path:/var/www/html/MaarchCourrier/sql:rw
      - script_path:/home/scripts:rw
      - ${LIBRAIRIES_PATH}:/app/librairies:rw
      - ${CRON_CONFIGURATION_PATH}:/etc/cron.d:ro
    ports:
      - ${APP_PORT}:80
    environment:
      LIBRARIES_DIR: /app/librairies
      MAARCH_TMP_DIR: ${MAARCH_TMP_DIR}
      TYPESENSE_API_KEY: "apiKeySample"
      TYPESENSE_NODE_HOST_1: "typesense"
      TYPESENSE_NODE_PORT_1: "8108"
      TYPESENSE_NODE_PROTOCOL_1: "http"
      TYPESENSE_CONNECTION_TIMEOUT_SECONDS: "2"

  typesense:
    image: typesense/typesense:29.0
    restart: unless-stopped
    command:
      - --data-dir=/data
      - --api-key=apiKeySample
      - --listen-port=8108
      - --enable-cors=true
    volumes:
      - typesense-data:/data
    ulimits:
      nofile:
        soft: 65536
        hard: 65536
    networks:
      - network-mc

volumes:
  db-data:
  sql_path:
  script_path:
  typesense-data:

networks:
  network-mc:
    driver: bridge
Nouveau Parapheur Interne (licence privée)

🚀 Étape 4 — DĂ©ployer

Dans le dossier contenant compose.yml et docker.env :

docker compose -p mc_26 -f compose.yml --env-file docker.env up -d

🔍 Étape 5 — VĂ©rifier l’état

Lister les services :

docker compose -p mc_26 -f compose.yml --env-file docker.env ps

Suivre les logs :

docker compose -p mc_26 -f compose.yml --env-file docker.env logs -f

🌐 Étape 6 — AccĂ©der Ă  l’interface

Depuis le serveur (ou un poste qui y accĂšde) :

  • http://172.17.0.1:8080

Le port dépend de APP_PORT dans docker.env.

Ensuite, suivre l’assistant d’installation dans l’interface.


🧰 Commandes utiles

ArrĂȘter (sans supprimer)

Stoppe les conteneurs sans les supprimer :

docker compose -p mc_26 -f compose.yml --env-file docker.env stop

Redémarrer

docker compose -p mc_26 -f compose.yml --env-file docker.env restart

Supprimer l’environnement (conteneurs + rĂ©seaux)

docker compose -p mc_26 -f compose.yml --env-file docker.env down

⚠ Suppression complĂšte avec volumes (perte de donnĂ©es DB / Typesense) :

docker compose -p mc_26 -f compose.yml --env-file docker.env down -v

Ouvrir un shell dans l’application

docker compose -p mc_26 -f compose.yml --env-file docker.env exec app-mc bash

📌 RĂ©fĂ©rence (variables d’environnement principales)

Variable Description Exemple
APP_PORT Port exposĂ© sur l’hĂŽte 8080
DOCSERVERS_ROOT_PATH Stockage des documents (hĂŽte) /home/maarch/courrier/docservers
CUSTOM_PATH Personnalisations (hĂŽte) /home/maarch/courrier/custom
LIBRAIRIES_PATH Librairies externes (hĂŽte) /home/maarch/courrier/librairies
CRON_CONFIGURATION_PATH Fichiers cron (hĂŽte) /home/maarch/courrier/cron
MAARCH_TMP_DIR Répertoire temporaire (dans le conteneur) /tmp
TYPESENSE_API_KEY Clé API Typesense (partagée app / serveur) change_me_please