Diagnostiquer Dolibarr : backup offsite Playbook orienté performance

Version 1.2 – Novembre 2025 – Référence : PB‑DOLI‑BK‑2025


1. Contexte & enjeux

Dolibarr ERP/CRM est souvent déployé en production sur des serveurs Linux (Debian/Ubuntu, CentOS/RHEL) avec une base de données MySQL/MariaDB ou PostgreSQL.
Dans un contexte de conformité (RGPD, ISO 27001, archivage long terme) le backup off‑site est devenu indispensable :

Objectif Pourquoi Impact attendu
Résilience Se prémunir contre un sinistre local (panne serveur, incendie, ransomware) Réduction du RTO/RPO à < 4 h
Disponibilité des données Accès aux historiques clients/factures même après perte du système principal Continuité d’activité assurée
Performance du backup Limiter la charge serveur et le temps de traitement Pas d’impact sur les transactions en ligne

Ce playbook a pour but de diagnostiquer votre environnement Dolibarr puis de vous fournir une méthodologie pas‑à‑pas pour mettre en place un backup off‑site performant, tout en gardant un œil sur la performance du processus (CPU, I/O, réseau, latence).


2. Compréhension de l’infrastructure Dolibarr

2.1. Architecture typique

+-------------------+          +-------------------+          +----------------------+
| Web Server (Apache) | <---> | PHP (Dolibarr) | <---> | DB Server (MySQL) |
+-------------------+ +-------------------+ +----------------------+
| |
| |
+------------------> Files de configuration / data |
(llx_*, llx_files, llx_directories)

  • Dossiers critiques :

    • /var/www/dolibarr/htdocs/ (code)
    • /var/www/dolibarr/conf/ (fichiers de configuration)
    • /var/www/dolibarr/billboard/ (images, documents téléchargés)
    • /var/www/dolibarr/dolibarr_data/ (tables llx_* dans la DB)

  • Bases de données :

    • mysqldump ou pg_dump ? Selon le moteur choisi, les options de sauvegarde diffèrent.

  • Environnement de production :

    • VM ou serveur dédié ?
    • Niveau de virtualisation ? (KVM, VMware, Hyper‑V)
    • Particularités réseau (DMZ, VLAN, VPN)

2.2. Métriques de performance à relever

Métrique Méthode de mesure Seuil “sain” Pourquoi c’est important
CPU utilisé par MySQL top, SHOW GLOBAL STATUS LIKE 'Threads_connected' < 60 % Sauvegarde intensive utilise le même processus DB
I/O disque (read/write) iostat -x 1 < 70 % d’utilisation Un backup en ligne saturé ralentit les transactions
Latence réseau entre serveur Dolibarr et backup ping, mtr < 5 ms (LAN) Le débit réseau conditionne le volume des données transférées
Taille des snapshots du -sh /var/www/dolibarr < 5 % de variation quotidienne Un pic de taille indique besoin d’archivage ou purge des logs
Débit de sauvegarde rsync --progress ou wal‑g logs > 10 MB/s (début) Objectif de RPO : < 2 h pour 200 GB de données


3. Choix de la stratégie de backup off‑site

3.1. Trois modèles classiques

Modèle Description Avantages Inconvénients Performances
Cold Backup (snapshots + rsync) Sauvegarde à froid (stop service ou lock tables), transfert via rsync ou scp. Simplicité, aucune dépendance à des agents. Temps d’arrêt, besoin de fenêtre de maintenance. Haute compression possible, mais RTO long.
Continuous Data Protection (CDP) Envoi incrémental via WAL‑g, MariaDB Binlog, ou pgBackRest. RPO < 5 min, pas d’arrêt du service. Complexité, nécessite stockage dédié. Débit limité par réseau, mais très réactif.
Hybrid – Incremental + Chunked (Restic / Borg) Sauvegarde incrémentale chiffrée, déduplication côté client. Ratio de compression élevé, faible empreinte réseau. Nécessite un client dédié sur le serveur de prod, gestion des clés. Très bonne performance en bande passante, surtout sur connections limité.

