(Tutoriel pas à pas, langue française)
TL;DR : Dolibarr, ERP/CRM léger, peut être intégré dans une chaîne CI/CD moderne (Git → GitHub → GitLab or Bitbucket → Docker → Kubernetes → Prometheus / Grafana / Alertmanager). Ce guide détaille chaque étape, les bonnes pratiques de 2026 et les outils associés pour obtenir un déploiement scalable, reproductible et observabilité‑first.
1. Contexte et pourquoi Dolibarr aujourd’hui ?
| Aspect | 2023 | 2025 | 2026 (tendance) |
|---|---|---|---|
| Maturité | Application PHP monolithique, installable via ZIP ou paquet Debian | Dockerisé, support officiel dolibarr/dolibarr sur Docker Hub |
Micro‑services modulaires via « Dolibarr‑as‑a‑service » (API‑first) |
| Sécurité | Patch mensuel manuel | Scans automatisés (Trivy, Anchore) intégrés aux pipelines CI | Secure‑by‑Design : images signées, attestation SBOM (Syft) |
| Observabilité | Logs dans fichiers, monitoring basique | Métriques via Prometheus, alertes via Grafana | Full‑stack observabilité (tracing distribué, logs structurés JSON) |
| Gestion de configuration | Scripts shell ad‑hoc | Helm chart stable depuis 2024 | GitOps (Argo CD ou Flux) comme source de vérité unique |
| Scalabilité | Hébergement sur serveur unique | Docker‑Compose, réplication possible | K8s native avec autoscaling horizontal (HPA) et scaling bas‑e‑t (CPU/MQTT) |
En résumé : En 2026, la meilleure façon de tirer parti de Dolibarr dans un projet professionnel est de le containeriser, de le déployer via GitOps, d’en faire un micro‑service exposé via une API REST et de le monitorer comme n’importe quel autre composant de l’infrastructure.
2. Architecture cible (2026)
┌───────────────────────┐
│ Git Repository │ <-- Source code (Dolibarr modules, Dockerfile, k8s manifests)
└─────────────┬─────────┘
│
┌────────────▼───────┐
│ CI/CD Pipeline │ (GitLab CI / GitHub Actions)
│ - Build Docker │ - Tests unitaires (PHPUnit)
│ - Scan Sécurité │ - Push image vers Registry
└─────────────┬───────┘
│
┌────────────▼───────┐
│ Container Registry│ (GitLab Container Registry / Harbor)
└─────────────┬───────┘
│
┌────────────▼───────┐
│ GitOps Deploy │ (Argo CD ou Flux)
│ - Helm chart │ - Helm values (DB, domain, email…)
│ - K8s Manifests │ - Auto‑sync avec cluster
└─────────────┬───────┘
│
┌────────────▼───────┐
│ Kubernetes │ (v1.29+)
│ - Namespace: dolibar│
│ - Deployments, │
│ Services, Ingress│
│ - PVC for data │
│ - Prometheus │
│ - Grafana │ │ - Cert‑Manager │ (TLS auto)
└─────────────┬───────┘
│
┌────────────▼───────┐
│ Monitoring & Logs│ (Prometheus + Loki + Grafana)
│ Alertmanager │ └─────────────────────┘
3. Prérequis (Outils de 2026)
| Catégorie | Outils recommandés |
|---|---|
| Gestion de code | Git 2.45+, GitHub / GitLab / Bitbucket |
| CI/CD | GitLab CI (v16) ou GitHub Actions (v4) |
| Containerisation | Docker Engine 24, Buildx, BuildKit |
| Registry | Docker Hub, GitLab Container Registry, Harbor |
| Orchestration | Kubernetes v1.29+ (eks, gke, AKS ou K3s pour dev) |
| Infra as Code | Helm 3.15, Kustomize 5.4 |
| GitOps | Argo CD 2.9 ou Flux 2.5 |
| Security Scanning | Trivy v0.49, Anchore Engine, Syft 1.1 |
| Observabilité | Prometheus 2.53, Grafana 10, Loki 3, Tempo (tracing) |
| Certificat TLS | cert‑manager 1.15 + Let’s Encrypt |
| Tests PHP | PHPUnit 10, PestPHP 2 |
| Documentation | OpenAPI 3 (Swagger UI)auto‑généré via zircote/swagger-php |
| Versioning d’image | Semantic versioning + git tag -a → docker buildx imagesecurity |
4. Étape 1 – Préparer le code source et les modules Dolibarr
-
Cloner le dépôt (exemple GitLab)
git clone https://gitlab.mycompany.com/infra/dolibarr-erp.git
cd dolibarr-erp -
Activer le mode « Developer » dans Dolibarr pour autoriser le chargement de modules externes (Docker‑ready).
// file: htdocs/_config.php
$conf['developer_mode'] = 1; -
Gestion des modules – Créez un dossier
src/Modules/dédié aux custom modules (ex :MyCompany.Module.Calendar).- Emballez chaque module sous forme de composer package (facultatif) pour versionner proprement.
-
Ajouter une configuration
docker-compose.ymllocale (dev only)version: "3.9"
services:
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: dolibarr POSTGRES_USER: dolibarr POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
dolibarr:
build: .
ports:
- "8080:80"
environment:
- DBHOST=db
- DBNAME=dolibarr
- DBUSER=dolibarr
- DBPASS=secret
depends_on:
- db volumes:
pgdata:Tip 2026 : Utilisez
docker compose --profile=prodpour basculer vers un fichierdocker-compose.prod.ymlqui ne publie pas le port 80 (seulement via Ingress K8s).
5. Étape 2 – Containeriser Dolibarr
5.1 Dockerfile « Production‑Ready »
# ---------- Build stage ----------
FROM php:8.3-fpm-alpine3.20 AS builder
# Installation des dépendances système
RUN apk add --no-cache \
icu-dev \
libzip-dev \
oniguruma-dev \
zlib-dev \
git \
unzip \
mariadb-client \
&& docker-php-ext-configure intl \
&& docker-php-ext-install -j$(nproc) intl zip pdo_mysql bcmath \
&& pecl install redis && docker-php-ext-enable redis
# Copie du code source
WORKDIR /var/www/html
COPY . .
# Installation des dépendances PHP via Composer
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-interaction
# ---------- Runtime stage ----------
FROM php:8.3-fpm-alpine3.20
# Packages runtime
RUN apk add --no-cache \
icu-libs \
libzip \
libcurl \
libsqlite3 \
openssl \
ca-certificates
# Copie des artefacts du builder
COPY --from=builder /var/www/html /var/www/html
WORKDIR /var/www/html
# Ajout du fichier de config Docker
COPY docker/php-fpm.conf php-fpm.confCOPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV PHP_OPCACHE_ENABLE=1 \
PHP_MEMORY_LIMIT=512M \
DOLIBARR_URL=http://localhost
# Exposer le port 80 (utilisé par le serveur Nginx intégré dans le prochain image)
EXPOSE 80
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
5.2 entrypoint.sh
« `bash#!/bin/sh
set -e
while ! pg_isready -h "$DBHOST" -p 5432 -U "$DBUSER"; do
echo "⏳ Waiting for PostgreSQL…"
sleep 2
done
php docroot/hexport.php -migrate
exec "$@"
> **Bon à savoir 2026** :
> - **SBOM** (Software Bill Of Materials) est généré automatiquement avec `syft` et stocké dans l’image via l’annotation `org.opencontainers.image.features.sbom`. > - **Entrypoint** inclut le **healthcheck** (`curl -f http://localhost/dolibarr/.../version.php || exit 1`).
---
## 6. Étape 3 – **Pipeline CI/CD (GitLab CI)**
```yaml
stages:
- lint
- test
- build
- security - push
- deploy
variables:
REGISTRY: registry.gitlab.com/mycompany/dolibarr
IMAGE_TAG: $CI_COMMIT_TAG # ou $CI_PIPELINE_ID
# ---------- Lint / PHPStan ----------
php:lint:
image: php:8.3-cli-alpine stage: lint
script:
- composer install --no-dev --optimize-autoloader
- vendor/bin/phpstan analyse -l max-level=max
- vendor/bin/PHP_CodeSniffer -p src --standard=PSR12
# ---------- Tests unitaires ----------
php:test:
image: php:8.3-cli-alpine
stage: test
services:
- name: postgres:16-alpine
alias: db
environment:
POSTGRES_DB: testdb
POSTGRES_USER: test
POSTGRES_PASSWORD: test
script:
- vendor/bin/phpunit --coverage-text --colors=always
- vendor/bin/phpcov merge --clover coverage.xml
artifacts:
when: always reports:
cobertura: coverage.xml
# ---------- Build Docker ----------
docker:build:
image: docker:24.0.7-dind
stage: build
services:
- docker:dind
script:
- |
docker buildx create --use --name builder
docker buildx build \
--progress=plain \
--pull \
--push \
-t $REGISTRY/dolibarr:$IMAGE_TAG \
-t $REGISTRY/dolibarr:latest \
.
rules:
- if: $CI_COMMIT_BRANCH == "main" || $CI_COMMIT_TAG != ""
# ---------- Security Scan ----------
docker:security:
image: aquasec/trivy:latest
stage: security
script:
- trivy image --severity=CRITICAL,HIGH --exit-code 1 $REGISTRY/dolibarr:$IMAGE_TAG || exit 0
# ---------- Push Image ----------
docker:push:
image: registry:2
stage: push script:
- echo "Image already built & scanned, nothing to push"
rules:
- if: $CI_COMMIT_TAG != ""
# ---------- Deploy via Helm (GitOps) ----------
deploy:helm:
image: alpine/git:latest
stage: deploy
script:
- apk add --no-cache helm kubectl kubectl/plugins
- helm repo add bitnami https://charts.bitnami.com/bitnami
- helm dependency update ./helm/dolibarr - helm upgrade --install dolibarr ./helm/dolibarr \
--namespace dolibarr \
--create-namespace \
--set image.tag=$IMAGE_TAG \
--set env.DB_HOST=postgres.dolibarr.svc.cluster.local \
--set env.DB_NAME=dolibarr \
--set env.DB_USER=dolibarr \
--set env.DB_PASSWORD=$DB_PASSWORD \
--set ingress.host=dolibarr.mycompany.com \
--set ingress.tls.enabled=true \
--set ingress.tls.secretName=dolibarr-tls
rules:
- if: $CI_COMMIT_TAG != "" # only on tags (semver)
Note : Le pipeline CI/CD de 2026 est déclaratif, chacun des jobs est isolé dans un conteneur dédié et utilise le caching de Docker layers via
docker buildx cache-frompour éviter de reconstruire à chaque pipeline.
7. Étape 4 – Helm Chart Dolibarr (2026 version) Structure du chart ./helm/dolibarr :
dolibarr/
├─ Chart.yaml
├─ values.yaml
└─ templates/
├─ deployment.yaml
├─ service.yaml
├─ ingress.yaml
├─ pvc.yaml
├─ configmap.yaml # dolibarr.confcustom
└─ secret.yaml # DB credentials
7.1 values.yaml clé (exemple)
replicaCount: 2
image:
repository: registry.gitlab.com/mycompany/dolibarr/dolibarr
pullPolicy: IfNotPresent
tag: latest
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx hosts:
- host: dolibarr.mycompany.com
paths:
- path: /
pathType: ImplementationSpecific
tls:
enabled: true
secretName: dolibarr-tls # généré par cert‑manager
persistence:
enabled: true
storageClass: gp2 # AWS/GKE/EKS
accessModes:
- ReadWriteOnce
size: 20Gi
# Storage for uploaded files (documents, fiches)
mountPath: /var/www/html/filesenv:
DB_HOST: postgres.dolibarr.svc.cluster.local
DB_NAME: dolibarr
DB_USER: dolibarr
DB_PASSWORD: "" # injecté via secret
# Custom modules à activer
modules:
- name: mycompany.module.calendar
enabled: true
version: 1.4.2
- name: mycompany.module.timesheet
enabled: false
7.2 deployment.yaml (extrait)
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "dolibarr.fullname" . }}
labels: {{- include "dolibarr.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app.kubernetes.io/name: {{ include "dolibarr.name" . }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ include "dolibarr.name" . }}
spec:
serviceAccountName: {{ include "dolibarr.serviceAccountName" . }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- containerPort: 80 env:
- name: DBHOST
value: "{{ .Values.env.DB_HOST }}"
- name: DBNAME
value: "{{ .Values.env.DB_NAME }}"
- name: DBUSER
value: "{{ .Values.env.DB_USER }}"
- name: DBPASS
valueFrom:
secretKeyRef:
name: {{ include "dolibarr.fullname" . }}-db key: password
volumeMounts:
- name: files
mountPath: /var/www/html/files
- name: config
mountPath: /var/www/html/dolibarr_conf
readinessProbe:
httpGet:
path: /dolibarr/version.php
port: 80
initialDelaySeconds: 10
periodSeconds: 10
livenessProbe:
httpGet:
path: /dolibarr/version.php
port: 80 initialDelaySeconds: 30
periodSeconds: 30
volumes:
- name: files
persistentVolumeClaim:
claimName: {{ include "dolibarr.fullname" . }}-pvc
- name: config
configMap:
name: {{ include "dolibarr.fullname" . }}-config
Bonne pratique 2026 : Le chart inclut désormais
initContainersqui exécutentphp docroot/hexport.php --seedpour créer les tables par défaut etpreStophook qui vide les files d’attente de la file de cache Redis avant l’arrêt.
8. Étape 5 – Gestion des Configurations et Secrets
-
Création du secret (via Helm ou
kubectl)kubectl create secret generic dolibarr-db \
--from-literal=DB_PASSWORD=$DB_PASSWORD \
--namespace dolibarr -
Gestion des certificats TLS
# templates/ingress.yaml (extrait)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "dolibarr.fullname" . }}
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: {{ .Values.ingress.className }}
tls:
- secretName: {{ .Values.ingress.tls.secretName }}
hosts:
- {{ .Values.ingress.hosts.0.host }}- cert‑manager détecte automatiquement le domaine via le DNS et délivre le certificat Let’s Encrypt ACME.
- Versionning des configs – Utilisez GitOps : tout changement de
values.yamlpasse par un PR.helm diff upgradeen mode preview avant de pousser, évite les régressions.
9. Étape 6 – Observabilité (2026)
9.1 Métriques & Prometheus – Exporter intégré : Le conteneur expose /metrics via php-fpm_exporter (image stefan gates/php-fpm-exporter).
-
Scrape config (PrometheusOperator)
- job_name: dolibarr
metrics_path: /metrics
static_configs:
- targets: ['dolibarr.dolibarr.svc.cluster.local:80'] -
Alertmanager rules (exemple)
groups:
- name: dolibarr.rules
rules:
- alert: DolibarrHighErrorRate expr: rate(http_requests_total{status="5xx"}[5m]) > 0.05
for: 2m
labels:
severity: warning annotations:
summary: "Taux d’erreurs HTTP 5xx > 5 % sur Dolibarr"
description: "L’instance {{ $labels.instance }} connaît un pic d’erreurs. Vérifier les logs."
9.2 Traces distribuées
- Installez OpenTelemetry PHP via Composer (
opentelemetry/sdk-php). -
Exporter vers Tempo (backend de tracing). 3. Instrumenter les endpoints :
use OpenTelemetry\SDK\Trace\TracerProvider;
use OpenTelemetry\SDK\Export\ConsoleSpanExporter;
$provider = new TracerProvider();
$provider->addSpanProcessor(new \OpenTelemetry\SDK\Trace\Export\ConsoleSpanExporter());
$tracer = $provider->getTracer('dolibarr');
$span = $tracer->start('REQUEST');
// ... votre logique
$span->end(); - Dashboard Grafana : utilisez le public dashboard 16513 (Dolibarr Overview) et importez un template Grafana 10 pour les traces.
9.3 Logs structurés
- Docker → Loki (avec
promtailside‑car) - Format de log : JSON
{"timestamp":"2026-10-12T13:45:02Z","level":"info","msg":"Cache cleared","module":"mycompany.module.calendar","context":"cron"} - Alertes :
Grafana→ alerting rules surerrorrateoulatency
10. Étape 7 – Sécurité et Conformité (2026)
| Action | Outil/Démarche | Exemple de config |
|---|---|---|
| Balayage d’image | Trivy + Syft + Git‑Hub Dependabot | detect-secrets dans le pipeline CI |
| Hardening du conteneur | docker scan + Dockerfile avec USER non‑root |
USER 1001 dans Dockerfile |
| Gestion des vulnérabilités de la base | QuantumDB (Scanning) | SET GLOBAL sql_mode='STRICT_TRANS_TABLES'; |
| CORS & CSP | Middleware Nginx intégré au container | add_header Content-Security-Policy "default-src 'self'" always; |
| Autorisation RBAC | Kubernetes RBAC + pod‑security‑policy | pod-security-policy: restricted |
| SOC‑2 / ISO 27001 | Documentation IA (auto‑générée via asciidoctor) |
doc/security/audit.md |
| Secrets Rotation | Vault (2024) intégré via Kubernetes External Secrets | secret-store.csi.vault.csipolicy |
Tip : Ajoutez dans le Dockerfile une étape qui exécute
docker scan $IMAGE_NAMEet échoue le build si des vulnérabilités critiques sont détectées.
11. Étape 8 – Déploiement en Production (GitOps)
11.1 Initialisation du cluster GitOps
# Instalation d'Argo CD via Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm install argo-cd argo/argo-cd \
--namespace argocd --create-namespace \
--set server.ingress.enabled=true \
--set server.ingress.hosts[0]=argo.mycompany.com \
--set server.ingress.tls.enabled=true
- Exposez l’interface Argo CD via TLS Let’s Encrypt grâce à
cert-manager.
11.2 Application GitOps
# application-dolibarr.yaml (Argo CD Application)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: dolibarr
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.mycompany.com/infra/dolibarr-erp.git
targetRevision: HEAD
path: helm/dolibarr
destination:
server: https://kubernetes.default.svc
namespace: dolibarr
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- Chaque push sur la branche
maindéclenche automatiquement la synchronisation du chart. - Les tags semver (
v1.5.0) provoquent les déploiements de version majeure via Argo Rollout (déploiement canary).
12. Étape 9 – Mise à jour « Zero‑Downtime » (Canary)
- Déployer la version 2 (
dolibarr:2.0) avecstrategy: RollingUpdate+maxSurge: 25%,maxUnavailable: 25%. -
Utiliser Argo Rollout pour le contrôle du trafic :
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 2m}
- setWeight: 30
- pause: {duration: 5m}
- setWeight: 100 - Observation via Prometheus metrics (
request_latency_seconds,http_error_total). - Rollback automatique si un seuil d’erreurs critiques est franchi.
13. Étape 10 – Maintenance & Évolution Continuelle
| Activité | Fréquence | Outils |
|---|---|---|
| Mise à jour du framework PHP | Tous les 6 mois | PHP 8.4 → 8.5 |
| Mise à jour de Dolibarr | Mineur (patch) → mensuel ; majeur → annuel | git pull, composer update |
| Renouvellement des certificats | Automatique via cert‑manager | Let’s Encrypt |
| Rotation des secrets | Tous les 90 jours | HashiCorp Vault / External Secrets |
| Audit de sécurité des dépendances | Hebdomadaire | Dependabot, Renovate |
| Nettoyage des images orphelines | Mensuel | docker image prune + registry:2 purge |
| Documentation versionnée | À chaque release | asciidoc + mkdocs → GitHub Pages |
Conseil de DevOps : Conservez la configuration d’infrastructure (Helm values, manifests) dans le même repo que le code source. Ainsi, chaque modification de version de Dolibarr peut être testée dans un environnement d’intégration avant d’être promue.
14. Checklist “Ready‑to‑Prod” (Dolibarr 2026)
| ✅ | Item |
|---|---|
| 1 | Docker image signée (cosign / Notary) |
| 2 | SBOM (Syft) stocké dans l’image et accessible via oras |
| 3 | Scan de vulnérabilités passé avec critical = 0 |
| 4 | Tests unitaires >= 90 % de couverture |
| 5 | Helm chart versionnée (Chart.yaml + version: 0.3.2) |
| 6 | Ingress TLS valid via cert‑manager (pas d’erreur de chaîne) |
| 7 | Prometheus scrape sans erreurs |
| 8 | Alertmanager règles non‑alerting pour le déploiement initial |
| 9 | Tests de charge (k6) : <= 200 ms pour 95 % des requêtes |
| 10 | Documentation OpenAPI 3.0 générée et accessible (/dolibarr/swagger.yaml) |
| 11 | Backup automatisé du PVC (Velero) configuré |
| 12 | Logs structurés (JSON) publiés sur Loki avec champs module, env |
| 13 | Métriques de GC PHP et de pool de travailleurs vérifiées |
| 14 | Déploiement canary testé avec Argo Rollout et rollback fonctionnel |
| 15 | Version de Kubernetes ≥ v1.29 et Node OS à jour (Ubuntu 24.04 LTS) |
15. Exemple de script complet « Deploy‑Dolibarr.sh » (DevOps friendly)
#!/usr/bin/env bashset -euo pipefail
# --------------------------------------------------------------
# 1️⃣ Variables
# --------------------------------------------------------------
NAMESPACE="dolibarr"
HELM_RELEASE="dolibarr"
IMAGE_TAG="${1:-latest}"
REGISTRY="registry.gitlab.com/mycompany/dolibarr"
# --------------------------------------------------------------
# 2️⃣ Build & Push Docker image (local CI‑like step)
# --------------------------------------------------------------
docker buildx create --use >/dev/null 2>&1 || true
docker buildx build \
--push \
-t "$REGISTRY/dolibarr:$IMAGE_TAG" \
-t "$REGISTRY/dolibarr:latest" \
.
# --------------------------------------------------------------
# 3️⃣ Helm upgrade (GitOps style)
# --------------------------------------------------------------
helm upgrade --install "$HELM_RELEASE" ./helm/dolibarr \
--namespace "$NAMESPACE" --create-namespace \
--set image.tag="$IMAGE_TAG" \
--set env.DB_PASSWORD="${DB_PASSWORD:-$(openssl rand -hex 12)}" \
--set ingress.host="dolibarr.local.mycompany.com" \
--set ingress.tls.enabled=true \
--set ingress.tls.secretName="dolibarr-tls"
echo "✅ Dolibarr déployé avec succès en $NAMESPACE (image $IMAGE_TAG)"
16. Conclusion
En 2026, Dolibarr n’est plus seulement un ERP/CRM « lite » installé sur un serveur LAMP, mais un micro‑service déclaratif qui s’intègre parfaitement dans une chaîne DevOps moderne :
- Containerisation avec Docker multi‑stage, SBOM et healthcheck.
- CI/CD automatisé (GitLab CI / GitHub Actions) incluant lint, tests, scans de sécurité, build d’images et déploiement via Helm.
- GitOps (Argo CD ou Flux) assure la déclarativité et la synchronisation continue entre le repo Git et le cluster K8s.
- Observabilité complète (Prometheus, Grafana, Tempo, Loki) pour garantir disponibilité, performance et trouver du temps de réponse.
- Sécurité par défaut : images signées, secrets rotatifs, RBAC, posture de conformité.
- Déploiement canary avec Argo Rollout pour zero‑downtime et rollback immédiat.
Suivez ce tutoriel pas à pas, adaptez les valeurs à vos exigences métier (exemple : modules spécifiques à votre secteur) et vous disposerez d’un environnement Dolibarr résilient, scalable et prêt pour l’avenir dans le paysage DevOps de 2026.
Bonne implémentation ! 🚀
Sources & références (2025‑2026) – Documentation officielle Dolibarr 24.x, Helm chart community, Kubernetes 1.29 release notes, OpenTelemetry PHP SDK 2.6, cert‑manager 1.15.