Fondamentaux de la documentation technique¶
Pourquoi centraliser la documentation¶
La documentation technique d'une DSI est souvent dispersee entre des wikis internes, des fichiers Confluence, des README Git, des partages réseau et des emails. Cette dispersion a un coût concret : retrouver une procedure, vérifier la date de mise à jour d'un document ou auditer les accès devient une tâche manuelle et peu fiable.
Centraliser la documentation dans un service dedie répond a quatre besoins fondamentaux :
- Découverte — un seul point d'entree, une navigation coherente, un moteur de recherche commun
- Cohérence — templates uniformes, conventions de nommage communes, style homogène
- Gouvernance — qui a écrit quoi, qui peut modifier, circuit de validation
- Auditabilite — historique complet des modifications, attributable a un auteur, réversible
| Critère | Documentation dispersee | Documentation centralisee |
|---|---|---|
| Découverte | Moteur de recherche absent ou cloisonne | Recherche full-text sur tout le corpus |
| Cohérence visuelle | Formats hétérogènes (Word, Confluence, Notion) | Theme uniforme, navigation structurée |
| Versionnage | Inexistant ou manuel (v2_final_ok.docx) | Historique Git complet, diff ligne par ligne |
| Accès | Droits par outil, souvent mal synchronises | Un seul referentiel d'accès |
| Auditabilite | Auteur et date souvent inconnus | Chaque commit porte auteur, date, message |
| Integration CI/CD | Manuelle ou absente | Publication automatique à chaque push |
| Portabilité | Dependant de l'outil proprietaire | Markdown : lisible sans outil special |
Documentation comme produit
Une documentation centralisee doit etre traitee comme un produit interne : elle a des utilisateurs (les équipes techniques), des besoins (trouver rapidement la bonne information), et doit etre maintenue activement. Un service de documentation sans processus de mise à jour devient rapidement obsolète et perd la confiance de ses lecteurs.
Documentation-as-Code¶
Principe¶
Documentation-as-Code est l'application aux documents techniques des mêmes pratiques que pour le code source : les fichiers sont écrits en texte brut (Markdown), stockes dans Git, et publies automatiquement via un pipeline CI.
graph LR
MD["Markdown<br/>(fichiers .md)"] -->|git push| Git["Depot Git<br/>(Gitea / GitHub)"]
Git -->|webhook| CI["Pipeline CI<br/>(Forgejo Actions)"]
CI -->|mkdocs build| SSG["Site statique<br/>(HTML/CSS/JS)"]
SSG -->|deploiement| RP["Reverse proxy<br/>(Caddy / Nginx)"]
RP -->|HTTPS| Lecteur["Lecteur"] Le flux complet — de la modification d'un fichier Markdown jusqu'a la page visible par le lecteur — est automatise. L'auteur n'a pas a se connecter a une interface d'administration : un simple git push suffit.
Avantages par rapport à un wiki WYSIWYG¶
Un wiki WYSIWYG (Confluence, Notion, MediaWiki) offre une prise en main rapide mais accumule des limitations à l'échelle :
| Critère | Wiki WYSIWYG | Documentation-as-Code |
|---|---|---|
| Versionnage | Historique interne, non standardise | Git : diff, blame, revert natifs |
| Revue de modification | Absent ou sommaire | Pull Request avec revue et approbation |
| Reproductibilite | Build proprietaire, non auditables | mkdocs build produit le même résultat |
| Portabilité | Dependant du fournisseur | Markdown : éditeur universel |
| Recherche | Cloisonnee a l'outil | Index integre ou externe (Lunr, Algolia) |
| Automatisation | Hooks limites | Integration native CI/CD, webhooks Git |
| Sauvegarde | Export manuel periodique | Le dépôt Git est la source de vérité |
Revue de documentation
Appliquer les mêmes regles de revue au code et a la documentation reduit les erreurs et encourage la propriété collective. Une PR modifiant une procedure sensible peut etre soumise a l'approbation d'un lead technique ou d'un responsable sécurité avant publication.
Types de documentation — modèle Diataxis¶
Les quatre types¶
Le modèle Diataxis (Daniele Procida, 2017) distingue quatre types de documentation selon deux axes : apprentissage vs travail et théorique vs pratique.
| Type | Description | Audience cible | Exemple |
|---|---|---|---|
| Tutoriels | Apprentissage par la pratique, guide pas a pas | Debutant sur le sujet | "Déployer son premier service avec Docker" |
| Guides pratiques | Recettes pour accomplir une tâche spécifique | Praticien qui sait déjà | "Configurer un certificat TLS avec Caddy" |
| Référence | Description exhaustive et précise de l'API ou de la CLI | Praticien qui cherche un detail | Parametres de mkdocs.yml |
| Explication | Discussion, contexte, architecture, choix de conception | Curieux ou decideur | "Pourquoi choisir MkDocs plutôt que Hugo" |
Quadrant Diataxis¶
quadrantChart
title Modele Diataxis
x-axis Theorique --> Pratique
y-axis Travail --> Apprentissage
quadrant-1 Tutoriels
quadrant-2 Explication
quadrant-3 Reference
quadrant-4 Guides pratiques
Tutoriels: [0.75, 0.75]
Guides pratiques: [0.75, 0.25]
Reference: [0.25, 0.25]
Explication: [0.25, 0.75] Melanger les types nuit a la lisibilite
Un document qui commence comme un tutoriel, glisse vers une explication théorique, puis liste des parametres de référence perd le lecteur. Chaque page doit appartenir clairement a un seul type. Diataxis est un outil de classification : il aide a diagnostiquer les problèmes de structure existants autant qu'a guider la creation.
Generateurs de sites statiques (SSG)¶
Principe de fonctionnement¶
Un generateur de site statique (SSG) compile des fichiers sources — Markdown, YAML, templates — en un ensemble de fichiers HTML, CSS et JavaScript prets a etre servis par n'importe quel serveur web.
Contrairement a une application web dynamique :
- Aucune base de données a maintenir ou securiser
- Aucun runtime serveur (PHP, Node, Python) expose en production
- Les fichiers générées sont deployables sur un simple serveur HTTP, un CDN ou un bucket objet (S3, MinIO)
- Performance maximale : chaque page est un fichier statique servi directement par le serveur
- Surface d'attaque reduite : pas d'injection SQL, pas d'execution de code serveur côté visiteur
Comparaison des SSG populaires¶
| SSG | Langage | Format source | Communauté | Cas d'usage typique |
|---|---|---|---|---|
| MkDocs | Python | Markdown | Grande, active | Documentation technique, DSI |
| Hugo | Go | Markdown + templates | Tres grande | Sites web, blogs, documentation |
| Docusaurus | Node.js/React | Markdown + MDX | Tres grande | Documentation de projets open source |
| Sphinx | Python | reStructuredText | Grande | Documentation Python, projets scientifiques |
| Jekyll | Ruby | Markdown + Liquid | Grande (legacy) | Sites GitHub Pages, blogs |
Pourquoi MkDocs pour une DSI
MkDocs se distingue par sa simplicité de configuration (un seul fichier mkdocs.yml), son ecosysteme de plugins mature et le theme Material qui offre une expérience utilisateur de qualité sans effort de design. Il ne necessite qu'un environnement Python, present sur la plupart des systèmes CI.
MkDocs et MkDocs Material¶
MkDocs¶
MkDocs est écrit en Python. Il parcourt l'arborescence de fichiers Markdown, applique des templates Jinja2 et produit un site HTML statique. La configuration est entierement declarative dans un fichier YAML.
Structure de projet type :
mon-projet-docs/
├── mkdocs.yml # Configuration principale
├── docs/ # Sources Markdown
│ ├── index.md
│ ├── guide/
│ │ └── installation.md
│ └── reference/
│ └── api.md
└── site/ # Sortie generee (ne pas versionner)
Le fichier mkdocs.yml contrôle la navigation, le theme, les plugins et les extensions Markdown :
site_name: Documentation interne
docs_dir: docs
site_dir: site
nav:
- Accueil: index.md
- Guide:
- Installation: guide/installation.md
- Reference:
- API: reference/api.md
theme:
name: material
plugins:
- search
markdown_extensions:
- admonition
- pymdownx.superfences
Les commandes essentielles sont :
mkdocs serve— serveur de développement avec rechargement automatiquemkdocs build— génération du site statique danssite/mkdocs gh-deploy— déploiement vers GitHub Pages (optionnel)
MkDocs Material¶
MkDocs Material est une surcouche de theme appliquant le langage de design Material Design de Google. Il est maintenu par Martin Donath (squidfunk) et est l'un des projets Python les plus stars sur GitHub.
Fonctionnalités cles :
- Navigation par onglets et sections : organisation hierarchique de la documentation avec onglets de premier niveau et sections pliables dans le menu lateral
- Recherche client-side (Lunr) : index de recherche génère a la compilation, interroge directement dans le navigateur sans serveur, avec mise en évidence des termes
- Coloration syntaxique : integre via Pygments ou highlight.js, supporte des dizaines de langages avec themes clairs et sombres
- Admonitions : blocs visuels differencies (
note,tip,warning,danger,info,example,quote) pour attirer l'attention du lecteur - Diagrammes Mermaid : rendu natif des diagrammes Mermaid via le plugin
superfences - Responsive : adaptatif mobile/tablette/desktop sans configuration supplémentaire
Extensions Markdown utiles¶
Les extensions PyMdown etendent la syntaxe Markdown standard avec des fonctionnalités orientees documentation technique :
| Extension | Fonctionnalité apportee |
|---|---|
pymdownx.superfences | Blocs de code imbriques, rendu Mermaid, custom fences |
pymdownx.tabbed | Onglets à l'intérieur d'une page (ex : Linux / macOS / Windows) |
admonition | Blocs !!! (note, tip, warning, danger, etc.) |
attr_list | Attributs HTML sur les éléments Markdown ({ .class #id }) |
md_in_html | Syntaxe Markdown dans des blocs HTML bruts |
Exemple de configuration complète des extensions dans mkdocs.yml :
markdown_extensions:
- admonition
- attr_list
- md_in_html
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
- pymdownx.tabbed:
alternate_style: true
Mode clair / mode sombre
MkDocs Material supporte un toggle de theme clair/sombre configurable dans mkdocs.yml via palette. L'état est memorise dans localStorage du navigateur. Aucun plugin supplémentaire n'est nécessaire.
Vocabulaire cle¶
| Terme | Définition |
|---|---|
| SSG | Static Site Generator — outil qui compile des fichiers sources en site HTML statique |
| Front matter | Bloc YAML en debut de fichier Markdown, delimite par ---, contenant les metadonnees de la page |
| Plugin MkDocs | Extension Python declaree dans mkdocs.yml qui ajoute des fonctionnalités au build |
| Hook | Script Python ou événement CI qui s'execute a une étape précise du pipeline de build |
| nav | Cle de configuration mkdocs.yml définissant la structure et l'ordre de la navigation |
| Theme | Ensemble de templates Jinja2 et assets CSS/JS définissant l'apparence du site génère |
| Lunr | Moteur de recherche JavaScript client-side embarque dans MkDocs Material |
| Jinja2 | Moteur de templates Python utilise par MkDocs pour générer les pages HTML depuis les .md |
| Markdown extensions | Modules Python etendant la syntaxe Markdown de base (tableaux, admonitions, superfences) |
Synthese¶
La documentation technique centralisee repose sur un principe simple : traiter les documents comme du code. Markdown dans Git, pipeline CI, site statique — cette chaîne garantit la traçabilite, la réversibilité et l'automatisation de la publication. MkDocs Material est la solution de référence pour une DSI qui veut un résultat professionnel sans complexité operationnelle. Le modèle Diataxis fournit le cadre conceptuel pour structurer le contenu de manière coherente et utile. Le chapitre suivant presente les solutions disponibles et leurs critères de choix.