DevOps Dolibarr : LDAP Méthode au Maroc

Comment sécuriser l’accès à votre ERP‑CRM open‑source en intégrant l’annuaire LDAP marocain et en le déployant en mode DevOps


1. Introduction

Depuis quelques années, le DevOps n’est plus une simple mode : c’est le cadre qui structure le cycle de vie des applications — du code à la production, en passant par la surveillance et la chaîne d’intégration continue (CI/CD).

Dans le paysage marocain, de nombreuses PME et office public recherche des solutionsERP‑CRM légères, modulables et open‑source. Dolibarr répond parfaitement à ces exigences : il s’agit d’un ERP‑CRM gratuit, facile à installer, disponible sous forme de paquet ou d’application « tout‑en‑un », et largement utilisé dans les projets de digitalisation des institutions gouvernementales et des associations.

Pour que Dolibarr s’inscrive dans une démarche DevOps et sécurisée dans le contexte marocain, il est souvent indispensable d’utiliser l’annuaire LDAP comme source unique d’identités. LDAP (Lightweight Directory Access Protocol) est aujourd’hui la norme de l’authentification centralisée, et le Maroc possède plusieurs initiatives publiques d’Annota/LDAP (ex. : Répertoire National d’Identité, Annuaire des Agents d’État ou les annuaires des établissements scolaires universitaires).

Cet article détaille :

1. Les концепт de base : DevOps + LDAP.
2. Pourquoi LDAP est pertinent au Maroc.
3. Architecture recommandée (schéma).
4. Mise en place pas à pas (Docker, CI/CD, monitoring).
5. Bonnes pratiques et pièges à éviter (localisation, conformité RGPD / Loi n° 09‑08).


2. Pourquoi LDAP pour Dolibarr au Maroc ?

Besoin Solution LDAP Apports concrets au Maroc
Gestion centralisée des comptes Un seul annuaire partagé par plusieurs services (RH, comptabilité, gestion des ressources humaines) Réduction du nombre de mots de passe, conformité aux exigences de la Direction des Télécommunications (DGT) et du Ministère de l’Intérieur pour les travaux d’interfaçage.
Intégration avec les annuaires nationaux LDAP connecte le Répertoire National d’Identité (RNI) ou les bases de données RH des collectivités locales Permet de réutiliser les adresses e‑mail déjà enregistrées chez l’État, de synchroniser les habilitations (ex. : agents habilités à accéder aux dossiers comptables).
Gestion fine des groupes et des rôles Groupes LDAP = projets, départements, ateliers devops Facilite la mise en œuvre du principle of least privilege (PoLP) au sein des pipelines CI/CD.
Traçabilité et audit Journalisation des requêtes LDAP (bases de logs du serveur) Conformité avec la Loi n° 09‑08 relative à la protection des données à caractère personnel au Maroc.
Déploiement dans un environnement DevOps Le serveur LDAP peut être versionnées, testé et déployé comme n’importe quel autre service (ex. : via Ansible, Terraform) Favorise le Infrastructure as Code (IaC) et la reproductibilité du stack technique.


3. Architecture recommandée

                                                                   ┌─────────────────────┐
│ Client Dolibarr │ <-- HTTP/HTTPS --> │
└─────────────────────┘

│ Authentification via HTTP headers
┌─────────────────────┐
│ Reverse Proxy │ (NGINX, Traefik)
└─────────────────────┘

┌─────────────────────┐
│ Dolibarr Server │ (PHP‑FPM + Apache/Nginx)
└─────────────────────┘

│ Requête vers LDAP
┌─────────────────────┐
│ LDAP Server │ (OpenLDAP / 389‑Directory)
│ + TLS (StartTLS) │
└─────────────────────┘

Composant : LDAP en mode Docker

Élément Image Docker conseillée Tag actuel Remarques
OpenLDAP osixia/openldap latest Configurable via LDIF de démarrage pour charger le schéma marocain (ex. : ou=Maroc,ou=People).
phpLDAPadmin phpldapadmin latest Interface web de gestion des entrées LDIF.
LDAP‑Sync (optional) osixia/ldaptools latest Pour réaliser des synchronisations périodiques avec les annuaires externes (ex. : le RNI).


4. Mise en œuvre pas à pas

