smart_ide/services/docv/enso-docs/operations/NGINX_ENSO_API_ROUTING.md
Nicolas Cantu bc3c75e15f Add enso docs mirror under services/docv/enso-docs; docv integration docs
- Copy enso/docs tree to services/docv/enso-docs (refresh via cp -a from enso repo)
- Document mirror and refresh command in services/docv/README.md
- Ignore services/docv/target for local Rust workspace
- Track docv-service-integration, API docv.md, and related doc index updates
2026-04-03 17:26:35 +02:00

3.0 KiB
Raw Blame History

Reverse proxy — préfixe /api/ sur les vhosts *.enso.*

Sur test, pprod et prod, le vhost public enso (ex. test.enso.4nkweb.com) doit envoyer location /api/ vers enso-front (port 3032), pas vers enso-back (3040).

Pourquoi

  • enso-front (Next.js) expose des Route Handlers sous /api/, notamment POST /api/auth/docv-token pour léchange du code OAuth.
  • enso-back sur 3040 est pour linstant un accepteur TCP minimal qui répond ok (texte brut) à toute requête. Si nginx route /api/ vers 3040, le navigateur reçoit ok au lieu de JSON → échec du parse côté client et écran bloqué sur « Connexion en cours… » après le retour OAuth.

Référence dépôt

Fichiers snippets : deploy/nginx/test.enso.4nkweb.com.locations.snippet, pprod.enso…, prod.enso… — blocs location /api/ avec proxy_pass vers 3032 sur la machine cible (101 / 102 / 103).

Après modification du proxy (192.168.1.100), recharger nginx et contrôler :

curl -sS -D- -o /tmp/b.txt -X POST "https://test.enso.4nkweb.com/api/auth/docv-token" \
  -H "Content-Type: application/json" \
  -d '{"code":"x","redirect_uri":"https://test.enso.4nkweb.com/auth/docv-callback"}'
head -1 /tmp/b.txt
# Attendu : Content-Type JSON (erreur 400/500 avec corps JSON), pas text/plain « ok ».

Variables Next sur lhôte applicatif

Sur la machine qui exécute next start (3032), enso/enso-front/.env.production.local doit contenir au minimum DOCV_OAUTH_TOKEN_URL, DOCV_OAUTH_CLIENT_ID, DOCV_OAUTH_CLIENT_SECRET (alignés sur docv-back). Les seules clés VITE_* ne suffisent pas.

Évolution : enso-back (3040) quand il expose une vraie API

Le périmètre produit est documenté dans docs/enso/README.md §4.1 : le socle métier commun vit dans docv-back (/docv-api/3038) ; enso-back (3040) porte le spécifique cabinet (zone 17, agrégats enso, intégrations serveur réservées au projet).

Quand enso-back servira des routes HTTP réelles, ne pas reprendre le préfixe /api/ en entier vers 3032 pour tout le trafic métier enso : ajouter un bloc plus spécifique avant le location /api/ générique, par exemple :

# Exemple (à ajuster selon les chemins réels choisis pour enso-back)
location /api/enso/ {
	proxy_pass http://192.168.1.101:3040;
	proxy_http_version 1.1;
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Forwarded-Proto $scheme;
}

location /api/ {
	proxy_pass http://192.168.1.101:3032;
	# … (Next.js : /api/auth/docv-token et autres Route Handlers)
}

Le navigateur et enso-front continuent dappeler docv pour les fonctionnalités communes via /docv-api/ ; seules les routes dédiées enso passent par /api/enso/ (ou le préfixe retenu dans le contrat dAPI).