Naocube
Tous les articles
Installation
Docker
Sécurité
Production

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.

8 décembre 2025·3 min de lecture·Par L'équipe Naocube
Installer Dolibarr en production : guide Docker, sécurité et performance

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.

Prêt à mettre votre ERP au cube ?

Audit Dolibarr offert · 30 minutes · 0 engagement