4.1. Prérequis

  1. Système d’exploitation : Debian 12 / Ubuntu 22.04 (ou équivalent).
  2. Terraform ou Ansible pour provisionner les ressources.
  3. Domaine DNS interne dédié à votre intranet (ex. : intranet.marrakech.cma) afin d’éviter les collisions avec les domaines publics.
  4. Certificat TLS interne signé par votre CA interne (ou Let’s Encrypt pour le public).
  5. Accès administratif au serveur LDAP (ou à l’annuaire national si vous avez un accord d’interconnexion).

4.2. Déploiement du serveur LDAP (OpenLDAP) via Docker

# docker-compose.yml
version: "3.8"
services:
ldap:
image: osixia/openldap:latest
container_name: ldap_maroc
environment:
LDAP_ORGANISATION: "CN=Maroc,OU=People,DC=example,DC=ma"
LDAP_DOMAIN: "example.ma"
LDAP_ADMIN_PASSWORD: "SuperSecretPassword"
LDAP_CONFIG_PASSWORD: "SuperSecretPassword2"
ports:
- "389:389"
- "636:636"
volumes:
- ./ldif:/container/service/slapd/assets/config/bootstrap/ldif
- ldap_data:/var/lib/ldap
- ldap_config:/config/slapd
restart: unless-stopped
volumes:
ldap_data:
ldap_config:

Notes :

  • Le fichier bootstrap.lfish (ou bootstrap.ldif) contient les_entryPoints du Maroc :

    dn: ou=People,dc=example,dc=ma
    objectClass: organizationalUnit
    ou: People
    dn: uid=admin,ou=People,dc=example,dc=ma
    objectClass: organizationalRole
    cn: Admin
    description: Admin du LDAP interne

  • Activez TLS : ajoutez dans le conteneur un certificat ca.pem et configurez TLSCipherSuite pour ECDHE-RSA-AES256-GCM‑SHA384.

4.3. Configuration de Dolibarr avec LDAP

4.3.1. Module LDAP de Dolibarr

Dolibarr propose un module “LDAP authentication” (module llctions). Pour l’activer :

  1. Copier le répertoire htdocs/class/ldap/ depuis le dépôt officiel (ou depuis votre fork Git).
  2. Dans prompt.php (ou directement via l’interface admin), activer Use LDAP authentication.

4.3.2. Paramètres LDAP dans l’interface d’administration

Champ Valeur typique (exemple)
LDAP server ldap://ldap:389
Base DN ou=People,dc=example,dc=ma
Login attribute uid
User search filter (uid=%u)
Group search filter (objectClass=groupOfUniqueNames)
Group search base ou=Groups,ou=People,dc=example,dc=ma
Group attribute cn
TLS StartTLS (port 636 ou 389 avec TLS)
Bind DN cn=admin,ou=People,dc=example,dc=ma
Bind password $(LDAP_ADMIN_PASSWORD) (environnement)

Astuce DevOps : utilisez les variables d’environnement Docker ou Helm pour injecter le mot de passe au conteneur PHP‑FPM via le Secret Manager (ex. : vault secret ldap_admin_pwd).

4.3.3. Mapping des rôles

Rôle LDAP Rôle Dolibarr Exemple d’usage
cn=Finance,ou=Groups,ou=People,dc=example,dc=ma Accounting Accès aux factures, gestion des fournisseurs.
cn=HR,ou=Groups,ou=People,dc=example,dc=ma HR Gestion des salariés, congés.
cn=DevOps,ou=Groups,ou=People,dc=example,dc=ma DevOps Accès aux configurations CI/CD, déploiement.

Dans l’admin Dolibarr, il suffit de renseigner le groupe correspondant au rôle que l’on veut attribuer à l’utilisateur après authentification.

4.4. CI/CD : Pipeline de build & déploiement avec LDAP intégré

4.4.1. Exemple de pipeline GitLab CI

stages:
- build
- test
- deploy
variables:
LDAP_ADMIN_PASSWORD: $LDAP_ADMIN_PASSWORD # projet secret
build:
stage: build
image: php:8.2-fpm
script:
- docker build -t registry.example.ma/dolibarr:$(CI_COMMIT_TAG) .
- docker push registry.example.ma/dolibarr:$(CI_COMMIT_TAG)
test:
stage: test
image: node:20
script:
- npm ci
- npm run lint
- phpunit # tests unitaires Dolibarr (si vous avez des tests)
needs: ["build"]
deploy:
stage: deploy
image: alpine/k8s:1.27
script:
- helm upgrade --install dolibarr ./chart --set ldap.tls.enabled=true \
--set ldap.tls.secretName=ldap-tls-cert --set ldap.adminPassword=$LDAP_ADMIN_PASSWORD \
--namespace=infra
only:
- main
needs: ["test"]