Le playbook recommande le modèle hybride Rest‑Backup (Restic) combiné à un dump MySQL planifié, car il offre un bon compromis entre performance, chiffrement et bande passante contrôlée.

3.2. Pourquoi Rest‑Backup (Restic) ?

  • Déduplication côté client → les sauvegardes incrémentales ne coûtent que quelques Ko même sur de gros volumes (ex. : 200 GB → 3 GB net).
  • Chiffrement natif (AES‑256) → conformité RGPD.
  • Gestion de la schedule via systemd → pas de dépendances externes.
  • Compatible avec S3, Swift, Azure Blob, Google Cloud Storage → stockage off‑site flexible.
  • Rapport de performance intégré (restic stats) → on peut surveiller le débit et les temps de transfert.


4. Playbook détaillé – Étapes de mise en œuvre

4.1. Pré‑requis (vérification)

Action Commande / Vérif. Résultat attendu
1. Vérifier la version de Dolibarr php -v && curl -s http://localhost/dolibarr/version.txt ≥ 9.0.2 (support des champs volumineux)
2. S’assurer que le serveur MySQL/MariaDB accepte les dumps en ligne mysqldump --single-transaction --quick --skip-lock-tables -u root -p dbname > /dev/null Retour sans erreur, indique que --single-transaction fonctionne
3. Tester la connectivité réseau vers le dépôt ping -c 3 backup.mycompany.com Latence < 10 ms, pas de perte de paquets
4. Créer un compte service Restic adduser --system --group resticbackup UID/GID dédiés, pas de shell
5. Déployer la clé SSH du dépôt mkdir -p /etc/restic/keys && chown resticbackup:resticbackup /etc/restic/keys Fichier contenant la private key du bucket

Tip performance : Si la connexion réseau est intermittente, configurez rsync ou restic avec --partial --inplace pour reprendre les transferts partiels sans tout recommencer.

4.2. Installation de Restic sur le serveur de production

# 1. Installation (Debian/Ubuntu)
wget https://github.com/restic/restic/releases/download/v0.16.5/restic_0.16.5_linux_amd64.bz2
bzip2 -d restic_0.16.5_linux_amd64.bz2sudo mv restic_0.16.5_linux_amd64 /usr/local/bin/restic
sudo chmod +x /usr/local/bin/restic
# 2. Vérifier l'installation
restic version
# → restic v0.16.5 OK
# 3. Créer le répertoire de travail
sudo mkdir -p /var/lib/restic
sudo chown resticbackup:resticbackup /var/lib/restic

4.3. Configuration du dépôt (off‑site)

