# Bloc ajouté à /opt/edge/Caddyfile sur le serveur (fichier partagé avec # les 6 autres projets hébergés, donc pas dans ce dépôt en entier — voir # le README de ce dossier). Tenu à jour ici pour référence, mais la # source de vérité reste le fichier sur le serveur. # # Pourquoi Caddy et pas tripoli-edge lui-même sur 80/443 : les ports 80 et # 443 appartiennent déjà à ce Caddy. tripoli-edge est un service interne # (172.17.0.1:9000, passerelle docker0, jamais exposé publiquement) : # Caddy fait TLS/ACME et le routage par Host, tripoli-edge fait le reste # via /api/*, /healthz et /metrics. # # Le frontend (build statique React) est servi directement par Caddy # depuis /var/www/tripoli-cloud, sans passer par tripoli-edge. # # Cache-Control explicite, sans quoi le navigateur applique sa propre # heuristique - imprévisible, et découvert à nos dépens : un déploiement # de frontend restait invisible pour un navigateur qui avait mis en # cache l'ancien index.html. `no-cache` force la revalidation à chaque # chargement (le fichier change à chaque déploiement) ; les fichiers # sous /assets/ ont un nom haché par leur contenu (Vite), donc peuvent # être mis en cache indéfiniment sans risque. tripoli.cloud, www.tripoli.cloud { header { Strict-Transport-Security "max-age=31536000; includeSubDomains" X-Content-Type-Options "nosniff" X-Frame-Options "SAMEORIGIN" Referrer-Policy "strict-origin-when-cross-origin" -Server } handle /api/* { reverse_proxy 172.17.0.1:9000 } handle /healthz { reverse_proxy 172.17.0.1:9000 } handle /metrics { reverse_proxy 172.17.0.1:9000 } handle /assets/* { root * /var/www/tripoli-cloud header Cache-Control "public, max-age=31536000, immutable" file_server } handle { root * /var/www/tripoli-cloud header Cache-Control "no-cache" try_files {path} /index.html file_server } log { output file /var/log/caddy/tripoli-cloud.log format json } }