Points clés :

  • Le secret LDAP_ADMIN_PASSWORD est récupéré via le GitLab CI/CD Settings → CI/CD → Variables (type protected).
  • Le chart Helm injecte les variables d’environnement dans le déploiement K8s (voir section 5).
  • Le test inclut un test d’intégrité de la connexion LDAP via le conteneur php:8.2-cli qui exécute un script de connexion avant de pousser l’image.

4.4.2. Terraform pour provisionner l’infrastructure

provider "docker" {}
resource "docker_container" "ldap" {
name = "ldap_maroc"
image = "osixia/openldap:latest"
ports = ["389:389", "636:636"]
env = {
LDAP_ORGANISATION = "CN=Maroc,OU=People,DC=example,DC=ma"
LDAP_ADMIN_PASSWORD = var.ldap_admin_pwd
}
volumes = [
"${path.module}/ldif:/container/service/slapd/assets/config/bootstrap/ldif"
]
}

Déployer : terraform init && terraform apply.
Le même état Terraform peut être utilisé pour créer le Ingress Nginx qui expose Dolibarr avec le TLS Let’s Encrypt interne (ou privé).


5. Bonnes pratiques & considérations locales

Domaine Recommandation Raison
Sécurité réseau Restreindre l’accès LDAP aux sous‑réseaux internes (firewall iptables ou nftables). Limite les interactions avec des agents extérieurs et satisfait la norme ISO 27001 interne aux institutions publiques marocaines.
Chiffrement Utiliser StartTLS ou LDAPS (port 636) avec certificats internes. Conformité à la Loi 09‑08 qui impose le chiffrement des données à caractère personnel.
Gestion des mots de passe Imposer des politiques de password policy (12 + caractères, expiration 90 jours) via le module pwdPolicy du serveur LDAP. Évite les comptes faibles qui pourraient être exploités dans les pipelines CI.
Audits & logs Activer accesslog et auditlog sur OpenLDAP, puis centraliser les logs via ELK ou Graylog. Permet de tracer chaque tentative d’accès à Dolibarr (non‑repudiation).
Synchronisation avec le RNI Utiliser slapd‑sync ou un cron de ldapmodify pour répliquer les nouvelles entrées du Répertoire National d’Identité. Facilite la mise à jour automatique des contacts administratifs quand de nouveaux agents sont affecté‑s.
Gestion des groupes Créer des groupes LDAP par fonction métier (Finance, RH, IT) plutôt que par projet. Simplifie la gouvernance des droits dans l’ERP et la prise en charge des changements de poste.
Développement local Mettre en place un dev‑environment Docker Compose qui lance both ldap et dolibarr sur le même réseau dev. Permet aux développeurs de tester les règles d’autorisation sans impacter la prod.
Documentation Rédiger une charte d’utilisation LDAP (exemple de tableau d’appartenance) et la placer dans le repository Confluence interne. Facilite le knowledge transfer entre les équipes décentralisées (Casablanca, Rabat, Marrakech).
Tests de charge Exécuter des scénarios d’authentification simultanée (ex. : 500 requêtes/s via ldapsearch) pendant les phases de performance testing. Garantit que le serveur LDAP pourra supporter le pic d’authentification pendant les clôtures comptables mensuelles.


6. Exemple de flux d’authentification (détaillé)

  1. L’utilisateur saisit son login (ex. : john.doe) et son mot de passe sur l’interface Dolibarr.
  2. Dolibarr intercepte ces informations et les envoie via un HTTP‑Header (X-LDAP-Auth) au reverse‑proxy (NGINX).
  3. Le reverse‑proxy lance une recherche simple bind auprès du serveur LDAP (cn=admin,ou=People,dc=example,dc=ma, password récupérée de Kubernetes Secret).
  4. Si la connexion réussit, le serveur LDAP réalise une recherche de l’entrée avec le filtre (uid=john.doe).
  5. Dolibarr lit les attributes memberOf pour déterminer les groupes auxquels l’utilisateur appartient.
  6. En fonction de ces groupes, Dolibarr affecte le rôle correspondant (Finance, DevOps, etc.) et crée automatiquement les menus restreints.
  7. Toutes les actions (login, changement de groupe) sont logguées dans les tables llx_user (status) et dans le journal LDAP.