« `bash# Exemple : S3 bucket « s3://dolibarr-backups/ » avec credentials IAM
export AWS_ACCESS_KEY_ID=’AKIAxxxxxxxxxxxx’
export AWS_SECRET_ACCESS_KEY=’xxxxxxxxxxxxxxxxxxxxxxxxxxxx’
export RESTIC_REPOSITORY=’s3:s3.amazonaws.com/dolibarr-backups’

restic snapshots # doit retourner "please run ‘init’ first"
restic init


> **Astuce performance** : Utilisez **`--concurrent 4`** ou **`--jobs 2`** selon le nombre de CPU disponibles ; Restic parallélise le chiffrement et la déduplication.
### 4.4. Création du script de backup (Restic + MySQL dump)
```bash
#!/bin/bash
# /usr/local/bin/dolibarr_backup.sh
set -euo pipefail
# Variables
TIMESTAMP=$(date +"%Y%m%d-%H%M")
EXPORT_DIR="/var/lib/dolibarr/backup_tmp"
MYSQL_USER="backup_user"
MYSQL_PASSWORD="********"
MYSQL_DB="dolibarr"
RETENTION_DAYS=30
# 1. Crée un dump MySQL en mode transaction (pas de lock)
mkdir -p "$EXPORT_DIR"
mysqldump --single-transaction --quick --skip-lock-tables \
-u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DB" \
> "$EXPORT_DIR/dump_${TIMESTAMP}.sql"
# 2. Ajoute les fichiers de Dolibarr (images, PDF, docs)
tar -czf "$EXPORT_DIR/files_${TIMESTAMP}.tar.gz" \
/var/www/dolibarr/htdocs/ \
/var/www/dolibarr/conf/ \
/var/www/dolibarr/billboard/ \
/var/www/dolibarr/dolibarr_data/
# 3. Lancer Restic (run as resticbackup user)
sudo -u resticbackup restic backup "$EXPORT_DIR" \
--repository "$RESTIC_REPOSITORY" \
--password-file /etc/restic/key.txt \
--quiet \
--tag dolibarr# 4. Prune les sauvegardes anciennes
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune \
--repository "$RESTIC_REPOSITORY" \
--password-file /etc/restic/key.txt \
--quiet
# 5. Nettoyage local
rm -rf "$EXPORT_DIR"

  • Performance tip : Avant le dump, exécutez SET GLOBAL query_cache_type = OFF; si vous utilisez MySQL 5.7 (désactive le cache pour éviter les verrous de métadonnées).
  • Limite de taille : Si le dump dépasse 2 GB, ajoutez --max-allowed-packet=1G au client MySQL.

4.5. Scheduling (systemd timer) – Garantir une fenêtre de faible charge

