fix(infra): lève les points de revue du reverse proxy
Compose interpole tout le fichier avant n'importe quelle sous-commande : la garde
`${PUBLIC_HOST:?}` de l'overlay cassait `stack-down` et `stack-logs` autant que le
démarrage. La valeur retombe sur `enervision.local`, et `stack-up` vérifie à la place
que le certificat présent couvre l'hôte demandé, ce qui est la condition réelle à tenir.
La CSP `script-src 'self'` bloquait le gestionnaire `onload` que l'inlining du CSS
critique d'Angular pose sur la feuille de styles : l'application se serait affichée sans
style derrière le proxy. `inlineCritical` passe à faux, le build de production ne produit
plus aucun script en ligne.
La zone de limitation resserrée ne couvre plus que les routes qui vérifient un secret.
Derrière le NAT de l'école, où une seule adresse porte toute la promotion, `/auth/me` et
`/auth/refresh` y auraient produit des 429 en usage normal.
Enfin `certbot/certbot` est épinglé en v5.8.0 pour que Dependabot puisse le suivre, le
proxy attend une API saine plutôt que démarrée, et la redirection vers `$host` est actée
comme risque accepté : figer un nom canonique couperait l'accès par adresse IP, seule
voie ouverte sur la machine cible.
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
# rouvrirait `/docs`. Hors `local`, l'API exige en retour une origine CORS non vide.
|
||||
# Piège : les listes de ports se cumulent à la fusion des deux fichiers. `!reset` est le seul
|
||||
# moyen de dépublier 8000 et 3000 : sans lui, l'API resterait joignable en clair à côté du proxy.
|
||||
# Piège : pas de `:?` sur `PUBLIC_HOST`. Compose interpole tout le fichier, y compris pour
|
||||
# `stop` et `logs` : la garde vit dans `make stack-up`, qui la compare au certificat servi.
|
||||
|
||||
name: enervision
|
||||
|
||||
@@ -35,8 +37,8 @@ services:
|
||||
APP_ENV: prod
|
||||
APP_DEBUG: "false"
|
||||
APP_TRUST_PROXY_HEADERS: "true"
|
||||
APP_CORS_ORIGINS: https://${PUBLIC_HOST:?PUBLIC_HOST est requis pour la stack complète}
|
||||
APP_FRONTEND_RESET_PASSWORD_URL: https://${PUBLIC_HOST}/reset-password
|
||||
APP_CORS_ORIGINS: https://${PUBLIC_HOST:-enervision.local}
|
||||
APP_FRONTEND_RESET_PASSWORD_URL: https://${PUBLIC_HOST:-enervision.local}/reset-password
|
||||
|
||||
frontend:
|
||||
ports: !reset null
|
||||
@@ -44,8 +46,10 @@ services:
|
||||
proxy:
|
||||
image: nginx:1.28-alpine
|
||||
depends_on:
|
||||
- backend
|
||||
- frontend
|
||||
backend:
|
||||
condition: service_healthy
|
||||
frontend:
|
||||
condition: service_started
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
@@ -57,7 +61,7 @@ services:
|
||||
restart: unless-stopped
|
||||
|
||||
certbot:
|
||||
image: certbot/certbot
|
||||
image: certbot/certbot:v5.8.0
|
||||
profiles: ["acme"]
|
||||
volumes:
|
||||
- letsencrypt:/etc/letsencrypt
|
||||
|
||||
Reference in New Issue
Block a user