Maarch Courrier – GED dockerisée (+ OnlyOffice)

Docker : Maarch Courrier + OnlyOffice

Déploiement d’une GED Maarch Courrier sur Docker Compose avec PostgreSQL, volumes persistants et intégration OnlyOffice DocumentServer sécurisée par JWT. Objectif : une stack reproductible, maintenable et prête à l’industrialisation.

Docker Compose Maarch Courrier PostgreSQL 16 OnlyOffice JWT Debian/Ubuntu
  • Catégorie : GED / Gestion documentaire
  • Contexte : VM locale (Debian/Ubuntu) – déploiement Docker
  • Livrables : compose.yml, .env, volumes persistants, doc d’installation
Voir le repository GitHub
1) Contexte & objectifs

Fournir une GED Maarch Courrier opérationnelle avec édition collaborative via OnlyOffice DocumentServer. Contraintes : déploiement rapide, reproductible, isolé de l’OS, données persistantes et maintenance simple — d’où le choix Docker + Docker Compose.

  • Livrables : compose.yml, .env simple, répertoires persistants (docservers, custom, BDD), OnlyOffice séparé et JWT.
2) C’est quoi ces outils ?

Maarch Courrier (GED / gestion du courrier)

  • Fonctionnel : enregistrement, indexation, circuits de validation, recherche, archivage, export PDF…
  • Technique : PHP (front/API) + PostgreSQL + répertoires docservers & custom.
  • Intégrations classiques : LDAP, SMTP, scanners, parapheur.

OnlyOffice DocumentServer

  • Édition collaborative Word/Excel/PowerPoint dans le navigateur.
  • Intégration via URL DocumentServer + JWT Secret (les fichiers restent côté Maarch).
3) Architecture Docker retenue
  • Réseau Docker commun.
  • db-mc : PostgreSQL 16, volume persistant, healthcheck.
  • app-mc : image officielle Maarch, volumes docservers/custom/librairies, port exposé (ex. 8080:80), healthcheck.
  • onlyoffice : DocumentServer 8.3.3, port (ex. 4242:80), JWT activé.

Pourquoi Docker ? Isolation, reproductibilité, mises à jour simples (pull + restart), rollback, séparation code/config/données.

4) Préparation de l’hôte

Hôte : Debian/Ubuntu avec Docker & Docker Compose. Dossiers persistants :

sudo mkdir -p /home/maarch/courrier/{docservers,custom,librairies,cron}
sudo chown -R $USER:$USER /home/maarch/courrier

Fichier .env (exemple) :

APP_PORT=8080
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

# OnlyOffice
ONLYOFFICE_PORT=4242
ONLYOFFICE_JWT_SECRET=my_jwt_secret
5) Docker Compose (Maarch + DB + OnlyOffice)
version: "3.8"

services:
  db-mc:
    image: postgres:16-alpine
    container_name: db-mc
    environment:
      POSTGRES_DB: MaarchCourrier
      POSTGRES_USER: maarch
      POSTGRES_PASSWORD: maarch
    volumes:
      - db-data:/var/lib/postgresql/data
      - sql-path:/home/sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U maarch -d MaarchCourrier || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 10

  app-mc:
    image: registry.maarch.org/maarch/maarchcourrier:latest
    container_name: app-mc
    depends_on:
      db-mc:
        condition: service_healthy
    environment:
      MAARCH_TMP_DIR: ${MAARCH_TMP_DIR}
      # BDD finalisée via l'installeur web : host=db-mc, user=maarch, pass=maarch, db=MaarchCourrier
    volumes:
      - ${DOCSERVERS_ROOT_PATH}:/opt/maarch/docservers
      - ${CUSTOM_PATH}:/var/www/html/MaarchCourrier/custom
      - ${LIBRAIRIES_PATH}:/var/www/html/MaarchCourrier/librairies
    ports:
      - "${APP_PORT}:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -fsS http://localhost/ || exit 1"]
      interval: 20s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  onlyoffice:
    image: onlyoffice/documentserver:8.3.3
    container_name: onlyoffice
    environment:
      JWT_ENABLED: "true"
      JWT_SECRET: ${ONLYOFFICE_JWT_SECRET}
    ports:
      - "${ONLYOFFICE_PORT}:80"
    restart: unless-stopped

volumes:
  db-data:
  sql-path:

Lancement : docker compose -p mc_24 -f compose.yml --env-file .env up -d

Vérifs :

docker ps
docker compose -p mc_24 logs -f app-mc
docker compose -p mc_24 logs -f db-mc
docker compose -p mc_24 logs -f onlyoffice
6) Initialisation de Maarch Courrier (assistant web)

Accéder à http://localhost:8080/ (ou IP mappée), puis renseigner :

  • BDD : hôte db-mc, base MaarchCourrier, user maarch, pass maarch.
  • Chemins : /opt/maarch/docservers, /var/www/html/MaarchCourrier/custom, /var/www/html/MaarchCourrier/librairies.
  • Clé de chiffrement : générer et conserver côté hôte (secret).

L’assistant crée le schéma SQL, le compte admin et finalise la configuration.

7) Déploiement d’OnlyOffice & intégration

Démarrage DocumentServer (ex. hors Compose) :

docker run -d -p 4242:80 \
  -e JWT_ENABLED=true \
  -e JWT_SECRET=my_jwt_secret \
  --restart=always \
  onlyoffice/documentserver:8.3.3

Intégration Maarch : URL http://HOST:4242/ (ou réseau Docker : http://onlyoffice/), JWT Secret = my_jwt_secret (identique au conteneur).

Activer les types (docx, xlsx, pptx) et tester l’ouverture/édition d’un document.

8) Validation & tests
  • Healthchecks OK (docker ps).
  • UI Maarch accessible → login admin.
  • Upload d’un fichier : présent dans ${DOCSERVERS_ROOT_PATH} côté hôte.
  • Édition OnlyOffice : ouverture, modification et sauvegarde OK.
  • Persistance confirmée après redémarrage de la stack.
9) Problèmes rencontrés & corrections
  • Maarch ne voit pas la BDD : vérifier host/MDP (db-mc), logs db-mc.
  • 403/404 au premier accès : attente d’initialisation / healthcheck → vérifier logs app-mc.
  • Permissions docservers : ajuster chmod/chown sur le volume côté hôte.
  • OnlyOffice “connection refused” : port/URL → tester curl http://HOST:4242/.
  • JWT error : secrets différents → aligner ONLYOFFICE_JWT_SECRET et la conf Maarch.
  • Performances : surveiller docker stats, CPU/RAM/IO, activer caches si besoin.
10) Résultats & enseignements
  • Stack industrialiser : Maarch + PostgreSQL + OnlyOffice, reproductible et persistante.
  • Intégration OnlyOffice (JWT) validée et fonctionnelle.
  • Base prête pour la prod : reverse-proxy/TLS, sauvegardes, supervision, external auth (LDAP).

Ouvrir le repo (Compose, .env & docs)