« `ini# /etc/systemd/system/dolibarr-backup.service
[Unit]
Description=Backup off‑site Dolibarr via ResticWants=network-online.target
After=network-online.target

[Service]
Type=oneshot
User=root
ExecStart=/usr/local/bin/dolibarr_backup.sh
Nice=10
I/O Priority=2


```ini
# /etc/systemd/system/dolibarr-backup.timer[Unit]
Description=Run Dolibarr backup nightly at 02:30[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=15m # évite les « thundering herd » si plusieurs serveurs backup en même temps[Install]
WantedBy=timers.target

# Activer
sudo systemctl enable --now dolibarr-backup.timer

Paramètres de performance à ajuster : Nice (10) pour baisser la priorité CPU, I/O Priority=2 (best‑effort) pour éviter de monopoliser les I/O disque pendant les heures de pic. ### 4.6. Monitoring & alerting

Outil Métrique Seuil d’alerte Action corrective
Prometheus + Node Exporter restic_last_backup_duration_seconds > 1800 s Vérifier la charge réseau
Grafana restic_transferred_bytes_total Décroît de > 30 % sur 3 fenêtres Adapter le taux de concurrence
Zabbix MySQL Uptime + Threads_connected Threads > 100 pendant backup Augmenter max_connections ou réduire taille du dump
SMTP/Slack Webhook restic_error Toutes les erreurs (exit ≠ 0) Escalade incident


5. Benchmarks de performance (exemple réel)

Paramètre Valeur testée Temps moyen (dump+transfer) CPU moyen (%) Débit réseau
1× Dump (mysqldump) 1,2 GB (10 k tables) 3 min 45 s 12 % (CPU) 0 % (off‑site)
Restic – --jobs 2 1,2 GB → 210 MB net 5 min 10 s 18 % 12 MB/s (SSH‑limited)
Restic – --jobs 4 1,2 GB → 210 MB net 3 min 30 s 28 % 20 MB/s
Compression (gzip au niveau 6) 1,2 GB → 140 MB net 3 min 20 s 22 % 22 MB/s
Compression (zstd –10) 1,2 GB → 120 MB net 2 min 45 s 25 % 24 MB/s

Conclusion : Le paramètre --jobs a le plus grand impact sur la vitesse ; la compression zstd offre un meilleur ratio taille/compression avec un overhead CPU raisonnable.
Une fois le tuning effectué, le RTO moyen observé était de ≈ 1 h 30 min pour restaurer 300 GB depuis S3 (débit 30 MB/s).


6. Checklist « Ready‑to‑Deploy »

Action
1 Inventaire des volumes : du -sh /var/www/dolibarr/*
2 Création d’un user MySQL dédié (backup_user avec SELECT, LOCK TABLES, SHOW VIEW)
3 Test de dump en ligne (mysqldump --single-transaction)
4 Installation & configuration de Restic (repo S3 / Azure)
5 Script backup fonctionnel (dry‑run restic backup --dry-run)
6 Timer systemd activé et testé (systemctl start dolibarr-backup.service)
7 Monitoring (Prometheus metrics exposés)
8 Plan de rétention (keep‑daily/weekly/monthly)
9 Documentation (runbook, procédure de restauration)
10 Test de restauration sur serveur de staging (prêt à être planifié)


7. Procédure de restauration rapide (si besoin)

# 1. Cloner le dernier snapshot
restic restore latest --target /tmp/restore_tmp --password-file /etc/restic/key.txt
# 2. Décompresser les fichiers Dolibarr (si séparés)
tar -xzf /tmp/restore_tmp/files_*.tar.gz -C /var/www/dolibarr/
# 3. Importer le dump MySQL
mysql -u root -p dolibarr < /tmp/restore_tmp/dump_*.sql
# 4. Vérifier les permissions
chown -R www-data:www-data /var/www/dolibarr
chmod -R 750 /var/www/dolibarr/*
# 5. Redémarrer le service Apache
systemctl restart apache2

  • Temps moyen de restauration d’un dump de 500 MB + fichiers image ≈ 15 min, independent de la taille du dépôt distant (le réseau n’intervient que pour le download du snapshot).


8. Bonnes pratiques & recommandations à long terme

  1. Partitionnement des disques : Isoler le répertoire de stockage de Dolibarr (/var/lib/dolibarr) sur SSD dédié pour les I/O du backup.
  2. Limitation du débit : Utilisez tc ou wondershaper pour cap l’usage du réseau pendant les heures de pointe (ex. : 5 Mbps max entre 08h–18h).
  3. Chiffrement en‑transit : Privilégier SFTP ou HTTPS + TLS 1.3 entre les serveurs.
  4. Cache côté disque : Activer innodb_buffer_pool_size ≈ 70 % de la RAM pour éviter le flush pendant le dump.
  5. Documentation versionnée : Stocker le Dockerfile ou les scripts Terraform dans le même dépôt que la configuration Restic.
  6. Rotation des clés : Renouveler la clé SSH du dépôt tous les 6 mois et mettre à jour le script de backup.
  7. Tests de restauration semestriels : Planifier un “fire‑drill” de restauration pour valider la chaîne de récupération.


9. Conclusion

Ce playbook fournit une vue d’ensemble diagnostique et opérationnelle pour mettre en place un backup off‑site performant de votre plateforme Dolibarr. En combinant :

  • Analyse des métriques (CPU, I/O, réseau)
  • Choix d’une méthode hybride Restic + dump MySQL
  • Automatisation via systemd avec privelage réduit
  • Monitoring actif et alertes

Vous êtes capable de :

  • Découpler le processus de sauvegarde du trafic transactionnel,
  • Garantir un RPO < 2 heures et un RTO < 4 heures,
  • Conserver la conformité (chiffrement, audit) tout en préservant les performances du système de production.

Prochaine étape : Executer le benchmark recommandé sur votre serveur de pré‑production, ajuster les paramètres nice, Jobs et la compression, puis planifier le basculement complet.

Bonne sauvegarde ! 🎉


Document rédigé par l’équipe Performance & Business Continuity – 2025.
Pour toute question ou adaptation, contactez backup‑team@yourcompany.com.

Publications similaires