Architecture réelle de mon-site.ca (Docker, Caddy, Traefik)
Architecture réelle de mon-site.ca
Cette note documente l’architecture actuelle du site mon-site.ca en production sur un serveur Linode.
⚠️ Toute ancienne référence à Apache est désormais obsolète.
Le site fonctionne aujourd’hui avec :
- Hugo (génération statique)
- Docker
- Caddy (serveur statique)
- Traefik (reverse proxy + TLS)
1️⃣ Vue d’ensemble
Architecture logique :
Navigateur
→ Internet (HTTPS)
→ Traefik (reverse proxy, TLS)
→ Conteneur Caddy
→ Fichiers statiques générés par Hugo2️⃣ Génération du site
Le site est généré localement :
hugo --minifyCette commande produit le dossier :
/publicCe dossier contient uniquement :
- HTML
- CSS
- JavaScript
- Images
Aucun code serveur n’est exécuté en production.
Déploiement
./deploy.shLe script copie le contenu vers le serveur dans :
/opt/apps/<APP_SLUG>/public3️⃣ docker-compose.prod.yml
Service principal :
frontend:
image: caddy:2Le conteneur :
- Monte le dossier
./publicen lecture seule - Monte le
Caddyfile - Écoute sur le port 80 interne
- Est connecté au réseau
edge(Traefik)
Important : le conteneur ne gère pas le HTTPS. Le TLS est entièrement géré par Traefik.
4️⃣ Rôle exact de Caddy
Caddy est utilisé comme serveur de fichiers statiques optimisé.
Caddyfile
:80
root * /usr/share/caddy
file_server
encode zstd gzip
header Cache-Control max-age=300,publicFonctionnalités :
- Service de fichiers statiques
- Compression automatique (
zstd+gzip) Cache-Controlde 5 minutes- Aucune logique applicative
Caddy ne fait pas de reverse proxy dans cette architecture.
5️⃣ Rôle exact de Traefik
Traefik agit comme point d’entrée unique du serveur.
Il :
- Écoute sur les ports 80 et 443
- Gère les certificats Let’s Encrypt
- Force la redirection HTTP → HTTPS
- Route vers le conteneur Caddy
Les labels Docker définissent les règles de routage par nom d’hôte.
Le conteneur Caddy n’est jamais exposé directement sur Internet.
6️⃣ Flux réseau réel
- L’utilisateur accède à https://mon-site.ca
- Le DNS pointe vers l’adresse IP du serveur Linode
- Traefik reçoit la requête
- Traefik valide le certificat TLS
- Traefik route vers le conteneur Caddy (port 80 interne)
- Caddy sert les fichiers statiques
7️⃣ Ce que le site n’est pas
- Pas un serveur Apache
- Pas un serveur Nginx
- Pas une application backend
- Pas de base de données
- Pas d’exécution dynamique
C’est un site statique conteneurisé.
8️⃣ Points forts de l’architecture
- ✔ Isolation via Docker
- ✔ Reverse proxy centralisé
- ✔ HTTPS automatique
- ✔ Surface d’attaque minimale
- ✔ Déploiement simple
- ✔ Performance élevée
9️⃣ Bonnes pratiques recommandées
Versionner l’infrastructure
À mettre dans Git :
docker-compose.prod.ymlCaddyfiledeploy.sh- Documentation d’infrastructure
À ne jamais versionner :
- Fichiers
.envcontenant des secrets - Certificats
- Clés privées
Séparer configuration et secrets
Conserver :
.env(sans secrets) versionné.env.localnon versionné
Optimiser le cache
Actuellement :
max-age=300Améliorations possibles :
- Cache long pour assets fingerprintés
- Cache court pour HTML
Ajouter des headers de sécurité
Exemples :
Strict-Transport-SecurityX-Content-Type-OptionsReferrer-PolicyX-Frame-Options
Automatiser le déploiement
Option avancée :
- GitHub Actions
- Build Hugo automatique
- Déploiement SSH
docker compose up -d
Ajouter un environnement staging
Créer un sous-domaine :
staging.mon-site.caPermet de tester avant mise en production.
🔟 Conclusion
Architecture actuelle :
Hugo (build local)
→ Docker
→ Caddy (serveur statique)
→ Traefik (TLS + routing)L’architecture est simple, robuste et adaptée à un site statique personnel.
Elle constitue une base saine pour héberger plusieurs applications derrière Traefik sur le même serveur.