{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "DevSecOps Documentation & Blog",
  "home_page_url": "https://www.stephane-robert.info",
  "feed_url": "https://www.stephane-robert.info/feed.json",
  "description": "Documentation technique DevSecOps et articles de blog - Kubernetes, Docker, Terraform, CI/CD et plus",
  "icon": "https://www.stephane-robert.info/favicon.svg",
  "favicon": "https://www.stephane-robert.info/favicon.ico",
  "language": "fr",
  "authors": [
    {
      "name": "Stéphane Robert",
      "url": "https://www.stephane-robert.info"
    }
  ],
  "items": [
    {
      "id": "https://www.stephane-robert.info/docs/comment-lire/",
      "url": "https://www.stephane-robert.info/docs/comment-lire/",
      "title": "Utiliser le site au quotidien : guides, labs, quiz, signalements",
      "summary": "Les gestes du quotidien sur le site : suivre une leçon, lire un guide, jouer un lab DSOXLab, importer ses résultats, passer un quiz, signaler une erreur.",
      "content_text": "Les gestes du quotidien sur le site : suivre une leçon, lire un guide, jouer un lab DSOXLab, importer ses résultats, passer un quiz, signaler une erreur.",
      "date_published": "2026-01-02T00:00:00.000Z",
      "date_modified": "2026-10-18T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/bdd/relationnelles/mysql/installation/",
      "url": "https://www.stephane-robert.info/docs/services/bdd/relationnelles/mysql/installation/",
      "title": "Installer MySQL sur Linux (Debian, Ubuntu, Rocky, RHEL)",
      "summary": "Installer MySQL 8.4 LTS depuis les dépôts officiels Oracle, initialiser l'instance, activer le service systemd et vérifier la connexion avec le client mysql.",
      "content_text": "Installer MySQL 8.4 LTS depuis les dépôts officiels Oracle, initialiser l'instance, activer le service systemd et vérifier la connexion avec le client mysql.",
      "date_published": "2026-04-13T00:00:00.000Z",
      "date_modified": "2026-10-18T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "mysql",
        "installation",
        "linux"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/",
      "title": "eBPF sur Linux : comprendre, tracer et durcir",
      "summary": "Introduction au module eBPF : ce qu'un programme fait dans le noyau, comment le tracer avec bpftrace, et comment réduire le risque qu'il ajoute à un serveur.",
      "content_text": "Introduction au module eBPF : ce qu'un programme fait dans le noyau, comment le tracer avec bpftrace, et comment réduire le risque qu'il ajoute à un serveur.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/co-re-btf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/co-re-btf/",
      "title": "CO-RE et BTF : rendre un programme eBPF portable",
      "summary": "CO-RE (Compile Once Run Everywhere) et BTF expliqués : pourquoi un programme eBPF cassait entre deux noyaux, et comment la portabilité est résolue aujourd'hui.",
      "content_text": "CO-RE (Compile Once Run Everywhere) et BTF expliqués : pourquoi un programme eBPF cassait entre deux noyaux, et comment la portabilité est résolue aujourd'hui.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/ebpf-c-est-quoi/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/ebpf-c-est-quoi/",
      "title": "eBPF, c'est quoi ? Programmes, hooks et vérificateur expliqués",
      "summary": "Comprendre eBPF sans jargon : ce qu'est un programme eBPF, où il s'accroche dans le noyau, le rôle du vérificateur et des maps, et pourquoi ça change tout.",
      "content_text": "Comprendre eBPF sans jargon : ce qu'est un programme eBPF, où il s'accroche dans le noyau, le rôle du vérificateur et des maps, et pourquoi ça change tout.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/maps-noyau-userspace/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/maps-noyau-userspace/",
      "title": "Les maps eBPF : communiquer entre le noyau et l'espace utilisateur",
      "summary": "Les maps eBPF expliquées : types (hash, array, ring buffer), comment un programme noyau partage des données avec l'espace utilisateur, exemples testés.",
      "content_text": "Les maps eBPF expliquées : types (hash, array, ring buffer), comment un programme noyau partage des données avec l'espace utilisateur, exemples testés.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/premier-programme/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/premier-programme/",
      "title": "Écrire et charger son premier programme eBPF",
      "summary": "Vérifier son noyau, tracer les exécutions du système avec bpftrace puis avec un programme C et BCC, et voir le vérificateur refuser une boucle infinie.",
      "content_text": "Vérifier son noyau, tracer les exécutions du système avec bpftrace puis avec un programme C et BCC, et voir le vérificateur refuser une boucle infinie.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/verificateur/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/comprendre/verificateur/",
      "title": "Le vérificateur eBPF : pourquoi votre programme est refusé",
      "summary": "Le vérificateur eBPF expliqué simplement : ce qu'il contrôle, pourquoi il refuse une boucle ou un accès mémoire, et comment lire ses messages d'erreur.",
      "content_text": "Le vérificateur eBPF expliqué simplement : ce qu'il contrôle, pourquoi il refuse une boucle ou un accès mémoire, et comment lire ses messages d'erreur.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/durcir-ebpf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/durcir-ebpf/",
      "title": "Durcir eBPF : limiter qui peut charger un programme",
      "summary": "Réduire la surface eBPF sur un serveur : unprivileged_bpf_disabled, CAP_BPF, durcissement du JIT, audit des programmes chargés. Réglages testés en VM.",
      "content_text": "Réduire la surface eBPF sur un serveur : unprivileged_bpf_disabled, CAP_BPF, durcissement du JIT, audit des programmes chargés. Réglages testés en VM.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/rootkits-ebpf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/rootkits-ebpf/",
      "title": "Rootkits eBPF : comprendre la menace et la détecter",
      "summary": "Ce qu'un rootkit eBPF peut faire (se cacher, backdoor passive, vol de données), les cas réels documentés et comment les détecter avec bpftool.",
      "content_text": "Ce qu'un rootkit eBPF peut faire (se cacher, backdoor passive, vol de données), les cas réels documentés et comment les détecter avec bpftool.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/surface-attaque-bpf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/durcissement/surface-attaque-bpf/",
      "title": "La surface d'attaque du sous-système eBPF",
      "summary": "Ce qu'eBPF coûte en risque : pourquoi charger un programme est un privilège sensible, ce qu'un attaquant peut viser et comment réduire la surface.",
      "content_text": "Ce qu'eBPF coûte en risque : pourquoi charger un programme est un privilège sensible, ce qu'un attaquant peut viser et comment réduire la surface.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/tracer/bcc-libbpf/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/tracer/bcc-libbpf/",
      "title": "BCC et libbpf : construire ses propres outils eBPF",
      "summary": "BCC et libbpf comparés : prototyper avec BCC, basculer vers libbpf et CO-RE pour des binaires portables, et choisir l'un ou l'autre selon le besoin.",
      "content_text": "BCC et libbpf comparés : prototyper avec BCC, basculer vers libbpf et CO-RE pour des binaires portables, et choisir l'un ou l'autre selon le besoin.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/tracer/bpftrace/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/ebpf/tracer/bpftrace/",
      "title": "bpftrace : tracer le noyau Linux en une ligne",
      "summary": "bpftrace en pratique : le langage, les sondes (kprobe, tracepoint, uprobe), l'agrégation, les histogrammes et les outils BCC prêts à l'emploi. Testé sur VM.",
      "content_text": "bpftrace en pratique : le langage, les sondes (kprobe, tracepoint, uprobe), l'agrégation, les histogrammes et les outils BCC prêts à l'emploi. Testé sur VM.",
      "date_published": "2026-07-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/",
      "url": "https://www.stephane-robert.info/docs/cloud/",
      "title": "Cloud Computing : de la théorie à la pratique",
      "summary": "Formation cloud indépendante du fournisseur : concepts, coûts, réseau, identités, résilience, puis pratique locale sans compte et parcours Scaleway ou OUTSCALE.",
      "content_text": "Formation cloud indépendante du fournisseur : concepts, coûts, réseau, identités, résilience, puis pratique locale sans compte et parcours Scaleway ou OUTSCALE.",
      "date_published": "2024-05-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "iaas",
        "devops",
        "formation"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/securite/iam/",
      "url": "https://www.stephane-robert.info/docs/cloud/securite/iam/",
      "title": "IAM : gérer les identités et permissions dans le cloud",
      "summary": "Gérez les identités cloud (IAM) : utilisateurs, groupes, policies et moindre privilège sur AWS, Azure, GCP ou Outscale pour sécuriser votre infrastructure.",
      "content_text": "Gérez les identités cloud (IAM) : utilisateurs, groupes, policies et moindre privilège sur AWS, Azure, GCP ou Outscale pour sécuriser votre infrastructure.",
      "date_published": "2026-01-12T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "iam",
        "securite",
        "formation"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/securite/pepin/comprendre-un-scan/",
      "url": "https://www.stephane-robert.info/docs/cloud/securite/pepin/comprendre-un-scan/",
      "title": "Conforme, en écart ou impossible à conclure : lire un résultat Pépin",
      "summary": "Les quatre statuts d'un résultat Pépin, la différence entre sévérité et confiance, la provenance d'un scan, et ce que l'outil n'a pas pu évaluer.",
      "content_text": "Les quatre statuts d'un résultat Pépin, la différence entre sévérité et confiance, la provenance d'un scan, et ce que l'outil n'a pas pu évaluer.",
      "date_published": "2026-09-09T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/confidentialite/",
      "url": "https://www.stephane-robert.info/docs/confidentialite/",
      "title": "Politique de confidentialité",
      "summary": "Ce que le site collecte (audience sans cookie, journaux du serveur, stockage dans le navigateur), pourquoi, combien de temps, et comment exercer vos droits.",
      "content_text": "Ce que le site collecte (audience sans cookie, journaux du serveur, stockage dans le navigateur), pourquoi, combien de temps, et comment exercer vos droits.",
      "date_published": "2026-10-15T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/cni-csi-cri/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/cni-csi-cri/",
      "title": "CNI, CSI et CRI, Les interfaces d'extension de Kubernetes",
      "summary": "Les trois interfaces qui rendent Kubernetes extensible : CNI pour le réseau, CSI pour le stockage, CRI pour les runtimes. Compétence du blueprint CKA.",
      "content_text": "Les trois interfaces qui rendent Kubernetes extensible : CNI pour le réseau, CSI pour le stockage, CRI pour les runtimes. Compétence du blueprint CKA.",
      "date_published": "2026-03-23T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/etcd/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/etcd/",
      "title": "etcd : la base clé/valeur du control plane Kubernetes",
      "summary": "Comprendre, diagnostiquer et opérer etcd dans Kubernetes : santé, TLS, sauvegarde et restauration avec etcdutl, compaction et défragmentation.",
      "content_text": "Comprendre, diagnostiquer et opérer etcd dans Kubernetes : santé, TLS, sauvegarde et restauration avec etcdutl, compaction et défragmentation.",
      "date_published": "2024-10-08T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/installation/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/installation/",
      "title": "Déployer un cluster Kubernetes en production",
      "summary": "Comparez les solutions de déploiement Kubernetes : kubeadm, Kubespray, Talos, RKE2, k0s, Cluster API et services managés. Guide de décision par cas d'usage.",
      "content_text": "Comparez les solutions de déploiement Kubernetes : kubeadm, Kubespray, Talos, RKE2, k0s, Cluster API et services managés. Guide de décision par cas d'usage.",
      "date_published": "2025-02-20T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/network-policies/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/network-policies/",
      "title": "Les NetworkPolicies Kubernetes",
      "summary": "Contrôlez les flux réseau entre Pods avec les NetworkPolicies Kubernetes : ingress, egress, DNS, ipBlock et diagnostic d'une politique qui ne passe pas.",
      "content_text": "Contrôlez les flux réseau entre Pods avec les NetworkPolicies Kubernetes : ingress, egress, DNS, ipBlock et diagnostic d'une politique qui ne passe pas.",
      "date_published": "2025-03-27T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/operer/preparer-maintenance-cluster-kubernetes/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/kubernetes/operer/preparer-maintenance-cluster-kubernetes/",
      "title": "Préparer une maintenance de cluster Kubernetes",
      "summary": "Workflow complet cordon, drain, uncordon pour maintenir un nœud Kubernetes sans interruption de service. PodDisruptionBudget, éviction et vérifications.",
      "content_text": "Workflow complet cordon, drain, uncordon pour maintenir un nœud Kubernetes sans interruption de service. PodDisruptionBudget, éviction et vérifications.",
      "date_published": "2026-03-27T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/commande-helm/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/commande-helm/",
      "title": "Maîtriser la commande Helm : référence complète",
      "summary": "Référence complète de la commande helm : install, upgrade, rollback, template, lint et toutes les options essentielles pour gérer vos déploiements Kubernetes.",
      "content_text": "Référence complète de la commande helm : install, upgrade, rollback, template, lint et toutes les options essentielles pour gérer vos déploiements Kubernetes.",
      "date_published": "2026-02-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/debug-validation/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/debug-validation/",
      "title": "Déboguer Helm : lint, template, --debug et diagnostics",
      "summary": "Diagnostiquer rapidement les pannes Helm : helm lint, helm template, rendu des manifests, erreurs classiques et méthode de triage.",
      "content_text": "Diagnostiquer rapidement les pannes Helm : helm lint, helm template, rendu des manifests, erreurs classiques et méthode de triage.",
      "date_published": "2026-02-01T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/install-releases/",
      "url": "https://www.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/install-releases/",
      "title": "Helm install : déployer et gérer vos releases",
      "summary": "Installer, mettre à jour et supprimer des applications Kubernetes avec helm install, upgrade et uninstall. Comprendre le cycle de vie des releases.",
      "content_text": "Installer, mettre à jour et supprimer des applications Kubernetes avec helm install, upgrade et uninstall. Comprendre le cycle de vie des releases.",
      "date_published": "2026-02-01T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/developper/autres-outils/build/task/",
      "url": "https://www.stephane-robert.info/docs/developper/autres-outils/build/task/",
      "title": "Task : le runner de tâches YAML pour DevOps",
      "summary": "Automatisez builds, tests et déploiements avec Task, le runner YAML : variables, dépendances, includes, boucles et cas d'usage DevOps.",
      "content_text": "Automatisez builds, tests et déploiements avec Task, le runner YAML : variables, dépendances, includes, boucles et cas d'usage DevOps.",
      "date_published": "2025-01-01T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/developper/programmation/python/fonctions/",
      "url": "https://www.stephane-robert.info/docs/developper/programmation/python/fonctions/",
      "title": "Fonctions Python : définir, paramètres et return (def)",
      "summary": "Définir une fonction Python avec def, passer des paramètres, retourner une valeur avec return, employer *args et **kwargs, avec exemples testés et FAQ.",
      "content_text": "Définir une fonction Python avec def, passer des paramètres, retourner une valeur avec return, employer *args et **kwargs, avec exemples testés et FAQ.",
      "date_published": "2024-09-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/developper/programmation/python/structures-collections/",
      "url": "https://www.stephane-robert.info/docs/developper/programmation/python/structures-collections/",
      "title": "Structures de contrôle et collections en Python",
      "summary": "Les conditions if, elif et else, les boucles for et while avec break et continue, et les listes, tuples et dictionnaires en Python, avec des exemples testés.",
      "content_text": "Les conditions if, elif et else, les boucles for et while avec break et continue, et les listes, tuples et dictionnaires en Python, avec des exemples testés.",
      "date_published": "2025-07-20T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/devops/expert/",
      "url": "https://www.stephane-robert.info/docs/devops/expert/",
      "title": "Niveau 3 : Expert DevSecOps et spécialisations",
      "summary": "Niveau 3 DevSecOps : maturité DSOMM, Platform Engineering, sécurité Kubernetes, policy as code et 7 spécialisations métiers pour prendre de la hauteur.",
      "content_text": "Niveau 3 DevSecOps : maturité DSOMM, Platform Engineering, sécurité Kubernetes, policy as code et 7 spécialisations métiers pour prendre de la hauteur.",
      "date_published": "2026-03-30T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "devsecops",
        "expert",
        "platform-engineering",
        "kubernetes-security",
        "gouvernance",
        "sre",
        "architecture"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/",
      "title": "OpenTofu : ce qui change vraiment par rapport à Terraform",
      "summary": "Module OpenTofu hors niveaux, limité aux écarts avec Terraform : migration, chiffrement natif, variables dès init, registry, OCI et refactors.",
      "content_text": "Module OpenTofu hors niveaux, limité aux écarts avec Terraform : migration, chiffrement natif, variables dès init, registry, OCI et refactors.",
      "date_published": "2024-09-22T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/chiffrer-state-plans/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/chiffrer-state-plans/",
      "title": "Chiffrer le state et les plans avec OpenTofu",
      "summary": "Mettez en place le chiffrement natif d'OpenTofu pour le state, les plans et terraform_remote_state, avec migration depuis un projet non chiffré.",
      "content_text": "Mettez en place le chiffrement natif d'OpenTofu pour le state, les plans et terraform_remote_state, avec migration depuis un projet non chiffré.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/migrer-depuis-terraform/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/migrer-depuis-terraform/",
      "title": "Migrer de Terraform vers OpenTofu sans casser votre workflow",
      "summary": "Passez de Terraform à OpenTofu de façon progressive : sauvegarde du state, vérification du code, premier init, plan de contrôle et mise à jour de la CI.",
      "content_text": "Passez de Terraform à OpenTofu de façon progressive : sauvegarde du state, vérification du code, premier init, plan de contrôle et mise à jour de la CI.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/refactor-import-moved-removed/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/refactor-import-moved-removed/",
      "title": "OpenTofu : refactor, import, moved et removed",
      "summary": "Faites évoluer une configuration OpenTofu sans recréations accidentelles grâce aux import blocks, moved blocks et removed blocks du langage.",
      "content_text": "Faites évoluer une configuration OpenTofu sans recréations accidentelles grâce aux import blocks, moved blocks et removed blocks du langage.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/registry-cli-oci/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/registry-cli-oci/",
      "title": "Registry OpenTofu, .tofurc et distribution OCI",
      "summary": "Comprenez comment OpenTofu installe providers et modules via registry.opentofu.org, la config CLI .tofurc, les miroirs et les sources OCI.",
      "content_text": "Comprenez comment OpenTofu installe providers et modules via registry.opentofu.org, la config CLI .tofurc, les miroirs et les sources OCI.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/variables-backend-sources-modules/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/opentofu/variables-backend-sources-modules/",
      "title": "OpenTofu : variables dans backend et sources de modules",
      "summary": "Utilisez variables et locals dans le backend et les sources de modules avec OpenTofu, et comprenez ce qui reste interdit pendant tofu init.",
      "content_text": "Utilisez variables et locals dans le backend et les sources de modules avec OpenTofu, et comprenez ce qui reste interdit pendant tofu init.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/",
      "title": "Formation Terraform : apprendre l'Infrastructure as Code",
      "summary": "Apprenez Terraform de A à Z : HCL, state, modules, environnements et HCP Terraform. Parcours pratique testé sur KVM, jusqu'aux certifications Associate.",
      "content_text": "Apprenez Terraform de A à Z : HCL, state, modules, environnements et HCP Terraform. Parcours pratique testé sur KVM, jusqu'aux certifications Associate.",
      "date_published": "2025-05-08T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/decouvrir/installer-terraform/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/decouvrir/installer-terraform/",
      "title": "Installer Terraform sur Linux et gérer les versions",
      "summary": "Installer Terraform sur Linux via mise, tfenv, ou les packages officiels HashiCorp. Vérifier la version et gérer plusieurs versions en parallèle.",
      "content_text": "Installer Terraform sur Linux via mise, tfenv, ou les packages officiels HashiCorp. Vérifier la version et gérer plusieurs versions en parallèle.",
      "date_published": "2026-03-31T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/decouvrir/terraform-vs-opentofu/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/decouvrir/terraform-vs-opentofu/",
      "title": "Terraform vs OpenTofu : quelles différences en pratique ?",
      "summary": "Comparaison concrète entre Terraform (HashiCorp/BSL) et OpenTofu (fork open source) : licence, compatibilité, fonctionnalités divergentes et comment choisir.",
      "content_text": "Comparaison concrète entre Terraform (HashiCorp/BSL) et OpenTofu (fork open source) : licence, compatibilité, fonctionnalités divergentes et comment choisir.",
      "date_published": "2026-03-31T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/ecrire-code/version-constraints-terraform/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terraform/ecrire-code/version-constraints-terraform/",
      "title": "Contraintes de version Terraform : opérateurs, lock file et pièges",
      "summary": "Les contraintes de version Terraform : les opérateurs, le pessimiste ~>, ce que le fichier de verrouillage suit vraiment, et le bloc terraform sans variable.",
      "content_text": "Les contraintes de version Terraform : les opérateurs, le pessimiste ~>, ce que le fichier de verrouillage suit vraiment, et le bloc terraform sans variable.",
      "date_published": "2026-04-01T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/",
      "title": "Terragrunt pour structurer Terraform et OpenTofu",
      "summary": "Comprenez ce que Terragrunt ajoute à Terraform ou OpenTofu, son vocabulaire (unit, live repo, include, stack) et le fil des leçons du module.",
      "content_text": "Comprenez ce que Terragrunt ajoute à Terraform ou OpenTofu, son vocabulaire (unit, live repo, include, stack) et le fil des leçons du module.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/catalogues-et-scaffold/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/catalogues-et-scaffold/",
      "title": "Terragrunt : catalogues, scaffold et industrialisation",
      "summary": "Utilisez scaffold pour générer un terragrunt.hcl depuis un module d'un dépôt catalogue, et catalog pour parcourir les modules, avec les garde-fous utiles.",
      "content_text": "Utilisez scaffold pour générer un terragrunt.hcl depuis un module d'un dépôt catalogue, et catalog pour parcourir les modules, avec les garde-fous utiles.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/centraliser-backend-provider/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/centraliser-backend-provider/",
      "title": "Centraliser backend et provider avec Terragrunt",
      "summary": "Utilisez root.hcl, remote_state et generate pour ne plus recopier la configuration du backend et du provider dans chaque unit Terragrunt.",
      "content_text": "Utilisez root.hcl, remote_state et generate pour ne plus recopier la configuration du backend et du provider dans chaque unit Terragrunt.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/debug-cache-hooks-logs/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/debug-cache-hooks-logs/",
      "title": "Déboguer Terragrunt : cache, chemins relatifs, hooks et logs",
      "summary": "Comprenez ce que Terragrunt exécute vraiment, localisez .terragrunt-cache, corrigez les chemins relatifs, écrivez des hooks et réglez les logs de debug.",
      "content_text": "Comprenez ce que Terragrunt exécute vraiment, localisez .terragrunt-cache, corrigez les chemins relatifs, écrivez des hooks et réglez les logs de debug.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/dependances-et-mock-outputs/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/dependances-et-mock-outputs/",
      "title": "Terragrunt : dépendances et mock_outputs",
      "summary": "Comprenez comment Terragrunt ordonne les units, lit leurs outputs et utilise mock_outputs pour qu'un plan passe avant le premier apply complet.",
      "content_text": "Comprenez comment Terragrunt ordonne les units, lit leurs outputs et utilise mock_outputs pour qu'un plan passe avant le premier apply complet.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/installer-terragrunt/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/installer-terragrunt/",
      "title": "Installer Terragrunt avec mise",
      "summary": "Installez Terragrunt 1.1.6 avec mise, vérifiez le binaire par sa somme SHA256 et comprenez pourquoi Terragrunt a aussi besoin d'OpenTofu ou de Terraform.",
      "content_text": "Installez Terragrunt 1.1.6 avec mise, vérifiez le binaire par sa somme SHA256 et comprenez pourquoi Terragrunt a aussi besoin d'OpenTofu ou de Terraform.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/pourquoi-utiliser-terragrunt/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/pourquoi-utiliser-terragrunt/",
      "title": "Pourquoi utiliser Terragrunt avec Terraform ou OpenTofu ?",
      "summary": "Identifiez quand Terragrunt apporte une vraie valeur pour structurer vos environnements, vos dépôts et vos dépendances sans ajouter une complexité gratuite.",
      "content_text": "Identifiez quand Terragrunt apporte une vraie valeur pour structurer vos environnements, vos dépôts et vos dépendances sans ajouter une complexité gratuite.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/premier-projet-terragrunt/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/premier-projet-terragrunt/",
      "title": "Premier projet Terragrunt : votre premier unit",
      "summary": "Créez votre premier fichier terragrunt.hcl, lancez un unit minimal avec apply puis destroy, et comprenez ce que Terragrunt ajoute à OpenTofu ou Terraform.",
      "content_text": "Créez votre premier fichier terragrunt.hcl, lancez un unit minimal avec apply puis destroy, et comprenez ce que Terragrunt ajoute à OpenTofu ou Terraform.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/run-all-run-queue-filtres/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/run-all-run-queue-filtres/",
      "title": "Terragrunt : run --all, run queue et filtres",
      "summary": "Pilotez plusieurs units Terragrunt avec run --all, lisez la run queue et ciblez seulement les dossiers utiles avec --filter, sans surprise en CI.",
      "content_text": "Pilotez plusieurs units Terragrunt avec run --all, lisez la run queue et ciblez seulement les dossiers utiles avec --filter, sans surprise en CI.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/stacks-implicites-explicites/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/stacks-implicites-explicites/",
      "title": "Terragrunt : stacks implicites ou explicites ?",
      "summary": "Comparez stack implicite et stack explicite dans Terragrunt sur un même module, repérez chacune dans un live repo et choisissez la structure adaptée.",
      "content_text": "Comparez stack implicite et stack explicite dans Terragrunt sur un même module, repérez chacune dans un live repo et choisissez la structure adaptée.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/structurer-live-repo/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/structurer-live-repo/",
      "title": "Structurer un live repo Terragrunt avec root.hcl et _env",
      "summary": "Organisez un live repo Terragrunt lisible avec root.hcl, un dossier _env et plusieurs units, sans dupliquer vos inputs ni vos conventions de base.",
      "content_text": "Organisez un live repo Terragrunt lisible avec root.hcl, un dossier _env et plusieurs units, sans dupliquer vos inputs ni vos conventions de base.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/terragrunt-cicd/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/terragrunt-cicd/",
      "title": "Terragrunt en CI/CD : cibler, limiter le blast radius, promouvoir",
      "summary": "Utilisez Terragrunt en CI/CD sans tout appliquer : exécution non interactive, ciblage par filtre, code de retour de plan, rapport et promotion.",
      "content_text": "Utilisez Terragrunt en CI/CD sans tout appliquer : exécution non interactive, ciblage par filtre, code de retour de plan, rapport et promotion.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/terragrunt-stack-hcl/",
      "url": "https://www.stephane-robert.info/docs/infra-as-code/provisionnement/terragrunt/terragrunt-stack-hcl/",
      "title": "Utiliser terragrunt.stack.hcl pour une stack explicite",
      "summary": "Générez plusieurs units depuis un terragrunt.stack.hcl avec stack generate, réglez les chemins source et pilotez la stack avec stack run, output et clean.",
      "content_text": "Générez plusieurs units depuis un terragrunt.stack.hcl avec stack generate, réglez les chemins source et pilotez la stack avec stack run, output et clean.",
      "date_published": "2026-04-02T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/",
      "url": "https://www.stephane-robert.info/docs/mlops/",
      "title": "MLOps : industrialiser le cycle de vie du Machine Learning",
      "summary": "Le MLOps industrialise le cycle de vie d'un modèle ML, de l'entraînement au déploiement et à la surveillance : définition, MLOps vs DevOps, cycle de vie.",
      "content_text": "Le MLOps industrialise le cycle de vie d'un modèle ML, de l'entraînement au déploiement et à la surveillance : définition, MLOps vs DevOps, cycle de vie.",
      "date_published": "2025-10-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/conda/",
      "url": "https://www.stephane-robert.info/docs/mlops/conda/",
      "title": "Conda et Miniconda : environnements Python isolés",
      "summary": "Créez des environnements Python isolés et reproductibles avec conda : Miniforge ou Miniconda, installation vérifiée, versions épinglées, export et recréation.",
      "content_text": "Créez des environnements Python isolés et reproductibles avec conda : Miniforge ou Miniconda, installation vérifiée, versions épinglées, export et recréation.",
      "date_published": "2025-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/data-science/",
      "url": "https://www.stephane-robert.info/docs/mlops/data-science/",
      "title": "Data science : définition, disciplines et métiers",
      "summary": "La data science extrait de la valeur des données : statistiques, machine learning et ingénierie. Définition, disciplines, cycle de vie et différence avec le ML.",
      "content_text": "La data science extrait de la valeur des données : statistiques, machine learning et ingénierie. Définition, disciplines, cycle de vie et différence avec le ML.",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/epreuve-reproduire/",
      "url": "https://www.stephane-robert.info/docs/mlops/epreuve-reproduire/",
      "title": "Épreuve : rendre un modèle reproductible et traçable",
      "summary": "L'épreuve de fin du niveau M1 « Reproduire » : versionner les données, rejouer le pipeline sur un clone vierge, tracer un run, enregistrer le modèle, le tester.",
      "content_text": "L'épreuve de fin du niveau M1 « Reproduire » : versionner les données, rejouer le pipeline sur un clone vierge, tracer un run, enregistrer le modèle, le tester.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "mlops",
        "reproduire"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/jupyter/",
      "url": "https://www.stephane-robert.info/docs/mlops/jupyter/",
      "title": "Jupyter : qu'est-ce que c'est et comment ça marche",
      "summary": "Jupyter, écosystème de notebooks mêlant code, texte et visualisations. Définition, architecture (kernel, .ipynb), écosystème et Jupyter contre JupyterLab.",
      "content_text": "Jupyter, écosystème de notebooks mêlant code, texte et visualisations. Définition, architecture (kernel, .ipynb), écosystème et Jupyter contre JupyterLab.",
      "date_published": "2025-10-13T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/jupyter/premier-notebook/",
      "url": "https://www.stephane-robert.info/docs/mlops/jupyter/premier-notebook/",
      "title": "Jupyter Notebook : créer et lancer son premier notebook",
      "summary": "Lancer Jupyter dans un environnement conda épinglé, créer un notebook, exécuter des cellules de code et de texte, puis vérifier qu'il s'exécute de haut en bas.",
      "content_text": "Lancer Jupyter dans un environnement conda épinglé, créer un notebook, exécuter des cellules de code et de texte, puis vérifier qu'il s'exécute de haut en bas.",
      "date_published": "2025-10-23T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/kubeflow/",
      "url": "https://www.stephane-robert.info/docs/mlops/kubeflow/",
      "title": "Kubeflow : orchestrer des pipelines ML sur Kubernetes",
      "summary": "Kubeflow, plateforme MLOps sur Kubernetes : pipelines, entraînement distribué, tuning et serving. Définition, composants et pipeline kfp testé.",
      "content_text": "Kubeflow, plateforme MLOps sur Kubernetes : pipelines, entraînement distribué, tuning et serving. Définition, composants et pipeline kfp testé.",
      "date_published": "2025-10-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/",
      "title": "Machine learning : définition et formation pour débuter",
      "summary": "Le machine learning fait apprendre un modèle à partir de données. Définition, usages et formation pour débuter : conda, Jupyter, régression, clustering.",
      "content_text": "Le machine learning fait apprendre un modèle à partir de données. Définition, usages et formation pour débuter : conda, Jupyter, régression, clustering.",
      "date_published": "2025-10-08T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/clustering/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/clustering/",
      "title": "Clustering : partitionner des données en machine learning",
      "summary": "Le clustering regroupe des données similaires sans étiquettes. Définition, k-means avec scikit-learn, choix du nombre de clusters et algorithmes.",
      "content_text": "Le clustering regroupe des données similaires sans étiquettes. Définition, k-means avec scikit-learn, choix du nombre de clusters et algorithmes.",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/deep-learning/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/deep-learning/",
      "title": "Deep learning : réseaux de neurones et différence avec le ML",
      "summary": "Le deep learning utilise des réseaux de neurones profonds pour apprendre sur des images, du son et du texte. Définition, fonctionnement, ML ou DL, frameworks.",
      "content_text": "Le deep learning utilise des réseaux de neurones profonds pour apprendre sur des images, du son et du texte. Définition, fonctionnement, ML ou DL, frameworks.",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/parcours/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/parcours/",
      "title": "Parcours Machine learning : programme et suivi",
      "summary": "Programme de la formation Machine learning : poste conda et Jupyter, apprentissage supervisé et non supervisé, deep learning, avec suivi de progression.",
      "content_text": "Programme de la formation Machine learning : poste conda et Jupyter, apprentissage supervisé et non supervisé, deep learning, avec suivi de progression.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/pytorch/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/pytorch/",
      "title": "PyTorch : entraîner un réseau de neurones sur CPU",
      "summary": "Installez PyTorch 2.14.1 sur CPU, entraînez un réseau de neurones sur deux lunes entrelacées et tracez avec matplotlib la frontière non linéaire apprise.",
      "content_text": "Installez PyTorch 2.14.1 sur CPU, entraînez un réseau de neurones sur deux lunes entrelacées et tracez avec matplotlib la frontière non linéaire apprise.",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/regression-lineaire/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/regression-lineaire/",
      "title": "Régression linéaire : définition et exemple en Python",
      "summary": "La régression linéaire prédit une valeur en modélisant la relation entre variables. Définition, moindres carrés, exemple scikit-learn et évaluation R².",
      "content_text": "La régression linéaire prédit une valeur en modélisant la relation entre variables. Définition, moindres carrés, exemple scikit-learn et évaluation R².",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/machine-learning/types-apprentissage/",
      "url": "https://www.stephane-robert.info/docs/mlops/machine-learning/types-apprentissage/",
      "title": "Types d'apprentissage automatique : supervisé et non supervisé",
      "summary": "Les trois familles du machine learning : apprentissage supervisé, non supervisé et par renforcement. Définitions, exemples, algorithmes et comment choisir.",
      "content_text": "Les trois familles du machine learning : apprentissage supervisé, non supervisé et par renforcement. Définitions, exemples, algorithmes et comment choisir.",
      "date_published": "2026-07-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/mlflow/",
      "url": "https://www.stephane-robert.info/docs/mlops/mlflow/",
      "title": "Serveur MLflow : retrouver le run qui a produit un modèle",
      "summary": "Branchez vos entraînements sur un serveur MLflow (PostgreSQL, S3), journalisez commit et données, puis retrouvez le run qui a produit un modèle.",
      "content_text": "Branchez vos entraînements sur un serveur MLflow (PostgreSQL, S3), journalisez commit et données, puis retrouvez le run qui a produit un modèle.",
      "date_published": "2025-10-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/monitoring/",
      "url": "https://www.stephane-robert.info/docs/mlops/monitoring/",
      "title": "Monitoring ML : surveiller les modèles et détecter le drift",
      "summary": "Surveiller un modèle ML en production : ce que le drift dit vraiment, les labels retardés, et la chaîne de décision du signal au rollback. Mesuré.",
      "content_text": "Surveiller un modèle ML en production : ce que le drift dit vraiment, les labels retardés, et la chaîne de décision du signal au rollback. Mesuré.",
      "date_published": "2025-10-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/parcours/",
      "url": "https://www.stephane-robert.info/docs/mlops/parcours/",
      "title": "Parcours MLOps : programme et suivi",
      "summary": "Programme de la formation MLOps : DVC, pipeline reproductible et MLflow, Kubeflow en concept, surveillance du drift et rollback, avec suivi de progression.",
      "content_text": "Programme de la formation MLOps : DVC, pipeline reproductible et MLflow, Kubeflow en concept, surveillance du drift et rollback, avec suivi de progression.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/pipeline-dvc/",
      "url": "https://www.stephane-robert.info/docs/mlops/pipeline-dvc/",
      "title": "Pipeline DVC : rejouer un entraînement ML à l'identique",
      "summary": "Décrivez génération des données et entraînement dans dvc.yaml, rejouez-les avec dvc repro et vérifiez qu'un paramètre modifié ne relance que l'étape concernée.",
      "content_text": "Décrivez génération des données et entraînement dans dvc.yaml, rejouez-les avec dvc repro et vérifiez qu'un paramètre modifié ne relance que l'étape concernée.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/projet-reproductible/",
      "url": "https://www.stephane-robert.info/docs/mlops/projet-reproductible/",
      "title": "Projet ML reproductible : graine, uv.lock et Git",
      "summary": "Obtenez deux fois les mêmes métriques : repérez les quatre sources de variation d'un entraînement, fixez la graine, verrouillez l'environnement avec uv.",
      "content_text": "Obtenez deux fois les mêmes métriques : repérez les quatre sources de variation d'un entraînement, fixez la graine, verrouillez l'environnement avec uv.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/registre-modeles/",
      "url": "https://www.stephane-robert.info/docs/mlops/registre-modeles/",
      "title": "Registre de modèles MLflow : versions, alias et lignée",
      "summary": "Enregistrez vos modèles dans le registre MLflow, posez les alias champion et challenger, chargez par alias et remontez à la lignée du modèle.",
      "content_text": "Enregistrez vos modèles dans le registre MLflow, posez les alias champion et challenger, chargez par alias et remontez à la lignée du modèle.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/tests-modele/",
      "url": "https://www.stephane-robert.info/docs/mlops/tests-modele/",
      "title": "Tester données et modèle ML avec pytest avant promotion",
      "summary": "Écrivez une suite pytest qui contrôle schéma et bornes des données, un seuil de RMSE versionné et la comparaison au champion, pour refuser un modèle moins bon.",
      "content_text": "Écrivez une suite pytest qui contrôle schéma et bornes des données, un seuil de RMSE versionné et la comparaison au champion, pour refuser un modèle moins bon.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/mlops/versionner-donnees-dvc/",
      "url": "https://www.stephane-robert.info/docs/mlops/versionner-donnees-dvc/",
      "title": "DVC : versionner ses données avec un stockage S3",
      "summary": "Versionnez un jeu de données hors de Git avec DVC et un stockage S3 : suivre le fichier, pousser vers le bucket, cloner et retrouver chaque version.",
      "content_text": "Versionnez un jeu de données hors de Git avec DVC et un stockage S3 : suivre le fichier, pousser vers le bucket, cloner et retrouver chaque version.",
      "date_published": "2026-10-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/pipeline-cicd/",
      "url": "https://www.stephane-robert.info/docs/pipeline-cicd/",
      "title": "Pipelines CI/CD : le modèle avant l'outil",
      "summary": "Introduction aux pipelines CI/CD sans outil imposé : déclencheurs, étapes dans le dépôt, artefact promu entre environnements et risques, sur une forge locale.",
      "content_text": "Introduction aux pipelines CI/CD sans outil imposé : déclencheurs, étapes dans le dépôt, artefact promu entre environnements et risques, sur une forge locale.",
      "date_published": "2025-12-23T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/pipeline-cicd/fondamentaux/etapes-et-declencheurs/",
      "url": "https://www.stephane-robert.info/docs/pipeline-cicd/fondamentaux/etapes-et-declencheurs/",
      "title": "Étapes et déclencheurs d'une pipeline CI/CD",
      "summary": "Mettez lint, tests et build dans le dépôt en cibles make, faites-les orchestrer par une pipeline, choisissez ses déclencheurs et lisez un échec pour le rejouer.",
      "content_text": "Mettez lint, tests et build dans le dépôt en cibles make, faites-les orchestrer par une pipeline, choisissez ses déclencheurs et lisez un échec pour le rejouer.",
      "date_published": "2026-10-13T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "pipeline-cicd",
        "fondamentaux"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/pipeline-cicd/gitlab/outils/plumber/",
      "url": "https://www.stephane-robert.info/docs/pipeline-cicd/gitlab/outils/plumber/",
      "title": "Plumber : sécuriser vos pipelines GitLab CI et GitHub Actions",
      "summary": "Scannez la sécurité de vos pipelines GitLab CI/CD et GitHub Actions avec Plumber : premier scan, pinning des actions par SHA, PBOM et intégration CI.",
      "content_text": "Scannez la sécurité de vos pipelines GitLab CI/CD et GitHub Actions avec Plumber : premier scan, pinning des actions par SHA, PBOM et intégration CI.",
      "date_published": "2026-02-04T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/securiser/durcissement/",
      "url": "https://www.stephane-robert.info/docs/securiser/durcissement/",
      "title": "Durcir les configurations Linux",
      "summary": "Formation Durcissement Linux : réduire la surface d'attaque d'un serveur avec ANSSI-BP-028 et CIS, de SSH et sudo au noyau, à SELinux et AppArmor.",
      "content_text": "Formation Durcissement Linux : réduire la surface d'attaque d'un serveur avec ANSSI-BP-028 et CIS, de SSH et sudo au noyau, à SELinux et AppArmor.",
      "date_published": "2025-12-05T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/securiser/durcissement/auditd/",
      "url": "https://www.stephane-robert.info/docs/securiser/durcissement/auditd/",
      "title": "auditd : journaliser et tracer un serveur Linux",
      "summary": "Installer auditd, déployer des règles persistantes (identité, sudo, commandes root, modules noyau) et retrouver qui a fait quoi avec ausearch et aureport.",
      "content_text": "Installer auditd, déployer des règles persistantes (identité, sudo, commandes root, modules noyau) et retrouver qui a fait quoi avec ausearch et aureport.",
      "date_published": "2026-06-25T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "auditd",
        "linux",
        "durcissement",
        "audit",
        "securite"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/securiser/menaces/gtfobins/",
      "url": "https://www.stephane-robert.info/docs/securiser/menaces/gtfobins/",
      "title": "GTFObins : détecter et bloquer les binaires Linux exploitables",
      "summary": "Apprenez à identifier les binaires Unix détournables avec GTFObins, testez 5 techniques d'exploitation et durcissez vos serveurs Linux.",
      "content_text": "Apprenez à identifier les binaires Unix détournables avec GTFObins, testez 5 techniques d'exploitation et durcissez vos serveurs Linux.",
      "date_published": "2024-12-03T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/securiser/os-immuable/",
      "url": "https://www.stephane-robert.info/docs/securiser/os-immuable/",
      "title": "Systèmes d'exploitation immuables",
      "summary": "Un OS immuable change le système par remplacement et non par retouche : mécanisme, familles d'OS, limites réelles et pièges d'une première mise en oeuvre.",
      "content_text": "Un OS immuable change le système par remplacement et non par retouche : mécanisme, familles d'OS, limites réelles et pièges d'une première mise en oeuvre.",
      "date_published": "2025-12-15T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/securiser/os-immuable/nixos/configuration/",
      "url": "https://www.stephane-robert.info/docs/securiser/os-immuable/nixos/configuration/",
      "title": "NixOS : durcir par déclaration",
      "summary": "Traduisez en NixOS le durcissement de la formation (sysctl, montages, SSH, PAM, pare-feu), puis auditd et fail2ban, avec nixos-rebuild test avant switch.",
      "content_text": "Traduisez en NixOS le durcissement de la formation (sysctl, montages, SSH, PAM, pare-feu), puis auditd et fail2ban, avec nixos-rebuild test avant switch.",
      "date_published": "2026-04-14T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/devops/gitlab/configuration-initiale/",
      "url": "https://www.stephane-robert.info/docs/services/devops/gitlab/configuration-initiale/",
      "title": "Configuration initiale de GitLab après l'installation",
      "summary": "Sécurisez et configurez GitLab dès l'installation : SMTP, inscriptions publiques, SSH, sauvegardes automatiques et vérifications essentielles.",
      "content_text": "Sécurisez et configurez GitLab dès l'installation : SMTP, inscriptions publiques, SSH, sauvegardes automatiques et vérifications essentielles.",
      "date_published": "2024-08-20T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/devops/gitlab/presentation/",
      "url": "https://www.stephane-robert.info/docs/services/devops/gitlab/presentation/",
      "title": "GitLab : présentation de la plateforme DevSecOps",
      "summary": "Découvrez GitLab, la plateforme DevSecOps open-source : formats de déploiement, fonctionnalités clés, technologie, éditions et tarifs.",
      "content_text": "Découvrez GitLab, la plateforme DevSecOps open-source : formats de déploiement, fonctionnalités clés, technologie, éditions et tarifs.",
      "date_published": "2024-08-19T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/devops/gitlab/sauvegarder-restaurer/",
      "url": "https://www.stephane-robert.info/docs/services/devops/gitlab/sauvegarder-restaurer/",
      "title": "Sauvegarder et restaurer GitLab",
      "summary": "Mettez en place une stratégie de backup fiable pour GitLab : backup complet, stockage objet, restauration testée et planification cron.",
      "content_text": "Mettez en place une stratégie de backup fiable pour GitLab : backup complet, stockage objet, restauration testée et planification cron.",
      "date_published": "2024-08-21T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/devops/gitlab/upgrade/",
      "url": "https://www.stephane-robert.info/docs/services/devops/gitlab/upgrade/",
      "title": "Mettre à jour GitLab self-managed",
      "summary": "Procédure de mise à jour GitLab CE/EE : mises à jour mineures en une commande, mises à jour majeures avec chemin d'upgrade officiel, et rollback si nécessaire.",
      "content_text": "Procédure de mise à jour GitLab CE/EE : mises à jour mineures en une commande, mises à jour majeures avec chemin d'upgrade officiel, et rollback si nécessaire.",
      "date_published": "2024-08-22T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/stockage/",
      "url": "https://www.stephane-robert.info/docs/services/stockage/",
      "title": "Stockage distribué : comprendre les concepts et choisir sa solution",
      "summary": "Types de stockage (objet, fichiers, blocs), réplication, erasure coding, cohérence : tout comprendre avant de choisir sa solution open source.",
      "content_text": "Types de stockage (objet, fichiers, blocs), réplication, erasure coding, cohérence : tout comprendre avant de choisir sa solution open source.",
      "date_published": "2025-05-06T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/stockage/comparatif-s3/",
      "url": "https://www.stephane-robert.info/docs/services/stockage/comparatif-s3/",
      "title": "Alternatives à MinIO : comparatif des stockages objet S3 auto-hébergés",
      "summary": "MinIO archivé, fork SILO, SeaweedFS, RustFS, Garage, Ceph RGW : versioning, WORM, OIDC et droits par préfixe comparés en lab (juillet et octobre 2026).",
      "content_text": "MinIO archivé, fork SILO, SeaweedFS, RustFS, Garage, Ceph RGW : versioning, WORM, OIDC et droits par préfixe comparés en lab (juillet et octobre 2026).",
      "date_published": "2026-07-17T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/services/stockage/minio/",
      "url": "https://www.stephane-robert.info/docs/services/stockage/minio/",
      "title": "MinIO et son fork SILO : stockage S3, chiffrement, WORM et OIDC",
      "summary": "MinIO communautaire est archivé (avril 2026) : ne démarrez plus dessus. Maintenir l'existant avec le fork SILO, ou migrer vers une autre cible S3.",
      "content_text": "MinIO communautaire est archivé (avril 2026) : ne démarrez plus dessus. Maintenir l'existant avec le fork SILO, ou migrer vers une autre cible S3.",
      "date_published": "2024-08-19T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/post/xpipe-fichiers-terminal/",
      "url": "https://www.stephane-robert.info/post/xpipe-fichiers-terminal/",
      "title": "X-Pipe simplifie vos connexions shell",
      "summary": "Découvrez comment X-Pipe simplifie la gestion des connexions shell et des fichiers à distance pour les administrateurs systèmes DevOps.",
      "content_text": "Découvrez comment X-Pipe simplifie la gestion des connexions shell et des fichiers à distance pour les administrateurs systèmes DevOps.",
      "date_published": "2024-08-19T00:00:00.000Z",
      "date_modified": "2026-10-17T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "blog"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/distributions/almalinux-10/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/distributions/almalinux-10/",
      "title": "AlmaLinux 10 : ce qui change pour un serveur",
      "summary": "AlmaLinux 10 mesuré en VM : 10 ans de sécurité gratuits, modularité supprimée, piège x86-64-v3 dans les VM et variante v2, ce que couvre AppStream.",
      "content_text": "AlmaLinux 10 mesuré en VM : 10 ans de sécurité gratuits, modularité supprimée, piège x86-64-v3 dans les VM et variante v2, ce que couvre AppStream.",
      "date_published": "2026-07-13T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "almalinux",
        "linux",
        "dnf",
        "selinux",
        "rhel"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/admin-serveurs/linux/reseau/diagnostic/",
      "url": "https://www.stephane-robert.info/docs/admin-serveurs/linux/reseau/diagnostic/",
      "title": "Diagnostiquer un problème réseau sous Linux",
      "summary": "Identifier l'origine d'un incident réseau sur Linux : interface, IP, route, DNS et connectivité, avec les outils modernes ip, ss, dig et mtr.",
      "content_text": "Identifier l'origine d'un incident réseau sur Linux : interface, IP, route, DNS et connectivité, avec les outils modernes ip, ss, dig et mtr.",
      "date_published": "2025-03-24T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "linux",
        "reseau",
        "depannage"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/architecture/",
      "url": "https://www.stephane-robert.info/docs/cloud/architecture/",
      "title": "Réseau cloud : de l'adressage au filtrage par défaut",
      "summary": "Concevoir le réseau privé d'un environnement cloud : adressage, réseau régional sur plusieurs zones, routes, sortie NAT et filtrage qui refuse par défaut.",
      "content_text": "Concevoir le réseau privé d'un environnement cloud : adressage, réseau régional sur plusieurs zones, routes, sortie NAT et filtrage qui refuse par défaut.",
      "date_published": "2026-01-12T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "reseau",
        "vpc",
        "formation",
        "architecture"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/architecture/01-rappels-ip-cidr-routage-dns-nat/",
      "url": "https://www.stephane-robert.info/docs/cloud/architecture/01-rappels-ip-cidr-routage-dns-nat/",
      "title": "Rappels réseau : IP, CIDR, routage, DNS et NAT",
      "summary": "Les bases réseau avant de créer un VPC : adressage IP, notation CIDR, routage, résolution DNS et NAT, avec les chiffres propres au cloud.",
      "content_text": "Les bases réseau avant de créer un VPC : adressage IP, notation CIDR, routage, résolution DNS et NAT, avec les chiffres propres au cloud.",
      "date_published": "2026-01-16T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "reseau",
        "fondamentaux",
        "ip",
        "cidr",
        "dns",
        "nat",
        "formation"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/architecture/02-vpc-vnet-et-sous-reseaux/",
      "url": "https://www.stephane-robert.info/docs/cloud/architecture/02-vpc-vnet-et-sous-reseaux/",
      "title": "VPC, VNet et sous-réseaux : créer votre réseau privé cloud",
      "summary": "Créez un réseau privé virtuel (VPC, VNet, Net), découpez-le en sous-réseaux publics et privés, choisissez vos plages CIDR. Exemples : AWS, Scaleway, OUTSCALE.",
      "content_text": "Créez un réseau privé virtuel (VPC, VNet, Net), découpez-le en sous-réseaux publics et privés, choisissez vos plages CIDR. Exemples : AWS, Scaleway, OUTSCALE.",
      "date_published": "2026-01-16T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "reseau",
        "vpc",
        "vnet",
        "subnet",
        "formation",
        "aws",
        "azure",
        "gcp",
        "outscale",
        "ovhcloud",
        "scaleway"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/architecture/08-ipv6/",
      "url": "https://www.stephane-robert.info/docs/cloud/architecture/08-ipv6/",
      "title": "IPv6 dans le cloud : lire, filtrer et décider",
      "summary": "Lire une adresse IPv6, repérer ce qui est déjà actif sur vos réseaux cloud, filtrer les deux protocoles et décider s'il faut l'activer sur votre projet.",
      "content_text": "Lire une adresse IPv6, repérer ce qui est déjà actif sur vos réseaux cloud, filtrer les deux protocoles et décider s'il faut l'activer sur votre projet.",
      "date_published": "2026-01-16T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "reseau",
        "ipv6",
        "formation"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/aws/",
      "url": "https://www.stephane-robert.info/docs/cloud/aws/",
      "title": "Découvrir Amazon Web Services (AWS)",
      "summary": "Retrouver chez AWS les notions de la formation Cloud : comptes et Organizations, régions et zones, IAM, VPC, S3 et EC2, puis un premier pas avec l'AWS CLI.",
      "content_text": "Retrouver chez AWS les notions de la formation Cloud : comptes et Organizations, régions et zones, IAM, VPC, S3 et EC2, puis un premier pas avec l'AWS CLI.",
      "date_published": "2025-04-12T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "aws",
        "amazon"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/aws/aws-cli/",
      "url": "https://www.stephane-robert.info/docs/cloud/aws/aws-cli/",
      "title": "AWS CLI : premiers pas et commandes essentielles",
      "summary": "Installez AWS CLI, connectez-vous à votre compte et lancez vos premières commandes en 20 minutes. Guide progressif : vérifier → lister → filtrer → automatiser.",
      "content_text": "Installez AWS CLI, connectez-vous à votre compte et lancez vos premières commandes en 20 minutes. Guide progressif : vérifier → lister → filtrer → automatiser.",
      "date_published": "2024-10-03T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [],
      "language": "fr",
      "_custom": {
        "type": "doc"
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/azure/",
      "url": "https://www.stephane-robert.info/docs/cloud/azure/",
      "title": "Découvrir Microsoft Azure",
      "summary": "Retrouver chez Azure les notions de la formation Cloud : abonnements, zones numérotées, Entra ID et RBAC, VNet, puis un premier pas avec la CLI az.",
      "content_text": "Retrouver chez Azure les notions de la formation Cloud : abonnements, zones numérotées, Entra ID et RBAC, VNet, puis un premier pas avec la CLI az.",
      "date_published": "2025-04-12T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "azure",
        "microsoft"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "debutant",
          "intermediaire"
        ]
      }
    },
    {
      "id": "https://www.stephane-robert.info/docs/cloud/fondamentaux/automation-orchestration-concepts/",
      "url": "https://www.stephane-robert.info/docs/cloud/fondamentaux/automation-orchestration-concepts/",
      "title": "Automation et orchestration cloud : concepts, différence et patterns",
      "summary": "Distinguer automation, orchestration et choreography. Comprendre pourquoi le cloud rend possible le DevOps natif et identifier les outils 2026.",
      "content_text": "Distinguer automation, orchestration et choreography. Comprendre pourquoi le cloud rend possible le DevOps natif et identifier les outils 2026.",
      "date_published": "2026-04-28T00:00:00.000Z",
      "date_modified": "2026-10-16T00:00:00.000Z",
      "authors": [
        {
          "name": "Stéphane Robert"
        }
      ],
      "tags": [
        "cloud",
        "fondamentaux",
        "automation",
        "orchestration",
        "devops",
        "formation"
      ],
      "language": "fr",
      "_custom": {
        "type": "doc",
        "audience": [
          "intermediaire",
          "avance"
        ]
      }
    }
  ]
}