Déploiement derrière reverse-proxy TLS (Caddy)

- 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).
This commit is contained in:
2026-09-15 12:34:49 +02:00
parent 09c24d5f59
commit a11f3c4a10
3 changed files with 34 additions and 2 deletions
+2
View File
@@ -16,6 +16,8 @@ ORS_API_KEY=your-openrouteservice-api-key-here
JWT_SECRET_KEY=change-me-generate-a-long-random-secret JWT_SECRET_KEY=change-me-generate-a-long-random-secret
JWT_EXPIRATION_MINUTES=720 JWT_EXPIRATION_MINUTES=720
AUTH_RESET_TOKEN_LIFETIME_MINUTES=60 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 AUTH_FRONTEND_BASE_URL=http://localhost:8080
# --- SMTP (facultatif) : si SMTP_HOST est vide, le lien de reset est journalisé côté serveur --- # --- SMTP (facultatif) : si SMTP_HOST est vide, le lien de reset est journalisé côté serveur ---
+29
View File
@@ -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).
+3 -2
View File
@@ -199,8 +199,9 @@ if (app.Environment.IsDevelopment())
app.UseSwaggerUI(); 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.UseCors(CorsPolicyName);
app.UseAuthentication(); app.UseAuthentication();