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 :