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.
- Catégorie : GED / Gestion documentaire
- Contexte : VM locale (Debian/Ubuntu) – déploiement Docker
- Livrables :
compose.yml
,.env
, volumes persistants, doc d’installation
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.
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).
- 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.
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
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
Accéder à http://localhost:8080/
(ou IP mappée), puis renseigner :
- BDD : hôte
db-mc
, baseMaarchCourrier
, usermaarch
, passmaarch
. - 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.
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.
- 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.
- 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.
- 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).