From e9178e3c2011b7090420e7354ef345779935150e Mon Sep 17 00:00:00 2001 From: Nikolaz Date: Tue, 15 Sep 2026 12:36:50 +0200 Subject: [PATCH] =?UTF-8?q?Caddyfile.example=20:=20Caddy=20sur=20machine?= =?UTF-8?q?=20s=C3=A9par=C3=A9e=20(IP=20Docker=20+=20s=C3=A9curit=C3=A9=20?= =?UTF-8?q?r=C3=A9seau)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configuration reverse_proxy vers l'IP de la machine Docker (port 8080 publié par le compose), en-têtes X-Forwarded-*, sonde /health, et recommandations de sécurité (restreindre le port 8080 à l'IP de Caddy / réseau privé) pour éviter un accès HTTP direct contournant le TLS. --- Caddyfile.example | 62 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/Caddyfile.example b/Caddyfile.example index c804cea..a2619d0 100644 --- a/Caddyfile.example +++ b/Caddyfile.example @@ -1,29 +1,51 @@ -# Exemple de configuration Caddy pour exposer SchotzIAD KM Tracker en HTTPS. +# Exemple de configuration Caddy pour exposer SchotzIAD KM Tracker en HTTPS, +# avec Caddy sur une machine SÉPARÉE de la machine Docker. # -# Architecture (option la plus simple) : Caddy est placé DEVANT le docker-compose -# existant. Le service `frontend` (nginx) sert l'application Angular et reverse-proxie -# déjà /api vers le backend en interne. Caddy n'a donc qu'à : -# - terminer le TLS (certificat automatique Let's Encrypt) ; -# - transmettre tout le trafic au port publié par le compose (8080 par défaut). +# Topologie : +# Internet ──HTTPS──> [Machine Caddy] ──HTTP──> [Machine Docker] : port 8080 +# (frontend nginx du compose, +# qui sert l'app et proxifie /api) # -# Remplace `schotz.exemple.fr` par ton domaine, et l'adresse cible par l'IP:port -# de la machine/container qui publie le compose (par défaut le frontend nginx sur 8080). +# Remplace : +# - `schotz.exemple.fr` par ton domaine (doit pointer en DNS vers la machine Caddy) ; +# - `192.168.1.50` par l'IP (LAN/VPN) de la machine Docker qui publie le compose. schotz.exemple.fr { encode zstd gzip - # Le compose publie le frontend nginx sur le port hôte 8080 (voir docker-compose.yml). - # nginx sert l'app et proxifie /api vers backend:8080 en interne : rien d'autre à router ici. - reverse_proxy 127.0.0.1:8080 + # La machine Docker publie le frontend nginx sur son port 8080 (voir docker-compose.yml). + # nginx sert l'app Angular et proxifie /api vers le backend en interne. + reverse_proxy 192.168.1.50:8080 { + # En-têtes transmis au backend pour qu'il connaisse le schéma/hôte d'origine. + header_up X-Forwarded-Proto {scheme} + header_up X-Forwarded-Host {host} + header_up X-Forwarded-For {remote_host} - # Caddy gère automatiquement le certificat TLS pour ce domaine (HTTP-01/TLS-ALPN). - # Aucune configuration TLS manuelle nécessaire si le domaine pointe vers cette machine. + # Sonde de santé optionnelle (le compose expose GET /health via nginx -> backend). + health_uri /health + health_interval 30s + } + + # Caddy gère automatiquement le certificat TLS (Let's Encrypt) pour ce domaine, + # à condition que le DNS de schotz.exemple.fr pointe vers CETTE machine (Caddy) + # et que les ports 80/443 y soient ouverts. } -# --- Points importants côté application --- -# 1) Renseigne dans ton fichier .env (non commité) : -# AUTH_FRONTEND_BASE_URL=https://schotz.exemple.fr -# afin que les liens de réinitialisation de mot de passe pointent vers l'URL publique. -# 2) Définis un JWT_SECRET_KEY aléatoire et long dans .env (obligatoire au démarrage). -# 3) Le backend écoute en HTTP dans le conteneur ; la terminaison TLS est faite par Caddy -# (l'application ne fait pas de redirection HTTPS interne). +# --- SÉCURITÉ RÉSEAU (important, machines séparées) --- +# Le port 8080 de la machine Docker devient joignable sur le réseau : sans filtrage, +# l'application serait accessible en HTTP direct (sans TLS), en contournant Caddy. +# Recommandations : +# 1) Restreindre l'accès au port 8080 de la machine Docker à la seule IP de la machine +# Caddy (pare-feu : ufw/iptables/nftables ou security group), ex. (ufw) : +# ufw allow from to any port 8080 proto tcp +# ufw deny 8080 +# 2) Idéalement, faire communiquer les deux machines via un réseau privé/VPN +# (WireGuard, réseau interne du datacenter) plutôt qu'en clair sur Internet. +# 3) Ne pas publier le backend (8080 du service backend) directement : seul le frontend +# nginx est exposé ; le backend reste sur le réseau interne du compose. + +# --- Points côté application (fichier .env sur la machine Docker) --- +# AUTH_FRONTEND_BASE_URL=https://schotz.exemple.fr # liens de réinitialisation +# JWT_SECRET_KEY= # obligatoire au démarrage +# ORS_API_KEY= +# Le backend écoute en HTTP dans le conteneur ; la terminaison TLS est faite par Caddy.