POC Collectivité • ERP Open Source

Dolibarr en Docker – Preuve de faisabilité

Déploiement reproductible, paramétrage en français, démonstrations Finance (factures client/fournisseur) et RH (congé agent).

Résumé exécutif

Faisabilité : déploiement de Dolibarr (ERP open-source) sur Debian 12 via Docker Compose, avec persistance.

Valeur Collectivité : gratuit, francisé, modulaire, traçable, extensible (mails, PDF, reporting, SSO).

1) Contexte & architecture

Pourquoi Dolibarr ? Léger, modulaire, communauté FR. ERPNext est plus lourd (Frappe/Redis) : moins adapté pour un POC rapide.

  • OS : Debian 12 (VM)
  • Containers : mariadb:10.11 + tuxgasy/dolibarr:latest
  • Persistance : volumes hôte
  • Accès : http://localhost:8087
projet-ecf/
└─ dolibarr/
   ├─ .env
   ├─ docker-compose.yml
   └─ volumes/
      ├─ mariadb/      # données SQL
      └─ dolibarr/     # documents / PDF

2) Mise en place

2.1 Pré-requis

sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo usermod -aG docker $USER   # puis déconnexion/reconnexion

2.2 Projet & volumes

mkdir -p ~/projet-ecf/dolibarr/{volumes/dolibarr,volumes/mariadb}
cd ~/projet-ecf/dolibarr

2.3 Fichier .env

MYSQL_ROOT_PASSWORD=changeme-root
MYSQL_DATABASE=dolibarr
MYSQL_USER=dolibarr
MYSQL_PASSWORD=changeme
DOLI_HTTP_PORT=8087

2.4 docker-compose.yml

services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./volumes/mariadb:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 10

  dolibarr:
    image: tuxgasy/dolibarr:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      DOLI_DB_HOST: db
      DOLI_DB_NAME: ${MYSQL_DATABASE}
      DOLI_DB_USER: ${MYSQL_USER}
      DOLI_DB_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "${DOLI_HTTP_PORT}:80"
    volumes:
      - ./volumes/dolibarr:/var/www/html/documents

2.5 Démarrage

docker compose up -d
docker compose ps
# Accès: http://localhost:8087
ss -ltnp | grep 8087 || echo "8087 libre"

Assistant Dolibarr → DB db, BDD dolibarr, user dolibarr / pass changeme. Créer le compte admin. Passer l’UI en Français.

3) Paramétrage

3.1 Société

Configuration → Société/Organisation : VilleDemo (France, adresse) → Enregistrer.

3.2 Modules

4) Données de démonstration

Catalogue

  • Service : Formation bureautique — 150 € HT — TVA 20 % — En vente : Oui
  • Produit : Ramettes papier A4 — 100 € HT — TVA 20 % — En vente : Oui

Tiers

  • Client : Association Quartier Nord
  • Fournisseur : Papeterie Sud

On crée d’abord le catalogue → ensuite on le sélectionne dans les documents (devis, factures…).

5) Scénario #1 — Finance

5.1 Facture client

  1. Facturation → Factures clients → Nouvelle facture
  2. Client : Association Quartier Nord ; Type : standard
  3. Ajouter ligne → Service Formation bureautique (150 € HT)
  4. Valider (HT 150 / TVA 30 / TTC 180)

5.2 Facture fournisseur

  1. Facturation → Factures fournisseur → Nouvelle facture
  2. Fournisseur : Papeterie Sud ; Type : standard
  3. Ajouter ligne → Produit Ramettes papier A4 (100 € HT)
  4. Valider (HT 100 / TVA 20 / TTC 120)

6) Scénario #2 — RH

6.1 Employé & permissions

  1. Création d’Alice Martin (identifiant amartin, Salarié: Oui)
  2. Onglet Permissions → Congés :
    • ✅ Lire vos demandes
    • ✅ Créer/modifier vos demandes

6.2 Demande & validation

  1. Connexion Alice → GRH → Nouvelle demande (RTT, 1 jour)
  2. Connexion SuperAdmin → Approuver/Valider
  3. Statut final : Approuvée

7) Galerie de captures (POC Dolibarr)

Vous trouverez ci-dessous l’ensemble de mes captures qui illustrent le déploiement, le paramétrage et les deux scénarios (Finance & RH). Cliquez sur une image pour l’agrandir.

8) Exploitation

Commandes utiles

# démarrer / arrêter
docker compose up -d
docker compose down

# logs
docker compose logs -f --tail=100 db
docker compose logs -f --tail=100 dolibarr

# sauvegarde volumes
tar -czf backup-dolibarr-$(date +%F).tgz volumes/

Reset mot de passe admin (si besoin)

DB_ID=$(docker ps -qf "name=_db_")
docker exec -it "$DB_ID" mysql -u dolibarr -pchangeme dolibarr -e "
UPDATE llx_user
SET login='admin', pass_crypted=MD5('admin123')
WHERE login='admin' OR rowid=1;
SELECT rowid, login FROM llx_user;"

Bonnes pratiques : secrets forts, reverse-proxy HTTPS, sauvegardes régulières (mysqldump + documents), rôles/permissions, mises à jour d’images.