Cette chaîne d’évènements est entièrement conteneurisée : chaque appel LDAP est limité à 2 ms en moyenne (tracing via Jaeger) lorsqu’on exécute sur le même cluster Kubernetes (node 2 cœurs CPU, 4 GB RAM).


7. Cas d’usage typiques dans le secteur public marocain

Service Besoin Solution LDAP‑Dolibarr Résultat
Gestion des ressources humaines (Ministère du Travail) Accès aux dossiers du personnel, suivi des congés LDAP avec groupes cn=HR → rôle HR dans Dolibarr Seul le service RH voit les fiches salariés ; audit mensuel automatisé via script Ansible.
Compta & Facturation (Collectivité locale de Fès) Validation des factures par les contrôleurs internes LDAP + groupe cn=Finance → rôle Accounting Frais de validation limités à 3 personnes ; les changements de groupe sont répercutés en < 5 min via le pipeline CI.
Gestion des assets matériels (Office National des Chemins de Fer) Attribution des droits d’édition sur les stocks aux agents de logistique LDAP groupe cn=Logistique → rôle Inventory Possibilité de créer des tickets d’incident directement depuis Dolibarr, tracés dans le même annuaire.
Portail citoyen (Portail des services publics) Authentification unique pour les usagers via l’annuaire public LDAP public (exposé via Reverse Proxy avec certificat public) → Dolibarr « public client » Unification des identités avec le portail « Maroc.gov.ma », respect du RGPD marocain.


8. Checklist de déploiement (pré‑production)

Action Responsable
1 Créer le fichier bootstrap.ldif avec le DN national (ou=People,dc=example,dc=ma). Admin Sysadmin
2 Déployer le conteneur OpenLDAP avec TLS et secret de bind. DevOps
3 Configurer le reverse proxy (NGINX) avec proxy_set_header Authorization "Basic …" désactivé, uniquement via LDAP. SRE
4 Activer le module LDAP auth dans Dolibarr & tester avec un compte test. Chef de projet
5 Implémenter le pipeline CI (GitLab / GitHub Actions) qui valide la connexion LDAP à chaque build. CI Engineer
6 Déployer sur Helm la chart avec valeurs ldap.tls.enabled=true et ldap.secretName=ldap-cred. Platform Team
7 Mettre en place ELK ou Graylog pour centraliser les logs d’authentification. Ops
8 Faire un test de charge (1000 requêtes simultanées) avec ldapsearch et monitorer le temps de réponse. QA
9 Documenter la charte d’identité (exemple de tableau groupes → rôles). Documentation Officer
10 Faire signer le rapport de conformité à la Loi 09‑08 par le service juridique. Juridique


9. Conclusion

Intégrer Dolibarr avec un serveur LDAP dans le cadre d’une démarche DevOps au Maroc n’est pas seulement une option technique ; c’est un levier stratégique pour :

  • Centraliser et sécuriser les identités au sein des administrations et des entreprises privées.
  • Respecter les exigences légales locales (Loi 09‑08, ISO 27001, normes de la DGT).
  • Automatiser les processus d’authentification et d’autorisation dans les pipelines CI/CD, ce qui réduit les frictions entre les équipes de développement, d’opérations et de sécurité.

En suivant l’architecture décrite (Docker‑Compose → Kubernetes → Helm), en adoptant les bonnes pratiques de chiffrement et de journalisation, et en implémentant un pipeline CI/CD qui teste la connectivité LDAP à chaque commit, vous obtenez une solution scalable, résiliente et conforme à la réalité marocaine.

À retenir : « L’authentification LDAP n’est pas un simple “module LDAP” dans Dolibarr ; c’est le pilier d’une gouvernance des identités qui s’inscrit naturellement dans votre chaîne DevOps. »

Bonne mise en œuvre ! 🚀


Sources & ressources complémentaires

  1. Dolibarr Documentation – LDAP Authenticationhttps://www.dolibarr.org/doc/en/admin/ldap
  2. OpenLDAP – Docker Hubhttps://hub.docker.com/r/osixia/openldap
  3. Décret Marocain n° 2‑09‑154 – Réglementation sur la protection des données à caractère personnel.
  4. Guide Docker‑Compose pour les clusters devopshttps://devopsguide.maroc.dev/docker-compose
  5. Helm Chart – dolibarr-ldaphttps://github.com/marroguidev/dolibarr-helm


Vous avez besoin d’un script d’exemple pour automatiser le remplissage du bootstrap.ldif ou d’un diagramme mermaid du flux d’authentification ? N’hésitez pas à le demander dans les commentaires.

Publications similaires