Déploiement MkDocs + Nginx avec Docker
Cette procédure décrit comment déployer un site de documentation MkDocs avec le thème Material, servi par Nginx, le tout orchestré avec Docker Compose sur un Raspberry Pi 5.
Informations
| Difficulté | Intermédiaire |
| Durée estimée | 30 minutes |
| Dernière mise à jour | Janvier 2025 |
Prérequis
Matériel
- Raspberry Pi 5 (ou tout serveur Linux)
- Stockage SSD recommandé
Logiciels
- Debian 13 (Trixie) ou équivalent
- Docker et Docker Compose installés
Vérification de Docker
Si Docker n'est pas installé :
Bash
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Se déconnecter/reconnecter
Architecture
graph LR
A[Client] -->|Port 8080| B[Nginx]
B -->|Volume partagé| C[Site statique]
D[MkDocs Build] -->|Génère| C | Service | Rôle |
|---|---|
| mkdocs | Construit le site statique à partir des fichiers Markdown |
| nginx | Sert les fichiers statiques sur le port 8080 |
Étape 1 : Structure du projet
Créer le répertoire du projet :
Structure attendue :
Text Only
/opt/mkdocs/
├── docker-compose.yml
├── Dockerfile
├── mkdocs.yml
├── requirements.txt
├── docs/
│ ├── index.md
│ └── ...
└── nginx/
├── nginx.conf
└── conf.d/
└── default.conf
Étape 2 : Fichier Dockerfile
Dockerfile
FROM squidfunk/mkdocs-material:latest AS builder
WORKDIR /docs
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY mkdocs.yml .
COPY docs/ ./docs/
RUN mkdocs build --strict --verbose
Étape 3 : Fichier docker-compose.yml
docker-compose.yml
services:
mkdocs:
build:
context: .
dockerfile: Dockerfile
container_name: mkdocs-builder
volumes:
- site_data:/output
entrypoint: ["/bin/sh", "-c"]
command: ["cp -r /docs/site/* /output/"]
restart: "no"
nginx:
image: nginx:alpine
container_name: mkdocs-nginx
depends_on:
mkdocs:
condition: service_completed_successfully
ports:
- "8080:80"
volumes:
- site_data:/usr/share/nginx/html:ro
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
restart: unless-stopped
volumes:
site_data:
Étape 4 : Configuration Nginx
nginx/nginx.conf
nginx/nginx.conf
user nginx;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf;
}
nginx/conf.d/default.conf
nginx/conf.d/default.conf
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Étape 5 : Déploiement
Construction et lancement
Vérification
Résultat attendu :
Étape 6 : Accès au site
Le site est accessible sur :
Mise à jour du site
Après modification des fichiers Markdown :
Commandes utiles
| Commande | Description |
|---|---|
docker compose up -d --build mkdocs | Reconstruire le site |
docker compose logs -f nginx | Voir les logs Nginx |
docker compose down | Arrêter les services |
docker compose down -v | Arrêter et supprimer les volumes |
Dépannage
Erreur de build MkDocs
Vérifier la syntaxe du fichier mkdocs.yml :