Par [Votre Nom] – [Date]
Introduction
Dolibarr est un ERP/PGMI (Gestionnaire de Gestion Intégrée) open‑source particulièrement adaptable, ce qui en fait un choix idéal pour les PME, les associations, les startups et même les grandes entreprises qui souhaitent digitaliser leurs processus métiers. Mais comme tout logiciel, l’architecture de Dolibarr doit être pensée dès le départ si l’on veut passer à l’échelle sans perdre en performance, en sécurité ou en maintenabilité.
Cet article détaille :
- Les composantes clés de l’architecture de Dolibarr.
- Les stratégies de mise à l’échelle appliquées aux principaux secteurs d’activité (e‑commerce, services, fabrication, distribution, etc.).
- Les bonnes pratiques à ne pas négliger (bases de données, cache, hébergement, CI/CD, sécurité).
1. Architecture de base de Dolibarr
| Couche | Composant | Rôle |
|---|---|---|
| Présentations | Templates (Smarty), UI mobile | Interface web (écran, cahier de charges). |
| Logique métier | Modules (ex. : product, order, invoice), Controllers |
Gestion des transactions, validations métier. |
| Persistence | MySQL / MariaDB / PostgreSQL | Stockage des données structurées. |
| Services externes | API (PayPal, Stripe), SMTP, LDAP | Fonctionnalités additionnelles (paiement, mailing). |
| Middleware | Apache/Nginx, PHP‑FPM | Routage des requêtes, gestion des processus PHP. |
| Cache & Jobs | APCu, Redis, RabbitMQ, Cron | Optimisation des appels récurrents et traitements asynchrones. |
Astuce : Dans une architecture « cloud‑native », le controller et le service peuvent être externalisés dans des micro‑services Dockerisés, ce qui rend le déploiement de Dolibarr plus « modulaire ».
2. Scalabilité par secteur d’activité
2.1. E‑commerce (boutiques en ligne)
| Besoin | Solutions de mise à l’échelle |
|---|---|
| Gestion des pics (Black‑Friday, promotions) | • Horizontal scaling : ajouter des pods Docker/Nginx derrière un Load Balancer. • Cache d’objets : Redis/Memcached pour les vues de fiches produits frequently accessed. • Queue de paiement : décaler les appels à la passerelle (Stripe, PayPal) vers RabbitMQ ou Kafka. |
| Traitement des paiements | Utiliser un consumer dedicado à l’API de paiement (ex. : Symfony Messenger ou simple daemon PHP) qui place les transactions en file d’attente avant validation. |
| Catalogue dynamique | Table product en partitionnement_hash sur le champ category_id afin de répartir les fiches produit sur plusieurs nœuds DB. |
| Multilingue + Monto | Stocker les langues dans des tables séparées, chaque langue sur un shard dédié (utile si le trafic multilingue devient très asymétrique). |
Mise en pratique 1. Déployer l’application dans un cluster Kubernetes avec autoscaling basé sur CPU/mémoire et le nombre de requêtes/séc.
- Configurer un L7‑Ingress (Traefik/NGINX) avec TLS termination.
- Activer le cache dynamique de Dolibarr (
$conf->global->cache_*en moderedis).
2.2. Services & Consulting (agences, cabinets)
| Besoin | Solutions |
|---|---|
| Gestion de projets multiples | Créer un modèle de projet dédié avec ses propres champs personnalisés (CRM) et le sauvegarder dans un schéma dédié (schéma de base de données séparé) via l’extension Multi‑DB. |
| Temps & facturation | Utiliser le module time & expense + cron pour générer automatiquement les factures toutes les 24h. Un worker distinct assure le calcul des factures sans charger le front‑office. |
| Collaboration | Intégrer LDAP/Active Directory + SSO (Keycloak ou Azure AD) pour simplifier l’accès OAuth2/SAML. |
| Scalabilité | Étendre la couche web avec Nginx + PHP‑FPM en mode pool dédié aux “admin” (gestion des projets). DB Read‑Replica pour les rapports lourds. |
Mise en pratique
- Docker Compose pour séparer
web,scheduler,workeretdb. - Journalisation centralisée (ELK ou Loki) afin de suivre les aller‑retours de tickets et d’optimiser les processus internes.
2.3. Fabrication / Production
| Besoin | Solutions |
|---|---|
| Gestion des stocks multiples sites / entrepôts | Activer le module stocks en mode multi‑sites ; chaque site possède son propre schema de stock (ex. warehouse_1, warehouse_2). Utiliser replication de la table product_stock vers un data‑warehouse (Snowflake/Redshift) pour le reporting. |
| Traçabilité des lots | Ajouter des champs custom (lot_number, batch_expiry) dans product et product_combination et indexer ces colonnes. |
| Intégration avec MES/ERP | Exposer REST API ou SOAP (via soap_server) pour pousser les mouvements de stock vers un système externe. Utiliser message broker (RabbitMQ) pour la rétroaction en temps réel. |
| Scalabilité | Partitionner la base via sharding de la table stock_quantities par warehouse_id. Ajouter des cluster de caches (Redis) pour les requêtes de disponibilité instantanées. |
2.4. Distribution / Logistique
| Besoin | Solutions |
|---|---|
| Gestion des commandes | Configurer le module order en status‑workflow fortement customisé (ex. : preparé → emballé → expédié → signé). Utiliser queue de traitement (Kafka) pour déclencher automatiquement les notifications d’expédition. |
| Suivi des livraisons | Intégrer Google Maps API ou OpenStreetMap via des web‑hooks afin de calculer les itinéraires optimisés (algorithme de routage). |
| Multi‑devise / Multi‑langue | Centraliser la conversion de devises dans un micro‑service dédié (Node/Python) et appeler cet endpoint depuis Dolibarr via curl. |
| Scalabilité | Read‑scale : placer les requêtes de reporting (statistiques de volume de commandes) sur des replicas en lecture seule. |
Write‑scale : segmenter la table order par année (partitionnement par range) pour éviter les locks lors de gros batchs d’import. |
2.5. Secteur public / Associations
| Besoin | Solutions |
|---|---|
| Gestion des subventions / dotations | Utiliser le module contrib (subventions) avec table de correspondance multi‑tenant (un enregistrement par subvention). |
| Reporting réglementaire | Générer les rapports PDF via FPDF ou Dompdf asynchrone (backend job). Mettre en place audit trail via logbook module et sauvegarder les changements dans une table d’audit non modifiable. |
| Scalabilité | Limiter les requêtes lourdes aux heures creuses. Utiliser des jobs cron planifiés avec crond ou systemd timers au lieu de executephp au runtime. |
| Sécurité | Mettre en place rate‑limiting (Nginx limit_req) et IP whitelist pour les accès externes. Un HTTPS strict (HSTS) est obligatoire. |
3. Bonnes pratiques transversales pour passer à l’échelle
| Domaine | Action clé | Pourquoi |
|---|---|---|
| Base de données | • Partitionnement (range / hash) des tables volumineuses (order, stock, product_combination).• Replication précédente (master‑slave) pour les lectures intensives. • Utilisation d’un ORM léger (Dolibarr utilise PDO) avec pool de connexions. |
Réduit les locks, améliore les temps de réponse pour les rapports massifs. |
| Cache | • Activer $conf->global->cache_* → redis ou memcached.• Cache des vues SQL fréquentes ( orderstatus, productlist) avec TTL courte (< 5 min) pour les pics. |
Diminue le nombre d’appels DB. |
| File d’attente | • Déplacer les traitements asynchrones (envoi email, génération PDF, paiement) dans des workers dédiés (ex. : php queue_worker.php). |
Sépare la charge de la UI et évite les time‑outs. |
| Hébergement | • Containers (Docker) avec php-fpm & nginx séparés.• Orchestration via Kubernetes ou Docker Swarm (auto‑scaling, health‑checks). • Storage : volume tmp partagé via NFS ou Ceph si besoin de persistance. |
Facilite le scaling horizontal, la récupération en cas de panne. |
| CI / CD | • Pipeline CI (GitHub Actions, GitLab CI) avec linting PHP, tests unitaires (PHPUnit), tests d’intégration (behat). • Déploiement Blue/Green ou Canary pour minimiser les risques. |
Garantit la stabilité en production lorsqu’on ajoute de nouvelles extensions ou modules personnalisés. |
| Monitoring | • Prometheus + Grafana pour métriques php-fpm, nginx, redis, mysql.• Alertes sur le nombre de requêtes lentes ( slowlog), le taux d’erreurs 5xx, et l’utilisation de la mémoire. |
Permet d’anticiper les goulots d’étranglement avant qu’ils n’affectent les utilisateurs. |
| Sécurité | • Mise à jour régulière du core (git pull origin master).• Utilisation de mod_security et fail2ban. • Chiffrement TLS 1.3 + HSTS. • Séparer les comptes DB par application (user dédié, pas root). |
Réduit les surface d’attaque et empêche la compromission du serveur. |
| Scalabilité fonctionnelle | • Ajouter des hooks dans les modules (hookObject*) pour injecter du code personnalisé sans modifier le core.• Créer des modules complémentaires (ex. : myext_logistics) qui utilisent les mêmes tables mais avec leurs propres préfixes de champ pour éviter la fuite de schéma. |
Facilite l’évolution incrémentale de l’ERP sans réécrire tout le code. |
4. Exemple de workflow de mise en production
-
Audit initial
- Export des statistiques de trafic (
analytics.php) pour identifier les pics et les limites actuelles. - Analyse de la taille des tables (
SHOW TABLE STATUS).
- Export des statistiques de trafic (
-
Définir les shards
ALTER TABLE dolibarr_product
PARTITION BY HASH(id_product) PARTITIONS 4;Déploiement des partitions sur 4 serveurs DB.
-
Création du pipeline CI
# .gitlab-ci.yml
build:
stage: build
image: php:8.2-fpm
steps:
- apt-get update && apt-get install -y unzip git
- curl -sS https://getcomposer.org/installer | php
- composer install --optimize-autoloader
- vendor/bin/phpunit
only:
- master -
Déploiement dans Kubernetes « `yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dolibarr
spec:
replicas: 3
selector:
matchLabels:
app: dolibarr template:
metadata:
labels:
app: dolibarr
spec:
containers:- name: php-fpm image: myrepo/dolibarr:php8.2-fpm
env:- name: DB_HOST
value: "db-primary.default.svc.cluster.local" - name: DB_USER
valueFrom:
secretKeyRef:
name: dolibarr-db-credentials
key: username resources:
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGET:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
- name: DB_HOST
- name: php-fpm image: myrepo/dolibarr:php8.2-fpm
-
Définir les workers
# script/worker.sh
php bin/console dolibarr:payments:process --queue=payments
php bin/console dolibarr:order:generateInvoices --queue=invoicesLancer via systemd ou Kubernetes CronJob.
- Monitoring & Alerting – Prometheus collecte :
php_fpm_active_processes,nginx_connections,redis_memory_used_bytes.- Alertmanager déclenche une alerte si
order_status_changes > 500/mo.
- Alertmanager déclenche une alerte si
5. Conclusion
Passer à l’échelle avec Dolibarr n’est pas seulement question de plus de serveurs ; c’est avant tout une architecture orientée services, un design de données anticipatif et une organisation du code qui respecte les limites du framework. En suivant les principes présentés :
- Segmenter les domaines fonctionnels (e‑commerce, services, production, distribution).
- Externaliser les traitements lourds (paiement, facturation, génération de rapports) dans des workers ou micro‑services.
- Optimiser la base de données (partitionnement, réplication, cache).
- Automatiser le déploiement avec containers, CI/CD et monitoring.
vous êtes alors en mesure de scaler de façon prévisible quel que soit le secteur d’activité de votre client. Dolibarr, grâce à sa modularité et son vaste écosystème d’extensions, devient alors un véritable moteur de digitalisation « prêt‑pour‑la‑croissance ».
Ressources complémentaires
| Ressource | Lien |
|---|---|
| Documentation officielle Dolibarr (architecture & modules) | https://docs.dolibarr.org/en/latest/ |
| Guide de scalabilité MySQL/MariaDB (partitionnement) | https://dev.mysql.com/doc/refman/8.0/en/partitioning.html |
| Kubernetes autoscaling best‑practices | https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ |
| Dolibrarmods – Extensions populaires (e‑commerce, multi‑stock) | https://github.com/Dolibarr/dolibarr-modules |
| Article : « Multi‑tenant ERP with Dolibarr » (PDF) | https://www.example.com/dolibarr-multitenant.pdf |
Vous avez besoin d’un schéma d’architecture plus détaillé ou d’une implémentation d’exemple pour votre secteur ? N’hésitez pas à me contacter ! —
Cet article a été rédigé à la lumière des retours d’expérience de la communauté Dolibarr et des meilleures pratiques cloud‑native.