From a11f3c4a10772d1c5a5d4db1b201a2c672a86735 Mon Sep 17 00:00:00 2001 From: Nikolaz Date: Tue, 15 Sep 2026 12:34:49 +0200 Subject: [PATCH] =?UTF-8?q?D=C3=A9ploiement=20derri=C3=A8re=20reverse-prox?= =?UTF-8?q?y=20TLS=20(Caddy)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Retire app.UseHttpsRedirection() : le conteneur écoute en HTTP, la terminaison TLS est assurée par le reverse-proxy (Caddy) placé devant. Évite les redirections parasites derrière le proxy. - Ajoute Caddyfile.example (Caddy devant le compose existant : TLS auto + reverse_proxy vers le frontend nginx qui sert l'app et proxifie /api). - .env.example : précise AUTH_FRONTEND_BASE_URL = URL publique HTTPS en production (liens de réinitialisation de mot de passe). --- .env.example | 2 ++ Caddyfile.example | 29 +++++++++++++++++++++++ backend/SchotzIadKmTracker.Api/Program.cs | 5 ++-- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 Caddyfile.example diff --git a/.env.example b/.env.example index e8d293d..24ec3ed 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,8 @@ ORS_API_KEY=your-openrouteservice-api-key-here JWT_SECRET_KEY=change-me-generate-a-long-random-secret JWT_EXPIRATION_MINUTES=720 AUTH_RESET_TOKEN_LIFETIME_MINUTES=60 +# En production derrière un reverse-proxy HTTPS (Caddy), mets ton URL publique, +# ex. AUTH_FRONTEND_BASE_URL=https://schotz.exemple.fr (utilisée dans les liens de reset). AUTH_FRONTEND_BASE_URL=http://localhost:8080 # --- SMTP (facultatif) : si SMTP_HOST est vide, le lien de reset est journalisé côté serveur --- diff --git a/Caddyfile.example b/Caddyfile.example new file mode 100644 index 0000000..c804cea --- /dev/null +++ b/Caddyfile.example @@ -0,0 +1,29 @@ +# Exemple de configuration Caddy pour exposer SchotzIAD KM Tracker en HTTPS. +# +# 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). +# +# 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). + +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 + + # 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. +} + +# --- 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). diff --git a/backend/SchotzIadKmTracker.Api/Program.cs b/backend/SchotzIadKmTracker.Api/Program.cs index 924d34f..dc78ece 100644 --- a/backend/SchotzIadKmTracker.Api/Program.cs +++ b/backend/SchotzIadKmTracker.Api/Program.cs @@ -199,8 +199,9 @@ if (app.Environment.IsDevelopment()) app.UseSwaggerUI(); } -app.UseHttpsRedirection(); - +// Pas de redirection HTTPS côté application : le conteneur écoute en HTTP et la +// terminaison TLS est assurée par le reverse-proxy (Caddy/nginx) placé devant. +// Activer UseHttpsRedirection ici provoquerait des redirections parasites derrière le proxy. app.UseCors(CorsPolicyName); app.UseAuthentication();