Installer Dolibarr en production : guide Docker, sécurité et performance
Le guide complet pour installer Dolibarr en production : Docker Compose durci, MariaDB optimisé, HTTPS auto, sauvegardes 3-2-1, monitoring. Best practices 2026.

Pourquoi cet article
La doc officielle de Dolibarr couvre l'installation basique. Mais en production réelle, il manque tout : durcissement OS, sauvegardes testées, monitoring, certificat HTTPS auto-renouvelé, restauration vérifiée. Cet article comble ce gap.
À la fin, vous aurez une stack Dolibarr Docker prête pour la production, exploitée par Naocube sur 50+ clients.
Le docker-compose.yml que nous utilisons
Voici la base que nous déployons (variables sensibles en .env) :
services:
dolibarr:
image: dolibarr/dolibarr:21.0
restart: unless-stopped
environment:
DOLI_DB_HOST: db
DOLI_DB_NAME: dolibarr
DOLI_DB_USER: dolibarr
DOLI_DB_PASSWORD: ${DB_PASSWORD}
DOLI_URL_ROOT: https://${DOMAIN}
DOLI_HTTPS: 1
PHP_INI_DATE_TIMEZONE: Europe/Paris
PHP_INI_MEMORY_LIMIT: 512M
PHP_INI_UPLOAD_MAX_FILESIZE: 64M
volumes:
- dolibarr_documents:/var/www/documents
- dolibarr_html:/var/www/html/custom
depends_on:
- db
labels:
- traefik.enable=true
- traefik.http.routers.dolibarr.rule=Host(`${DOMAIN}`)
- traefik.http.routers.dolibarr.tls.certresolver=letsencrypt
db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MARIADB_DATABASE: dolibarr
MARIADB_USER: dolibarr
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
command: ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci", "--innodb-buffer-pool-size=2G"]
backup:
image: tiredofit/db-backup:latest
environment:
DB_TYPE: mariadb
DB_HOST: db
DB_NAME: dolibarr
DB_USER: dolibarr
DB_PASS: ${DB_PASSWORD}
DB_DUMP_FREQ: 1440
COMPRESSION: GZ
ENCRYPT: GPG
GPG_RECIPIENT: ${GPG_KEY_ID}
volumes:
- ./backups:/backup
volumes:
dolibarr_documents:
dolibarr_html:
db_data:
Vous obtenez en une commande : Dolibarr + MariaDB + sauvegardes journalières chiffrées GPG, derrière Traefik avec HTTPS Let's Encrypt automatique.
Durcissement MariaDB
Les paramètres par défaut de MariaDB sont trop laxistes en production :
# /etc/mysql/conf.d/dolibarr.cnf
[mysqld]
innodb_buffer_pool_size = 4G # 50-70% de la RAM dédiée DB
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
max_connections = 200
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
L'augmentation de l'innodb_buffer_pool_size est le levier #1 pour la performance Dolibarr.
Configuration PHP-FPM
; /usr/local/etc/php/conf.d/dolibarr.ini
memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
date.timezone = "Europe/Paris"
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0 ; en prod uniquement
L'OPcache divise par 3-5 les temps de réponse Dolibarr.
Sauvegardes 3-2-1 réelles
Sauvegarder n'est pas tester. Voici notre script de vérification de restauration mensuel :
#!/bin/bash
# /usr/local/bin/test-restore.sh
LATEST=$(ls -t /backup/*.gz.gpg | head -1)
docker run --rm -v test_data:/var/lib/mysql mariadb:11 \
bash -c "mysql -u root < <(gpg -d $LATEST | gunzip)"
docker run --rm -v test_data:/var/lib/mysql mariadb:11 \
mysql -u root -e "SELECT COUNT(*) FROM dolibarr.llx_societe;" \
| tee /var/log/restore-test.log
Si le test échoue, alerte PagerDuty. Une sauvegarde non testée n'est pas une sauvegarde.
Monitoring
Stack minimale à mettre en place :
- Uptime : Uptime Kuma ou Better Uptime, check HTTP toutes les 60s
- Système : Netdata ou Node Exporter + Prometheus
- Application : log Apache/Nginx + slow query MySQL → Loki ou Datadog
- Alerting : email + SMS via OVH SMS API ou Twilio, intégration Slack
Certificat HTTPS
Avec Traefik comme reverse-proxy, le certificat Let's Encrypt est obtenu et renouvelé automatiquement (cf. label tls.certresolver=letsencrypt). Vérifiez que :
- Le port 80 est ouvert (challenge HTTP)
- Le DNS pointe correctement avant de démarrer
- Vous avez configuré un email valide pour les notifications Let's Encrypt
Mises à jour Dolibarr
Avec Docker, la mise à jour est triviale :
docker compose pull
docker compose down
# Sauvegarde manuelle de sécurité
docker run --rm -v dolibarr_db_data:/data alpine tar czf /backup/db-pre-upgrade.tar.gz /data
docker compose up -d
# Lancer migrate via /install/upgrade.php depuis le navigateur
Toujours tester sur une instance staging avant la prod. Toujours.
Conclusion
Cette stack tourne en production sur 50+ instances Naocube depuis 3 ans. Uptime cumulé > 99,95 %. Aucune perte de données.
Si vous ne voulez pas gérer ça vous-même, notre offre d'hébergement managé Dolibarr prend tout en charge — demandez un devis.