Version 2025 – Article destiné aux équipes IT, développeurs et chefs de projet qui souhaitent exploiter Dolibarr dans un environnement de production fiable, sécurisé et ultra‑performant.
1. Introduction
Dolibarr est un ERP / CRM open‑source léger, intégré et très modulable. Sa simplicité d’installation le rend attractif, mais, comme tout logiciel en production, il exige une configuration adaptée pour garantir sécurité, disponibilité et performance.
Ce guide se focalise sur deux aspects essentiels : 1. Single Sign‑On (SSO) – centraliser l’authentification et réduire la surface d’attaque.
- Bonnes pratiques de performance – optimiser le code, la base de données, le serveur web et le déploiement.
2. SSO avec Dolibarr
2.1 Pourquoi un SSO ?
| Avantages | Impact business |
|---|---|
| Gestion centralisée des comptes (Azure AD, Keycloak, Okta, LDAP…) | Réduction du coût de maintenance et des erreurs d’accès. |
| SSO transparent pour les utilisateurs → meilleure UX. | Augmentation de l’adoption de l’outil. |
| Audit & conformité (RGPD, ISO 27001) simplifiés. | Réduction des risques de non‑conformité. |
| Scalabilité : ajout dynamique d’utilisateurs sans toucher le code. | Gain de flexibilité pour la croissance de l’entreprise. |
2.2 Méthodes d’intégration
| Méthode | Description | Points forts / limites |
|---|---|---|
| Modulo Single Sign‑On de Dolibarr (v15+) | Configuration via l’interface « Administration > Authentification > SSO ». Supporte OAuth2 / OpenID Connect, SAML et LDAP. | ✅ Installation simple. ⚠️ Nécessite que le module soit activé et que le serveur web supporte les directives Rewrite. |
| Reverse Proxy + Header de sécurité | Un reverse proxy (NGINX, Traefik) gère l’authentification (ex. Auth0, Keycloak) et transmet les attributs via le header Authorization. Dolibarr accepte le header remote_user. |
✅ Découplage complet de l’app. ⚠️ Complexité supplémentaire (certificats, TLS). |
| Authentification HTTP Basic via .htaccess / htaccess | Utilisé sur des environnements très restreints. | ✅ Très rapide à mettre en place. ⚠️ Pas de gestion de rôles avancés; à éviter en production. |
Exemple d’utilisation du module OAuth2 (OpenID Connect)
-
Installation – Téléchargez le module depuis le répertoire « contrib » ou le marketplace Dolibarr.
- Copiez le dossier
ssodanscustom/ouinterfaces/.
- Copiez le dossier
-
Configuration
« `php // Dans Admin → Authentication → SSO $sso_provider = ‘openid’;
$client_id = ‘YOUR_CLIENT_ID’;
$client_secret = ‘YOUR_CLIENT_SECRET’;
$discover_url = ‘https://sso.example.com/.well-known/openid-configuration‘;
$redirect_uri = ‘https://dolibarr.example.com/oauth/callback‘; -
Test
- Accédez à
https://dolibarr.example.com/index.php?login=1→ vous êtes redirigé vers le provider SSO. - Après authentification, le token OIDC est échangé contre un
access_token, et Dolibarr crée/actualise l’utilisateur.
- Accédez à
- Mise en production
- Activez le HTTPS strictement (certificat valide).
- Ajoutez les en‑têtes de sécurité :
Content-Security-Policy,X-Content-Type-Options,X-Frame-Options. - Redirigez les requêtes HTTP vers HTTPS via le reverse proxy. ### 2.3 Gestion des groupes et des droits
Dolibarr stocke les droits d’accès dans la table usergroups. Avec SSO vous pouvez : – Mapper les groupes d’identité du provider (ex. admin, manager, member) à des user groups Dolibarr.
- Limiter l’accès à des modules (ex. facturation, projet) en fonction du groupe.
Tip : Utilisez le plugin “SSO + LDAP Sync” pour synchroniser automatiquement les changements de groupe.
3. Bonnes pratiques de performance
Dolibarr est volontairement léger, mais quelques ajustements permettent de soutenir plusieurs dizaines de milliers d’utilisateurs simultanés.
3.1 Architecture générale
+-------------------+ +-------------------+
| Client Web (HTTPS) --> NGINX/Apache --> PHP-FPM --> Dolibarr
+-------------------+ +-------------------+ |
+-------------------+
| MySQL / MariaDB |
+-------------------+
3.1.1 Reverse Proxy (NGINX)
server {
listen 80;
server_name dolibarr.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name dolibarr.example.com;
ssl_certificate /etc/letsencrypt/live/dolibarr.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dolibarr.example.com/privkey.pem;
# Performance TLS
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Caching TLS session
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico)$ {
expires 30d;
access_log off;
add_header Cache-Control "public, immutable";
}
# Forward to PHP-FPM
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Optimisation du timeout
proxy_read_timeout 90;
proxy_send_timeout 90;
}
}
- Keepalive entre NGINX et PHP‑FPM (optimise le nombre de connections).
- Compression (
gzipoubrotli).
3.1.2 PHP‑FPM
| Paramètre | Valeur conseillée (exemple) | Raison |
|---|---|---|
pm.max_children |
50 × CPU cores (ex. 400 si 8 cores) |
Suffisant pour la plupart des charges web, évite le fork excessif. |
pm.start_servers |
10 |
Lance un pool initial minimal. |
pm.min_spare_servers |
5 |
Maintien d’un petit pool inactif. |
pm.max_spare_servers |
15 |
Idem, sans exploser la RAM. |
php_value[memory_limit] |
256M |
Suffisant pour les traitements de fichiers lourds. |
php_value[upload_max_filesize] |
50M |
Permet les pièces jointes volumineuses. |
opcache.enable |
1 |
Cache bytecode, gain de 30 % en temps de réponse. |
Tip : Activez opcache.validate_timestamps=0 en production (aucune modification du code à la volée).
3.1.3 Base de données
- Choix : MySQL 8.0 ou MariaDB 10.6+ (optimisé pour les tables InnoDB). – Configuration :
innodb_buffer_pool_size = 70% de la RAM disponible (ex. 4 GB si serveur 8 GB)
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT # évite le cache double
query_cache_type = 0 # désactiver le query cache (inefficace en MySQL 8)
max_connections = 200
table_open_cache = 2000
thread_cache_size = 10 - Indexation : revérifiez les
EXPLAINsur les requêtes lentes (ex.SELECT * FROM llx_facture WHERE date >= '2024') et créez des index composites sur les colonnes de filtre (date,status,client_id).
3.2 Optimisation du code Dolibarr | Action | Impact | Comment faire |
|——–|——–|—————|
| Désactiver les modules inutiles | Réduction du temps de chargement et du nombre de requêtes. | Via Setup → Modules → Désactiver tout ce qui n’est pas utilisé (ex. CRM, Project). |
| Cache interne de Dolibarr | Cache persistant des résultats de recherche/selection. | Dans Setup → Misc → Cache, activez Cache et définissez Cache lifetime = 3600. |
| Utiliser le moteur de templating "Smarty" en mode « compile never » | Évite la recompilation des templates à chaque appel. | Ajoutez $php->setVar('tplCacheCompileDir', '/tmp'); $php->setVar('tplCacheCompile', false); dans design.php. |
| Batch jobs planifiés | Traite les tâches lourdes (ex. export PDF, sauvegarde) hors heures de pic. | Utilisez cron avec les scripts php -f /path/to/dolibarr/cron.php. |
| Limiter les téléchargements de fichiers volumineux via Range | Réduction de la charge serveur et meilleure UX. | NGINX location ~* \.(pdf|docx)$ { add_header Accept-Ranges bytes; } |
3.3 Tâches asynchrones & queues
- Cron jobs : par défaut Dolibarr s’appuie sur des appels récurrents (php cron.php).
- Alternative recommandée : RabbitMQ ou Redis Queue (BullMQ) pour déléguer les traitements lourds : génération de factures, envoi d’emails, nettoyage de logs.
- Avantage : le serveur web reste réactif; les workers peuvent être scalés indépendamment.
3.4 Monitoring & alertes
| Métrique | Seuil d’alerte | Outil recommandé |
|---|---|---|
| Latence moyenne des requêtes HTTP | > 500 ms | Grafana + Prometheus |
| Taux d’erreur 5xx | > 1 % | Alertmanager |
| Utilisation CPU MySQL | > 80 % pendant 5 min | Percona Monitoring |
| Espace disque DB | > 80 % du volume | Zabbix |
| File d’attente de worker (Redis/RabbitMQ) | > 10 000 messages | Kibana |
Bon à savoir : exportez les logs Dolibarr en format JSON (
log4j2oumonolog) pour les ingérer facilement dans votre stack ELK.
4. Checklist de mise en production
| ✅ | Action | Responsable | Commentaire |
|---|---|---|---|
| 1 | Installation du serveur web (NGINX) avec TLS Let’s Encrypt. | Ops | Vérifier le renouvellement automatique (certbot renew). |
| 2 | Configuration du module SSO (OAuth2/OpenID Connect). | Sécurité | Tester le flux complet (login → callback → groupe). |
| 3 | Activation du cache interne et du opcache PHP. | Dév/Ops | Valider opcache_get_status() dans phpinfo(). |
| 4 | Optimisation de la base (index, innodb_buffer_pool_size). |
DB‑Admin | Exécuter ANALYZE TABLE après gros import. |
| 5 | Mise en place d’un cron pour les tâches planifiées. | Ops | Utiliser */5 * * * * php /var/www/dolibarr/cron.php. |
| 6 | Déploiement d’un worker (Redis/RabbitMQ) pour les jobs asynchrones. | Dev | Surveiller le nombre de jobs en attente. |
| 7 | Configuration du monitoring (Prometheus, Grafana). | Ops | Créer des alertes dès le dépassement des seuils. |
| 8 | Tests de charge (JMeter/Locust) sur les scénarios clés (ex. création facture). | QA | Simuler 200 RPS et valider la latence < 300 ms. |
| 9 | Sauvegarde quotidienne + rétention 30 jours (full + incrémental). | DBA | Tester la restauration au moins une fois par trimestre. |
| 10 | Audit de sécurité (OWASP ZAP) + revue SSO. | SecOps | Corriger toute vulnérabilité critique avant le go‑live. |
5. Cas d’usage réel (exemple)
Entreprise : TechNova (150 employés, production de pièces mécaniques)
| Besoin | Solution mise en œuvre |
|---|---|
| Gestion des devis, factures et stocks | Dolibarr installé sur un serveur Ubuntu 22.04 (4 CPU, 8 GB RAM). |
| Authentification unique avec Azure AD | Implémentation du module SSO (OAuth2) ; mapping des groupes « admin », « manager », « employee ». |
| Rapidité de l’interface pour les équipes commerciales | Optimisation du cache interne, désactivation du module “CRM” non utilisé, gzip + Brotli. |
| Rapports financiers nocturnes (export PDF) | Workers Redis Queue exécutant php gen_reports.php à 02 h00, sans impacter les utilisateurs actifs. |
| Surveillance en temps réel | Dashboard Grafana avec Prometheus collector : latence < 250 ms, 0 % d’erreurs 5xx. |
| Sauvegarde et reprise | Backup quotidien mysqldump + innodb_file_per_table → Recovery testée chaque trimestre. |
Résultat : 30 % de réduction du temps de réponse (de 700 ms → 500 ms) et 0 incident de sécurité depuis le passage en production avec SSO et l’architecture décrite.
6. Conclusion
Dolibarr peut être déployé en production sans sacrifier la performance lorsqu’on adopte les bonnes pratiques suivantes :
- SSO : centraliser l’authentification via les modules natifs ou un reverse‑proxy, tout en gardant le contrôle des groupes et des droits.
- Performance : exploiter le reverse‑proxy (NGINX), optimiser PHP‑FPM et MySQL, activer les caches (opcache, interne Dolibarr), et déléguer les traitements lourds à des workers asynchrones.
- Surveillance & backup : mettre en place des alertes précoces et des stratégies de sauvegarde robustes.
En suivant la checklist et les astuces présentées, votre instance Dolibarr sera prête à supporter des centaines d’utilisateurs simultanés, à rester conforme aux exigences de sécurité modernes (SSO, HSTS, CSP…) et à offrir une expérience fluide à vos équipes.
Sources & ressources complémentaires
- Documentation officielle Dolibarr – https://dolibarr.org
- Plugin SSO – OAuth2 & OpenID Connect – GitHub :
dolibarr/dolibarr-modules-sso - NGINX Performance Tuning – https://www.nginx.com/resources/articles/performance/) – MySQL 8.0 Optimization – https://dev.mysql.com/doc/refman/8.0/en/optimization.html*
- Grafana + Prometheus – https://grafana.com/docs/grafana/latest/datasources/prometheus/
Rédigé par l’équipe Architecture & Performance – 03 Novembre 2025.