docs: add deployment fixes documentation (2025-09-24)
All checks were successful
build-and-push-ext / build_push (push) Successful in 4m20s

- Document Nginx rewrite fixes for /lecoffre/ 404
- Document conditional Next.js config (prod vs dev)
- Document HMR setup with /lecoffre-hmr/ route
- Document assets proxy /_next/ fix
- Document IdNot flow validation
This commit is contained in:
Debian Dev4 2025-09-24 20:12:02 +00:00
parent e6ba657e53
commit c7034fe0d3
2 changed files with 89 additions and 7 deletions

View File

@ -0,0 +1,78 @@
# Corrections de déploiement - 24 septembre 2025
## Problèmes résolus
### 1. Configuration Next.js conditionnelle
- **Problème**: `output: 'export'` et `basePath` appliqués en dev bloquaient HMR
- **Solution**: Configuration conditionnelle dans `next.config.js`
```js
const isProd = process.env.NODE_ENV === 'production';
const nextConfig = {
...(isProd ? {
output: 'export',
basePath: '/lecoffre',
assetPrefix: '/lecoffre',
trailingSlash: true,
images: { unoptimized: true }
} : {})
};
```
### 2. Nginx - Redirection et proxy
- **Problème**: `/lecoffre/` retournait 404 car l'image CI ne respectait pas `basePath`
- **Solution**: Rewrite Nginx dans `location ^~ /lecoffre/`
```nginx
rewrite ^/lecoffre/(.*)$ /$1 break;
proxy_pass http://localhost:3004;
```
### 3. Assets Next.js manquants
- **Problème**: `/_next/static/` retournait 404 (assets non servis)
- **Solution**: Route Nginx dédiée
```nginx
location ^~ /_next/ {
proxy_pass http://localhost:3004/_next/;
add_header Cache-Control "public, max-age=31536000, immutable";
}
```
### 4. HMR en développement
- **Problème**: Besoin d'HMR sans impacter la prod
- **Solution**: Route dédiée `/lecoffre-hmr/` avec WebSocket support
```nginx
location ^~ /lecoffre-hmr/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
rewrite ^/lecoffre-hmr/(.*)$ /$1 break;
proxy_pass http://localhost:3000;
}
```
## Architecture finale
### Production
- `https://dev4.4nkweb.com/` → ihm_client (iframe)
- `https://dev4.4nkweb.com/lecoffre/` → lecoffre-front (app principale)
- `https://dev4.4nkweb.com/_next/` → assets Next.js
### Développement (HMR)
- `https://dev4.4nkweb.com/lecoffre-hmr/` → Next.js dev server (port 3000)
### Flux IdNot
- CORS dev3 configuré pour `https://dev4.4nkweb.com`
- State management via `/api/v1/idnot/state` sur dev3
- Callback vers `/authorized-client` (prod ou HMR)
## Variables d'environnement
- `NEXT_PUBLIC_*` cohérentes entre build CI et runtime
- `NODE_ENV=production` pour activer basePath/export
- CORS dynamique pour dev4.4nkweb.com
## Tests validés
- ✅ Redirection 301: `/lecoffre``/lecoffre/`
- ✅ Page d'accueil: `/lecoffre/` → 200
- ✅ Assets: `/_next/static/` → 200
- ✅ HMR: `/lecoffre-hmr/` → 200
- ✅ CORS dev3: OPTIONS 204 + POST state 200
- ✅ ihm_client: `/` → 200

View File

@ -1,14 +1,18 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const isProd = process.env.NODE_ENV === 'production';
const nextConfig = { const nextConfig = {
reactStrictMode: false, reactStrictMode: false,
output: 'export', ...(isProd
basePath: '/lecoffre', ? {
assetPrefix: '/lecoffre', output: 'export',
trailingSlash: true, basePath: '/lecoffre',
images: { assetPrefix: '/lecoffre',
unoptimized: true, trailingSlash: true,
}, images: { unoptimized: true },
}
: {}),
eslint: { eslint: {
ignoreDuringBuilds: true, ignoreDuringBuilds: true,
}, },