auto_clea
This commit is contained in:
parent
db6ee4e5e8
commit
9498001973
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"language": "fr",
|
|
||||||
"shell": "/usr/bin/bash",
|
|
||||||
"formatting": {
|
|
||||||
"markdown": {
|
|
||||||
"lint_strict": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ci": {
|
|
||||||
"trigger_commit_prefix": "ci: docker_tag=",
|
|
||||||
"default_tag": "ext",
|
|
||||||
"branch": "dev4"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
# Règles Cursor pour ce projet
|
|
||||||
|
|
||||||
- Toujours répondre en français.
|
|
||||||
- Exécuter des commandes simples, une par une.
|
|
||||||
- Redémarrer le terminal avant chaque utilisation si nécessaire.
|
|
||||||
- Respect strict des règles de lint Markdown.
|
|
||||||
- Ne pas utiliser Kubernetes pour ce projet.
|
|
||||||
- CI: déclencher via commit `ci: docker_tag=ext` sur `dev4`.
|
|
||||||
- Front Next.js: variables `NEXT_PUBLIC_*` alignées avec `.env.example`.
|
|
||||||
- Docker: build multi-stage, `ext` comme image de déploiement.
|
|
||||||
- Nginx: local (pas Docker), confs sous `../lecoffre_node/conf/nginx/`.
|
|
||||||
- Docs et tests: maintenir `docs/` et `tests/` à chaque modification.
|
|
||||||
- Ne pas exposer de secrets côté front (`SIGNER_API_KEY` etc.).
|
|
||||||
- Pour Nginx: vérifier permission fichier avant édition; backup, edit atomique, `nginx -t`.
|
|
37
.env.example
37
.env.example
@ -1,37 +0,0 @@
|
|||||||
# Configuration par défaut pour le build CI
|
|
||||||
# Ces valeurs seront surchargées par les variables d'environnement au runtime
|
|
||||||
|
|
||||||
# Backend API
|
|
||||||
NEXT_PUBLIC_BACK_API_PROTOCOL=https
|
|
||||||
NEXT_PUBLIC_BACK_API_HOST=localhost
|
|
||||||
NEXT_PUBLIC_BACK_API_PORT=443
|
|
||||||
NEXT_PUBLIC_BACK_API_ROOT_URL=/api
|
|
||||||
NEXT_PUBLIC_BACK_API_VERSION=v1
|
|
||||||
|
|
||||||
# Frontend
|
|
||||||
NEXT_PUBLIC_FRONT_APP_HOST=http://localhost:3000
|
|
||||||
NEXT_PUBLIC_FRONT_APP_PORT=3000
|
|
||||||
|
|
||||||
# IDNOT Configuration
|
|
||||||
NEXT_PUBLIC_IDNOT_BASE_URL=https://qual-connexion.idnot.fr
|
|
||||||
NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT=/IdPOAuth2/authorize/idnot_idp_v1
|
|
||||||
NEXT_PUBLIC_IDNOT_CLIENT_ID=default_client_id
|
|
||||||
NEXT_PUBLIC_IDNOT_REDIRECT_URI=http://localhost:3000/authorized-client
|
|
||||||
NEXT_PUBLIC_IDNOT_REDIRECT_URI_FIXED=https://lecoffreio.4nkweb.com/authorized-client
|
|
||||||
|
|
||||||
# 4NK Configuration
|
|
||||||
NEXT_PUBLIC_4NK_URL=http://localhost:3000
|
|
||||||
NEXT_PUBLIC_4NK_IFRAME_URL=http://localhost:3000
|
|
||||||
|
|
||||||
# Backend Base
|
|
||||||
NEXT_PUBLIC_BACK_BASE=http://localhost:8080
|
|
||||||
|
|
||||||
# API Configuration
|
|
||||||
NEXT_PUBLIC_API_URL=http://localhost:8080/api
|
|
||||||
NEXT_PUBLIC_DEFAULT_VALIDATOR_ID=default_validator_id
|
|
||||||
NEXT_PUBLIC_DEFAULT_STORAGE_URLS=http://localhost:8080/storage
|
|
||||||
|
|
||||||
# Optional configurations
|
|
||||||
NEXT_PUBLIC_DOCAPOSTE_API_URL=
|
|
||||||
NEXT_PUBLIC_HOTJAR_SITE_ID=
|
|
||||||
NEXT_PUBLIC_HOTJAR_VERSION=
|
|
Binary file not shown.
Before Width: | Height: | Size: 590 B |
@ -1,15 +0,0 @@
|
|||||||
# HTTP server for ACME and redirect to HTTPS
|
|
||||||
server {
|
|
||||||
listen 80 default_server;
|
|
||||||
server_name _;
|
|
||||||
|
|
||||||
# ACME HTTP-01 challenges
|
|
||||||
location /.well-known/acme-challenge/ {
|
|
||||||
root /var/www/letsencrypt;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Redirection vers HTTPS pour toutes les autres requêtes
|
|
||||||
location / {
|
|
||||||
return 301 https://$server_name$request_uri;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,265 +0,0 @@
|
|||||||
# Configuration HTTPS pour dev4.4nkweb.com
|
|
||||||
server {
|
|
||||||
listen 443 ssl;
|
|
||||||
http2 on;
|
|
||||||
server_name dev4.4nkweb.com;
|
|
||||||
|
|
||||||
include /home/debian/4NK_env/lecoffre_node/conf/nginx/logging.conf;
|
|
||||||
|
|
||||||
# Certificats SSL
|
|
||||||
ssl_certificate /etc/letsencrypt/live/dev4.4nkweb.com/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/dev4.4nkweb.com/privkey.pem;
|
|
||||||
|
|
||||||
# Configuration SSL
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_session_cache shared:SSL:10m;
|
|
||||||
ssl_session_timeout 10m;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header Strict-Transport-Security "max-age=63072000" always;
|
|
||||||
add_header X-Frame-Options DENY always;
|
|
||||||
add_header X-Content-Type-Options nosniff always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring (DOIT être avant location /)
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://localhost:3005/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Grafana
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# Support des WebSockets pour les live updates
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loki API - API de logs (DOIT être avant location /)
|
|
||||||
location /loki/ {
|
|
||||||
proxy_pass http://localhost:3100/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes depuis Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Page de statut des services (DOIT être avant location /)
|
|
||||||
location /status {
|
|
||||||
# Redirection vers /status/
|
|
||||||
return 301 /status/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /status/ {
|
|
||||||
# Serveur statique pour la page HTML
|
|
||||||
alias /var/www/lecoffre/status/;
|
|
||||||
index index.html;
|
|
||||||
try_files $uri $uri/ /status/index.html;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Cache pour les assets statiques
|
|
||||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 1h;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de statut des services (DOIT être avant location /)
|
|
||||||
location /status/api {
|
|
||||||
proxy_pass http://localhost:3006/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes AJAX
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 10s;
|
|
||||||
proxy_send_timeout 10s;
|
|
||||||
proxy_read_timeout 10s;
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - route /back/ vers /api/ du backend
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
proxy_pass http://localhost:8080/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - route /api/ vers le backend
|
|
||||||
# Autorisations CORS dynamiques pour origines connues
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://local\.4nkweb\.com:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /api/ {
|
|
||||||
# CORS pour développement local Next.js
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_set_header X-Request-ID $x_request_id;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_pass http://dev3.4nkweb.com:8080/api/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://localhost:8090/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de transfert de fonds
|
|
||||||
location /api/v1/funds/ {
|
|
||||||
proxy_pass http://dev3.4nkweb.com:8080/api/v1/funds/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets;
|
|
||||||
try_files /favicon.ico =404;
|
|
||||||
}
|
|
||||||
|
|
||||||
# blindbit
|
|
||||||
location /blindbit/ {
|
|
||||||
proxy_pass http://localhost:8000/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
# signer (sdk_signer) avec support WebSocket
|
|
||||||
|
|
||||||
# lecoffre-front - Application LeCoffre
|
|
||||||
location = /lecoffre { return 301 /lecoffre/; }
|
|
||||||
location ^~ /lecoffre/ {
|
|
||||||
# ensure no redirect here; only proxy to Next
|
|
||||||
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
|
|
||||||
add_header Pragma "no-cache" always;
|
|
||||||
add_header Expires "-1" always;
|
|
||||||
proxy_hide_header ETag;
|
|
||||||
proxy_hide_header Last-Modified;
|
|
||||||
rewrite ^/lecoffre/(.*)$ /$1 break;
|
|
||||||
proxy_pass http://localhost:3004;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header X-Request-ID $x_request_id;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
}
|
|
||||||
# HMR dev front
|
|
||||||
location ^~ /lecoffre-hmr/ {
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
rewrite ^/lecoffre-hmr/(.*)$ /lecoffre/$1 break;
|
|
||||||
proxy_pass http://localhost:3000;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
|
|
||||||
# Next.js assets for lecoffre-front
|
|
||||||
location ^~ /_next/ {
|
|
||||||
proxy_pass http://localhost:3004/_next/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:3003;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,246 +0,0 @@
|
|||||||
# Configuration HTTPS pour dev4.4nkweb.com
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2;
|
|
||||||
server_name dev4.4nkweb.com;
|
|
||||||
|
|
||||||
# Certificats SSL
|
|
||||||
ssl_certificate /etc/letsencrypt/live/dev4.4nkweb.com/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/dev4.4nkweb.com/privkey.pem;
|
|
||||||
|
|
||||||
# Configuration SSL
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_session_cache shared:SSL:10m;
|
|
||||||
ssl_session_timeout 10m;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header Strict-Transport-Security "max-age=63072000" always;
|
|
||||||
add_header X-Frame-Options DENY always;
|
|
||||||
add_header X-Content-Type-Options nosniff always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring (DOIT être avant location /)
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://localhost:3005/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Grafana
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# Support des WebSockets pour les live updates
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loki API - API de logs (DOIT être avant location /)
|
|
||||||
location /loki/ {
|
|
||||||
proxy_pass http://localhost:3100/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes depuis Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Page de statut des services (DOIT être avant location /)
|
|
||||||
location /status {
|
|
||||||
# Redirection vers /status/
|
|
||||||
return 301 /status/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /status/ {
|
|
||||||
# Serveur statique pour la page HTML
|
|
||||||
alias /var/www/lecoffre/status/;
|
|
||||||
index index.html;
|
|
||||||
try_files $uri $uri/ /status/index.html;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Désactiver le cache côté client
|
|
||||||
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
|
|
||||||
add_header Pragma "no-cache" always;
|
|
||||||
expires -1;
|
|
||||||
|
|
||||||
# Cache pour les assets statiques
|
|
||||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 1h;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de statut des services (DOIT être avant location /)
|
|
||||||
location /status/api {
|
|
||||||
proxy_pass http://localhost:3006/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes AJAX
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
# Désactiver le cache proxy/client
|
|
||||||
proxy_no_cache 1;
|
|
||||||
proxy_cache_bypass 1;
|
|
||||||
add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0" always;
|
|
||||||
add_header Pragma "no-cache" always;
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 10s;
|
|
||||||
proxy_send_timeout 10s;
|
|
||||||
proxy_read_timeout 10s;
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - route /back/ vers /api/ du backend
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
proxy_pass http://localhost:8080/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - route /api/ vers le backend
|
|
||||||
# Autorisations CORS dynamiques pour origines connues
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://local\.4nkweb\.com:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /api/ {
|
|
||||||
# CORS pour développement local Next.js
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://localhost:8080/api/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://localhost:8090/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de transfert de fonds
|
|
||||||
location /api/v1/funds/ {
|
|
||||||
proxy_pass http://localhost:8080/api/v1/funds/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /home/debian/lecoffre_node/conf/nginx/assets;
|
|
||||||
try_files /favicon.ico =404;
|
|
||||||
}
|
|
||||||
|
|
||||||
# blindbit
|
|
||||||
location /blindbit/ {
|
|
||||||
proxy_pass http://localhost:8000/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
# signer (sdk_signer) avec support WebSocket
|
|
||||||
location /signer/ {
|
|
||||||
proxy_pass http://localhost:3001/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# lecoffre-front - Application LeCoffre
|
|
||||||
# Forcer le trailing slash pour éviter les redirections et erreurs 500 côté Next.js
|
|
||||||
location = /lecoffre {
|
|
||||||
return 301 /lecoffre/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ^~ /lecoffre/ {
|
|
||||||
# Déléguer la gestion du basePath à Next.js
|
|
||||||
proxy_pass http://localhost:3004;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:3003;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,258 +0,0 @@
|
|||||||
# HTTP server for ACME and redirect to HTTPS
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name dev4.4nkweb.com http://dev4.4nkweb.com;
|
|
||||||
|
|
||||||
# ACME HTTP-01 challenges
|
|
||||||
location /.well-known/acme-challenge/ {
|
|
||||||
root /var/www/letsencrypt;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Redirection vers HTTPS pour toutes les autres requêtes
|
|
||||||
location / {
|
|
||||||
return 301 https://$server_name$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - route /back/ vers /api/ du backend
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
proxy_pass http://localhost:8080/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - route /api/ vers le backend
|
|
||||||
# Autorisations CORS dynamiques pour origines connues
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://local\.4nkweb\.com:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /api/ {
|
|
||||||
# CORS pour développement local Next.js
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://localhost:8080/api/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Compat: certains clients appellent /apiv1 -> réécriture vers /api/v1
|
|
||||||
location ~* ^/apiv1/(.*)$ {
|
|
||||||
# CORS pour compatibilité
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://localhost:8080/api/v1/$1;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://localhost:8090/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
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;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de transfert de fonds
|
|
||||||
location /api/v1/funds/ {
|
|
||||||
proxy_pass http://localhost:8080/api/v1/funds/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring (DOIT être avant location /)
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://localhost:3005/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Grafana
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# Support des WebSockets pour les live updates
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loki API - API de logs (DOIT être avant location /)
|
|
||||||
location /loki/ {
|
|
||||||
proxy_pass http://localhost:3100/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes depuis Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Page de statut des services (DOIT être avant location /)
|
|
||||||
location /status {
|
|
||||||
# Redirection vers /status/
|
|
||||||
return 301 /status/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /status/ {
|
|
||||||
# Serveur statique pour la page HTML
|
|
||||||
alias /var/www/lecoffre/status/;
|
|
||||||
index index.html;
|
|
||||||
try_files $uri $uri/ /status/index.html;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Cache pour les assets statiques
|
|
||||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 1h;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de statut des services (DOIT être avant location /)
|
|
||||||
location /status/api {
|
|
||||||
proxy_pass http://localhost:3006/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes AJAX
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 10s;
|
|
||||||
proxy_send_timeout 10s;
|
|
||||||
proxy_read_timeout 10s;
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:3003;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets;
|
|
||||||
try_files /favicon.ico =404;
|
|
||||||
access_log off;
|
|
||||||
expires 30d;
|
|
||||||
}
|
|
||||||
|
|
||||||
# lecoffre frontend
|
|
||||||
location = /lecoffre {
|
|
||||||
proxy_pass http://127.0.0.2:3004/lecoffre;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /lecoffre/ {
|
|
||||||
proxy_pass http://127.0.0.2:3004/lecoffre/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Next.js assets
|
|
||||||
location /_next/ {
|
|
||||||
proxy_pass http://127.0.0.2:3004/_next/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
}
|
|
||||||
|
|
||||||
# blindbit
|
|
||||||
location /blindbit/ {
|
|
||||||
proxy_pass http://localhost:8000/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
# Configuration Nginx pour Grafana
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name dev4.4nkweb.com;
|
|
||||||
|
|
||||||
# Proxy pour Grafana
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://127.0.0.1:3005/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Grafana
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# Support des WebSockets pour les live updates
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Proxy pour Loki (API)
|
|
||||||
location /loki/ {
|
|
||||||
proxy_pass http://127.0.0.1:3100/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes depuis Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
# Logging configuration for lecoffre front
|
|
||||||
|
|
||||||
log_format lecoffre_json escape=json
|
|
||||||
'{'
|
|
||||||
'"time":"$time_iso8601",'
|
|
||||||
'"request_id":"$request_id",'
|
|
||||||
'"remote_addr":"$remote_addr",'
|
|
||||||
'"host":"$host",'
|
|
||||||
'"method":"$request_method",'
|
|
||||||
'"uri":"$uri",'
|
|
||||||
'"args":"$args",'
|
|
||||||
'"status":$status,'
|
|
||||||
'"bytes":$body_bytes_sent,'
|
|
||||||
'"referer":"$http_referer",'
|
|
||||||
'"user_agent":"$http_user_agent",'
|
|
||||||
'"request_time":$request_time,'
|
|
||||||
'"upstream_addr":"$upstream_addr",'
|
|
||||||
'"upstream_status":"$upstream_status",'
|
|
||||||
'"upstream_connect_time":"$upstream_connect_time",'
|
|
||||||
'"upstream_header_time":"$upstream_header_time",'
|
|
||||||
'"upstream_response_time":"$upstream_response_time",'
|
|
||||||
'"x_forwarded_for":"$http_x_forwarded_for"'
|
|
||||||
'}';
|
|
||||||
|
|
||||||
# Default access and error logs for the front site
|
|
||||||
access_log /var/log/nginx/lecoffre_front_access.log lecoffre_json;
|
|
||||||
error_log /var/log/nginx/lecoffre_front_error.log warn;
|
|
||||||
|
|
||||||
# Map incoming X-Request-ID or generate one
|
|
||||||
map $http_x_request_id $x_request_id {
|
|
||||||
default $http_x_request_id;
|
|
||||||
"" $request_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
# These headers should be set in each proxy location of the vhost
|
|
||||||
# proxy_set_header X-Request-ID $x_request_id;
|
|
||||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
# proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
# proxy_set_header X-Forwarded-Host $host;
|
|
@ -1,470 +0,0 @@
|
|||||||
user www-data;
|
|
||||||
worker_processes auto;
|
|
||||||
pid /app/nginx.pid;
|
|
||||||
include /etc/nginx/modules-enabled/*.conf;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 1024;
|
|
||||||
use epoll;
|
|
||||||
multi_accept on;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
# Configuration de base
|
|
||||||
sendfile on;
|
|
||||||
tcp_nopush on;
|
|
||||||
tcp_nodelay on;
|
|
||||||
keepalive_timeout 65;
|
|
||||||
types_hash_max_size 2048;
|
|
||||||
server_tokens off;
|
|
||||||
|
|
||||||
# MIME types
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
# Logging
|
|
||||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
||||||
'$status $body_bytes_sent "$http_referer" '
|
|
||||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
|
||||||
|
|
||||||
access_log /app/logs/nginx/access.log main;
|
|
||||||
error_log /app/logs/nginx/error.log warn;
|
|
||||||
|
|
||||||
# Gzip compression
|
|
||||||
gzip on;
|
|
||||||
gzip_vary on;
|
|
||||||
gzip_proxied any;
|
|
||||||
gzip_comp_level 6;
|
|
||||||
gzip_types
|
|
||||||
text/plain
|
|
||||||
text/css
|
|
||||||
text/xml
|
|
||||||
text/javascript
|
|
||||||
application/json
|
|
||||||
application/javascript
|
|
||||||
application/xml+rss
|
|
||||||
application/atom+xml
|
|
||||||
image/svg+xml;
|
|
||||||
|
|
||||||
# Rate limiting
|
|
||||||
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
|
|
||||||
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
|
|
||||||
|
|
||||||
# Upstream servers
|
|
||||||
|
|
||||||
upstream lecoffre_frontend {
|
|
||||||
server localhost:3004;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream ihm_client {
|
|
||||||
server localhost:3003;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream grafana {
|
|
||||||
server localhost:3005;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream loki {
|
|
||||||
server localhost:3100;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream status_api {
|
|
||||||
server localhost:3006;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream sdk_relay {
|
|
||||||
server localhost:8090;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
upstream blindbit {
|
|
||||||
server localhost:8000;
|
|
||||||
keepalive 32;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Serveur principal HTTP (port 80)
|
|
||||||
server {
|
|
||||||
listen 80 default_server;
|
|
||||||
listen [::]:80 default_server;
|
|
||||||
server_name _;
|
|
||||||
|
|
||||||
# Redirection automatique vers HTTPS si disponible
|
|
||||||
return 301 https://$host$request_uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Serveur HTTPS (port 443)
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2 default_server;
|
|
||||||
listen [::]:443 ssl http2 default_server;
|
|
||||||
server_name _;
|
|
||||||
|
|
||||||
# Certificats SSL (auto-signés pour le développement)
|
|
||||||
ssl_certificate /app/ssl/nginx-selfsigned.crt;
|
|
||||||
ssl_certificate_key /app/ssl/nginx-selfsigned.key;
|
|
||||||
|
|
||||||
# Configuration SSL
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_session_cache shared:SSL:10m;
|
|
||||||
ssl_session_timeout 10m;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
|
||||||
|
|
||||||
# Page de statut des services
|
|
||||||
location /status/ {
|
|
||||||
alias /var/www/lecoffre/status/;
|
|
||||||
index index.html;
|
|
||||||
try_files $uri $uri/ /status/index.html;
|
|
||||||
|
|
||||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 1h;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de statut des services
|
|
||||||
location /status/api {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
proxy_pass http://status_api/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://grafana/;
|
|
||||||
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;
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# WebSocket support
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loki API - API de logs
|
|
||||||
location /loki/ {
|
|
||||||
limit_req zone=api burst=10 nodelay;
|
|
||||||
proxy_pass http://loki/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - routes /back/ vers /api/
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
proxy_pass http://lecoffre_backend/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - routes /api/
|
|
||||||
location /api/ {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
|
|
||||||
# CORS dynamique
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://localhost:3000|http://local\.4nkweb\.com:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://lecoffre_backend/api/;
|
|
||||||
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;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://sdk_relay/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de transfert de fonds
|
|
||||||
location /api/v1/funds/ {
|
|
||||||
limit_req zone=api burst=5 nodelay;
|
|
||||||
proxy_pass http://lecoffre_backend/api/v1/funds/;
|
|
||||||
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;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /var/www/lecoffre/assets;
|
|
||||||
try_files /favicon.ico =404;
|
|
||||||
}
|
|
||||||
|
|
||||||
# blindbit
|
|
||||||
location /blindbit/ {
|
|
||||||
proxy_pass http://blindbit/;
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
# LeCoffre Front - Application principale
|
|
||||||
# Redirige /lecoffre -> /lecoffre/
|
|
||||||
location = /lecoffre {
|
|
||||||
return 301 /lecoffre/;
|
|
||||||
}
|
|
||||||
location /lecoffre/ {
|
|
||||||
proxy_pass http://lecoffre_frontend/;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Next.js
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Server $host;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
location / {
|
|
||||||
proxy_pass http://ihm_client;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# API de statut des services
|
|
||||||
location /status/api {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
proxy_pass http://status_api/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://grafana/;
|
|
||||||
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;
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# WebSocket support
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - routes /back/ vers /api/
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
proxy_pass http://lecoffre_backend/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - routes /api/
|
|
||||||
location /api/ {
|
|
||||||
limit_req zone=api burst=20 nodelay;
|
|
||||||
|
|
||||||
# CORS dynamique pour développement local
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://local\.4nkweb\.com:3000|http://localhost:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://lecoffre_backend/api/;
|
|
||||||
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;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://sdk_relay/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
|
|
||||||
# LeCoffre Front - Application principale
|
|
||||||
# Redirige /lecoffre -> /lecoffre/
|
|
||||||
location = /lecoffre {
|
|
||||||
return 301 /lecoffre/;
|
|
||||||
}
|
|
||||||
location /lecoffre/ {
|
|
||||||
proxy_pass http://lecoffre_frontend/;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Next.js
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Server $host;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
location / {
|
|
||||||
proxy_pass http://ihm_client;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
136: location /api/ {
|
|
||||||
137: # CORS pour développement local Next.js
|
|
||||||
138: proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
139: proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
140: proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
141: proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
142:
|
|
||||||
143: if ($request_method = OPTIONS) {
|
|
||||||
144: add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
145: add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
146: add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
147: add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
148: return 204;
|
|
||||||
149: }
|
|
||||||
185: location /api/v1/funds/ {
|
|
||||||
186: proxy_pass http://dev3.4nkweb.com:8080/api/v1/funds/;
|
|
||||||
187: include /etc/nginx/proxy_params;
|
|
||||||
188: proxy_read_timeout 300;
|
|
||||||
189: proxy_connect_timeout 300;
|
|
||||||
190: proxy_send_timeout 300;
|
|
||||||
191: }
|
|
||||||
136: location /api/ {
|
|
||||||
137: # CORS pour développement local Next.js
|
|
||||||
138: proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
139: proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
140: proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
141: proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
142:
|
|
||||||
143: if ($request_method = OPTIONS) {
|
|
||||||
144: add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
145: add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
146: add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
147: add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
148: return 204;
|
|
||||||
149: }
|
|
||||||
150:
|
|
||||||
151: add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
152: add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
153: add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
154: add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
155:
|
|
||||||
156: proxy_set_header X-Request-ID $x_request_id;
|
|
||||||
157: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
158: proxy_set_header X-Forwarded-Proto $scheme;
|
|
@ -1,27 +0,0 @@
|
|||||||
Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
|
|
||||||
udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:*
|
|
||||||
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
|
|
||||||
udp UNCONN 0 0 92.243.24.12%enX0:68 0.0.0.0:*
|
|
||||||
udp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:*
|
|
||||||
udp UNCONN 0 0 [::]:5355 [::]:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("next-server (v1",pid=2772198,fd=25))
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3003 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3005 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3004 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3006 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:8081 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:8000 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:3100 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 511 127.0.0.1:43709 0.0.0.0:* users:(("node",pid=2771446,fd=19))
|
|
||||||
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 20 127.0.0.1:25 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 511 127.0.0.1:45431 0.0.0.0:* users:(("node",pid=2771409,fd=19))
|
|
||||||
tcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:*
|
|
||||||
tcp LISTEN 0 128 [::]:22 [::]:*
|
|
||||||
tcp LISTEN 0 4096 [::]:5355 [::]:*
|
|
||||||
tcp LISTEN 0 20 [::1]:25 [::]:*
|
|
@ -1 +0,0 @@
|
|||||||
20250925_072119
|
|
@ -1,48 +0,0 @@
|
|||||||
export class FrontendVariables {
|
|
||||||
private static instance: FrontendVariables;
|
|
||||||
|
|
||||||
public BACK_API_PROTOCOL!: string;
|
|
||||||
|
|
||||||
public BACK_API_HOST!: string;
|
|
||||||
|
|
||||||
public BACK_API_PORT!: string;
|
|
||||||
|
|
||||||
public BACK_API_ROOT_URL!: string;
|
|
||||||
|
|
||||||
public BACK_API_VERSION!: string;
|
|
||||||
|
|
||||||
public FRONT_APP_HOST!: string;
|
|
||||||
|
|
||||||
public IDNOT_BASE_URL!: string;
|
|
||||||
|
|
||||||
public IDNOT_AUTHORIZE_ENDPOINT!: string;
|
|
||||||
|
|
||||||
public IDNOT_CLIENT_ID!: string;
|
|
||||||
|
|
||||||
public IDNOT_REDIRECT_URI?: string;
|
|
||||||
|
|
||||||
public DOCAPOST_API_URL!: string;
|
|
||||||
|
|
||||||
public KEY_DATA!: string;
|
|
||||||
|
|
||||||
public FC_AUTHORIZE_ENDPOINT!: string;
|
|
||||||
|
|
||||||
public FC_CLIENT_ID!: string;
|
|
||||||
|
|
||||||
public HOTJAR_SITE_ID!: number;
|
|
||||||
|
|
||||||
public HOTJAR_VERSION!: number;
|
|
||||||
|
|
||||||
public _4NK_URL!: string;
|
|
||||||
|
|
||||||
public API_URL!: string;
|
|
||||||
|
|
||||||
private constructor() {}
|
|
||||||
|
|
||||||
public static getInstance(): FrontendVariables {
|
|
||||||
if (!this.instance) {
|
|
||||||
this.instance = new this();
|
|
||||||
}
|
|
||||||
return this.instance;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
import LoginCallBack from "@Front/Components/Layouts/LoginCallback";
|
|
||||||
import { useEffect } from "react";
|
|
||||||
|
|
||||||
export default function Route() {
|
|
||||||
useEffect(() => {
|
|
||||||
if (typeof window !== "undefined") {
|
|
||||||
const origin = window.location.origin;
|
|
||||||
const search = window.location.search || "";
|
|
||||||
// Forcer HTTPS et domaine dev4 après retour ID.not
|
|
||||||
if (!origin.startsWith("https://dev4.4nkweb.com")) {
|
|
||||||
const target = `https://dev4.4nkweb.com/lecoffre/authorized-client${search}`;
|
|
||||||
window.location.replace(target);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (origin.startsWith("http://dev3.4nkweb.com")) {
|
|
||||||
const search = window.location.search || "";
|
|
||||||
const target = `https://dev4.4nkweb.com/lecoffre/authorized-client${search}`;
|
|
||||||
window.location.replace(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return <LoginCallBack />;
|
|
||||||
}
|
|
@ -1,239 +0,0 @@
|
|||||||
import React, { useCallback, useEffect, useState } from "react";
|
|
||||||
import classes from "./classes.module.scss";
|
|
||||||
import Typography, { ETypo, ETypoColor } from "@Front/Components/DesignSystem/Typography";
|
|
||||||
//import Image from "next/image";
|
|
||||||
import Form from "@Front/Components/DesignSystem/Form";
|
|
||||||
import TextField from "@Front/Components/DesignSystem/Form/TextField";
|
|
||||||
import Button from "@Front/Components/DesignSystem/Button";
|
|
||||||
//import franceConnectLogo from "../france-connect.svg";
|
|
||||||
// import { useRouter } from "next/router";
|
|
||||||
// import Customers from "@Front/Api/Auth/Id360/Customers/Customers";
|
|
||||||
import { ValidationError } from "class-validator";
|
|
||||||
import Image from "next/image";
|
|
||||||
import LogoSmallBlue from "@Assets/logo_small_blue.svg";
|
|
||||||
|
|
||||||
import idNoteLogo from "@Assets/Icons/id-note-logo.svg";
|
|
||||||
import { useRouter } from "next/router";
|
|
||||||
import { FrontendVariables } from "@Front/Config/VariablesFront";
|
|
||||||
import Confirm from "@Front/Components/DesignSystem/OldModal/Confirm";
|
|
||||||
|
|
||||||
type IProps = {
|
|
||||||
onSubmit: (e: React.FormEvent<HTMLFormElement> | null, values: { [key: string]: string }) => void;
|
|
||||||
validationErrors: ValidationError[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function StepEmail(props: IProps) {
|
|
||||||
const { onSubmit, validationErrors } = props;
|
|
||||||
const [isErrorModalOpen, setIsErrorModalOpen] = useState(0);
|
|
||||||
|
|
||||||
// Forcer HTTPS dès le début pour éviter le contexte de sécurité mixte
|
|
||||||
useEffect(() => {
|
|
||||||
if (typeof window !== "undefined" && window.location.protocol === "http:") {
|
|
||||||
const target = `https://dev4.4nkweb.com/lecoffre${window.location.pathname}${window.location.search}`;
|
|
||||||
window.location.replace(target);
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
/* const router = useRouter();
|
|
||||||
const redirectCustomerOnConnection = useCallback(() => {
|
|
||||||
async function getCustomer() {
|
|
||||||
try {
|
|
||||||
const loginRes = await Customers.getInstance().login();
|
|
||||||
router.push(loginRes.enrollment.franceConnectUrl);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getCustomer();
|
|
||||||
}, [router]); */
|
|
||||||
|
|
||||||
const router = useRouter();
|
|
||||||
const error = router.query["error"];
|
|
||||||
const redirectUserOnConnection = useCallback(() => {
|
|
||||||
const variables = FrontendVariables.getInstance();
|
|
||||||
let redirectUri = variables.IDNOT_REDIRECT_URI || "";
|
|
||||||
if (!redirectUri) {
|
|
||||||
console.warn("[IDNOT] NEXT_PUBLIC_IDNOT_REDIRECT_URI vide; fallback sur FRONT_APP_HOST/authorized-client");
|
|
||||||
redirectUri = `${variables.FRONT_APP_HOST}/authorized-client`;
|
|
||||||
}
|
|
||||||
const authorizeBase = `${variables.IDNOT_BASE_URL}${variables.IDNOT_AUTHORIZE_ENDPOINT}`;
|
|
||||||
router.push(
|
|
||||||
`${authorizeBase}?client_id=${variables.IDNOT_CLIENT_ID}&redirect_uri=${encodeURIComponent(redirectUri)}&scope=openid,profile&response_type=code`,
|
|
||||||
);
|
|
||||||
}, [router]);
|
|
||||||
|
|
||||||
const openErrorModal = useCallback((index: number) => {
|
|
||||||
setIsErrorModalOpen(index);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const closeErrorModal = useCallback(() => {
|
|
||||||
setIsErrorModalOpen(0);
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const closeNoEmailModal = useCallback(() => {
|
|
||||||
setIsErrorModalOpen(0);
|
|
||||||
router.push("https://connexion.idnot.fr/");
|
|
||||||
}, [router]);
|
|
||||||
|
|
||||||
// const closeContactAdminModal = () => {
|
|
||||||
// setIsErrorModalOpen(0);
|
|
||||||
// window.open("https://www.lecoffre.io/contact", "_blank");
|
|
||||||
// };
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
openErrorModal(parseInt(error as string));
|
|
||||||
}, [error, openErrorModal]);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div className={classes["root"]}>
|
|
||||||
<div className={classes["header"]}>
|
|
||||||
<Image src={LogoSmallBlue} alt="Logo small blue" height="56" width="56" />
|
|
||||||
<Typography typo={ETypo.TITLE_H1} color={ETypoColor.TEXT_ACCENT}>
|
|
||||||
Bienvenue !
|
|
||||||
</Typography>
|
|
||||||
<Typography typo={ETypo.TITLE_H5}>Connectez-vous pour accéder à votre espace sécurisé.</Typography>
|
|
||||||
</div>
|
|
||||||
<div className={classes["content"]}>
|
|
||||||
<div className={classes["section"]}>
|
|
||||||
<Typography typo={ETypo.TITLE_H6} color={ETypoColor.TEXT_ACCENT} className={classes["section-title"]}>
|
|
||||||
Pour les notaires et les collaborateurs :
|
|
||||||
</Typography>
|
|
||||||
<Button onClick={redirectUserOnConnection} rightIcon={<Image alt="id-not-logo" src={idNoteLogo} />}>
|
|
||||||
S'identifier avec ID.not
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
<div className={classes["section"]}>
|
|
||||||
<Typography typo={ETypo.TITLE_H6} color={ETypoColor.TEXT_ACCENT} className={classes["section-title"]}>
|
|
||||||
Pour les clients :
|
|
||||||
</Typography>
|
|
||||||
<Form className={classes["form"]} onSubmit={onSubmit}>
|
|
||||||
{
|
|
||||||
<TextField
|
|
||||||
placeholder="Renseigner votre email"
|
|
||||||
label="E-mail"
|
|
||||||
name="email"
|
|
||||||
validationError={validationErrors.find((err) => err.property === "email")}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
<Button type="submit">Se connecter</Button>
|
|
||||||
</Form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<Confirm
|
|
||||||
isOpen={isErrorModalOpen === 1}
|
|
||||||
onClose={closeErrorModal}
|
|
||||||
showCancelButton={false}
|
|
||||||
onAccept={closeErrorModal}
|
|
||||||
closeBtn
|
|
||||||
header={"Problème de connexion"}
|
|
||||||
confirmText={"Fermer"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_LIGHT} className={classes["text"]}>
|
|
||||||
Une erreur est survenue lors de la connexion. Veuillez réessayer ou contacter le support si le problème persiste.
|
|
||||||
</Typography>
|
|
||||||
<a className={classes["modal-button"]} href="mailto:support@lecoffre.io" target="_blank">
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} color={ETypoColor.COLOR_SECONDARY_500} className={classes["button-text"]}>
|
|
||||||
Contactez le support
|
|
||||||
</Typography>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</Confirm>
|
|
||||||
<Confirm
|
|
||||||
isOpen={isErrorModalOpen === 2}
|
|
||||||
onClose={closeErrorModal}
|
|
||||||
showCancelButton={false}
|
|
||||||
onAccept={closeErrorModal}
|
|
||||||
closeBtn
|
|
||||||
header={"Session expirée"}
|
|
||||||
confirmText={"OK"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
Veuillez vous reconnecter.
|
|
||||||
</Typography>
|
|
||||||
</div>
|
|
||||||
</Confirm>
|
|
||||||
<Confirm
|
|
||||||
isOpen={isErrorModalOpen === 3}
|
|
||||||
onClose={closeErrorModal}
|
|
||||||
onAccept={closeNoEmailModal}
|
|
||||||
closeBtn
|
|
||||||
header={"E-mail Professionnel Manquant"}
|
|
||||||
confirmText={"Accéder à mon compte ID.not"}
|
|
||||||
cancelText={"Fermer"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
Votre e-mail professionnel n'est pas renseigné sur votre compte ID.Not. Merci de l'ajouter pour accéder à ce
|
|
||||||
service. Pour toute question, contactez-nous à support@lecoffre.io.
|
|
||||||
</Typography>
|
|
||||||
<a className={classes["modal-button"]} href="mailto:support@lecoffre.io" target="_blank">
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} color={ETypoColor.COLOR_SECONDARY_500} className={classes["button-text"]}>
|
|
||||||
Contactez le support
|
|
||||||
</Typography>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</Confirm>
|
|
||||||
<Confirm
|
|
||||||
isOpen={isErrorModalOpen === 4}
|
|
||||||
onClose={closeErrorModal}
|
|
||||||
showCancelButton={false}
|
|
||||||
onAccept={closeErrorModal}
|
|
||||||
closeBtn
|
|
||||||
header={"Connexion à ID.Not impossible"}
|
|
||||||
confirmText={"Fermer"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
Notre partenaire ID.Not rencontre actuellement un problème technique. Nous vous tiendrons informé de l'évolution.
|
|
||||||
Pour toute question, contactez-nous à support@lecoffre.io.
|
|
||||||
</Typography>
|
|
||||||
<a className={classes["modal-button"]} href="mailto:support@lecoffre.io" target="_blank">
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} color={ETypoColor.COLOR_SECONDARY_500} className={classes["button-text"]}>
|
|
||||||
Contactez le support
|
|
||||||
</Typography>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</Confirm>
|
|
||||||
{/* <Confirm
|
|
||||||
isOpen={isErrorModalOpen === 4}
|
|
||||||
onClose={closeErrorModal}
|
|
||||||
onAccept={closeContactAdminModal}
|
|
||||||
closeBtn
|
|
||||||
header={"Vous n’êtes pas bêta-testeur"}
|
|
||||||
confirmText={"Contacter l'administrateur"}
|
|
||||||
cancelText={"OK"}>
|
|
||||||
<div className={classes["modal-content"]}>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
L'accès à la version bêta de lecoffre.io est limité à un groupe restreint d'utilisateurs autorisés.
|
|
||||||
</Typography>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
Si vous êtes intéressé par la participation à notre programme de bêta-test, veuillez nous compléter le
|
|
||||||
formulaire :{" "}
|
|
||||||
<a
|
|
||||||
href="https://www.lecoffre.io/contact"
|
|
||||||
target="_blank"
|
|
||||||
style={{ color: "blue", textDecoration: "underline" }}>
|
|
||||||
https://www.lecoffre.io/contact
|
|
||||||
</a>
|
|
||||||
</Typography>
|
|
||||||
</li>
|
|
||||||
<div style={{ marginBottom: "10px" }}></div>
|
|
||||||
<li>
|
|
||||||
<Typography typo={ETypo.TEXT_MD_REGULAR} className={classes["text"]}>
|
|
||||||
Si vous avez déjà un compte bêta-testeur, veuillez vous connecter sur{" "}
|
|
||||||
<a
|
|
||||||
href="https://compte.idnot.fr/home"
|
|
||||||
target="_blank"
|
|
||||||
style={{ color: "blue", textDecoration: "underline" }}>
|
|
||||||
https://compte.idnot.fr/home
|
|
||||||
</a>{" "}
|
|
||||||
et vérifier que l'adresse mail renseignée sur votre espace est identique à celle que vous nous avez
|
|
||||||
communiquée.
|
|
||||||
</Typography>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</Confirm> */}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
|
||||||
|
|
||||||
const nextConfig = {
|
|
||||||
reactStrictMode: false,
|
|
||||||
output: 'standalone',
|
|
||||||
basePath: '/lecoffre',
|
|
||||||
typescript: {
|
|
||||||
ignoreBuildErrors: true,
|
|
||||||
},
|
|
||||||
publicRuntimeConfig: {
|
|
||||||
// Will be available on both server and client
|
|
||||||
NEXT_PUBLIC_BACK_API_PROTOCOL: process.env.NEXT_PUBLIC_BACK_API_PROTOCOL,
|
|
||||||
NEXT_PUBLIC_BACK_API_HOST: process.env.NEXT_PUBLIC_BACK_API_HOST,
|
|
||||||
NEXT_PUBLIC_BACK_API_PORT: process.env.NEXT_PUBLIC_BACK_API_PORT,
|
|
||||||
NEXT_PUBLIC_BACK_API_ROOT_URL: process.env.NEXT_PUBLIC_BACK_API_ROOT_URL,
|
|
||||||
NEXT_PUBLIC_BACK_API_VERSION: process.env.NEXT_PUBLIC_BACK_API_VERSION,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_HOST: process.env.NEXT_PUBLIC_FRONT_APP_HOST,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_PORT: process.env.NEXT_PUBLIC_FRONT_APP_PORT,
|
|
||||||
NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT: process.env.NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT,
|
|
||||||
NEXT_PUBLIC_IDNOT_CLIENT_ID: process.env.NEXT_PUBLIC_IDNOT_CLIENT_ID,
|
|
||||||
NEXT_PUBLIC_IDNOT_BASE_URL: process.env.NEXT_PUBLIC_IDNOT_BASE_URL,
|
|
||||||
NEXT_PUBLIC_IDNOT_REDIRECT_URI: process.env.NEXT_PUBLIC_IDNOT_REDIRECT_URI,
|
|
||||||
NEXT_PUBLIC_DOCAPOSTE_API_URL: process.env.NEXT_PUBLIC_DOCAPOSTE_API_URL,
|
|
||||||
NEXT_PUBLIC_4NK_URL: process.env.NEXT_PUBLIC_4NK_URL,
|
|
||||||
NEXT_PUBLIC_4NK_IFRAME_URL: process.env.NEXT_PUBLIC_4NK_IFRAME_URL,
|
|
||||||
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
|
|
||||||
NEXT_PUBLIC_DEFAULT_VALIDATOR_ID: process.env.NEXT_PUBLIC_DEFAULT_VALIDATOR_ID,
|
|
||||||
NEXT_PUBLIC_DEFAULT_STORAGE_URLS: process.env.NEXT_PUBLIC_DEFAULT_STORAGE_URLS,
|
|
||||||
},
|
|
||||||
|
|
||||||
serverRuntimeConfig: {
|
|
||||||
NEXT_PUBLIC_BACK_API_PROTOCOL: process.env.NEXT_PUBLIC_BACK_API_PROTOCOL,
|
|
||||||
NEXT_PUBLIC_BACK_API_HOST: process.env.NEXT_PUBLIC_BACK_API_HOST,
|
|
||||||
NEXT_PUBLIC_BACK_API_PORT: process.env.NEXT_PUBLIC_BACK_API_PORT,
|
|
||||||
NEXT_PUBLIC_BACK_API_ROOT_URL: process.env.NEXT_PUBLIC_BACK_API_ROOT_URL,
|
|
||||||
NEXT_PUBLIC_BACK_API_VERSION: process.env.NEXT_PUBLIC_BACK_API_VERSION,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_HOST: process.env.NEXT_PUBLIC_FRONT_APP_HOST,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_PORT: process.env.NEXT_PUBLIC_FRONT_APP_PORT,
|
|
||||||
NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT: process.env.NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT,
|
|
||||||
NEXT_PUBLIC_IDNOT_CLIENT_ID: process.env.NEXT_PUBLIC_IDNOT_CLIENT_ID,
|
|
||||||
NEXT_PUBLIC_IDNOT_BASE_URL: process.env.NEXT_PUBLIC_IDNOT_BASE_URL,
|
|
||||||
NEXT_PUBLIC_IDNOT_REDIRECT_URI: process.env.NEXT_PUBLIC_IDNOT_REDIRECT_URI,
|
|
||||||
NEXT_PUBLIC_DOCAPOSTE_API_URL: process.env.NEXT_PUBLIC_DOCAPOSTE_API_URL,
|
|
||||||
NEXT_PUBLIC_4NK_URL: process.env.NEXT_PUBLIC_4NK_URL,
|
|
||||||
NEXT_PUBLIC_4NK_IFRAME_URL: process.env.NEXT_PUBLIC_4NK_IFRAME_URL,
|
|
||||||
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
|
|
||||||
NEXT_PUBLIC_DEFAULT_VALIDATOR_ID: process.env.NEXT_PUBLIC_DEFAULT_VALIDATOR_ID,
|
|
||||||
NEXT_PUBLIC_DEFAULT_STORAGE_URLS: process.env.NEXT_PUBLIC_DEFAULT_STORAGE_URLS,
|
|
||||||
},
|
|
||||||
|
|
||||||
env: {
|
|
||||||
NEXT_PUBLIC_BACK_API_PROTOCOL: process.env.NEXT_PUBLIC_BACK_API_PROTOCOL,
|
|
||||||
NEXT_PUBLIC_BACK_API_HOST: process.env.NEXT_PUBLIC_BACK_API_HOST,
|
|
||||||
NEXT_PUBLIC_BACK_API_PORT: process.env.NEXT_PUBLIC_BACK_API_PORT,
|
|
||||||
NEXT_PUBLIC_BACK_API_ROOT_URL: process.env.NEXT_PUBLIC_BACK_API_ROOT_URL,
|
|
||||||
NEXT_PUBLIC_BACK_API_VERSION: process.env.NEXT_PUBLIC_BACK_API_VERSION,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_HOST: process.env.NEXT_PUBLIC_FRONT_APP_HOST,
|
|
||||||
NEXT_PUBLIC_FRONT_APP_PORT: process.env.NEXT_PUBLIC_FRONT_APP_PORT,
|
|
||||||
NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT: process.env.NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT,
|
|
||||||
NEXT_PUBLIC_IDNOT_CLIENT_ID: process.env.NEXT_PUBLIC_IDNOT_CLIENT_ID,
|
|
||||||
NEXT_PUBLIC_IDNOT_BASE_URL: process.env.NEXT_PUBLIC_IDNOT_BASE_URL,
|
|
||||||
NEXT_PUBLIC_IDNOT_REDIRECT_URI: process.env.NEXT_PUBLIC_IDNOT_REDIRECT_URI,
|
|
||||||
NEXT_PUBLIC_DOCAPOSTE_API_URL: process.env.NEXT_PUBLIC_DOCAPOSTE_API_URL,
|
|
||||||
NEXT_PUBLIC_4NK_URL: process.env.NEXT_PUBLIC_4NK_URL,
|
|
||||||
NEXT_PUBLIC_4NK_IFRAME_URL: process.env.NEXT_PUBLIC_4NK_IFRAME_URL,
|
|
||||||
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL,
|
|
||||||
NEXT_PUBLIC_DEFAULT_VALIDATOR_ID: process.env.NEXT_PUBLIC_DEFAULT_VALIDATOR_ID,
|
|
||||||
NEXT_PUBLIC_DEFAULT_STORAGE_URLS: process.env.NEXT_PUBLIC_DEFAULT_STORAGE_URLS,
|
|
||||||
},
|
|
||||||
|
|
||||||
// webpack: config => {
|
|
||||||
// config.node = {
|
|
||||||
// fs: 'empty',
|
|
||||||
// child_process: 'empty',
|
|
||||||
// net: 'empty',
|
|
||||||
// dns: 'empty',
|
|
||||||
// tls: 'empty',
|
|
||||||
// };
|
|
||||||
// return config;
|
|
||||||
// },
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = nextConfig;
|
|
@ -1 +0,0 @@
|
|||||||
20250925_072119
|
|
@ -1,15 +0,0 @@
|
|||||||
# HTTP server for ACME and redirect to HTTPS
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name dev4.4nkweb.com;
|
|
||||||
|
|
||||||
# ACME HTTP-01 challenges
|
|
||||||
location /.well-known/acme-challenge/ {
|
|
||||||
root /var/www/letsencrypt;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Redirection vers HTTPS pour toutes les autres requêtes
|
|
||||||
location / {
|
|
||||||
return 301 https://$server_name$request_uri;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,221 +0,0 @@
|
|||||||
# Configuration HTTPS pour dev4.4nkweb.com
|
|
||||||
server {
|
|
||||||
listen 443 ssl http2;
|
|
||||||
server_name dev4.4nkweb.com;
|
|
||||||
|
|
||||||
# Certificats SSL
|
|
||||||
ssl_certificate /etc/letsencrypt/live/dev4.4nkweb.com/fullchain.pem;
|
|
||||||
ssl_certificate_key /etc/letsencrypt/live/dev4.4nkweb.com/privkey.pem;
|
|
||||||
|
|
||||||
# Configuration SSL
|
|
||||||
ssl_protocols TLSv1.2 TLSv1.3;
|
|
||||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
|
|
||||||
ssl_prefer_server_ciphers off;
|
|
||||||
ssl_session_cache shared:SSL:10m;
|
|
||||||
ssl_session_timeout 10m;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header Strict-Transport-Security "max-age=63072000" always;
|
|
||||||
add_header X-Frame-Options DENY always;
|
|
||||||
add_header X-Content-Type-Options nosniff always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Grafana - Interface de monitoring (DOIT être avant location /)
|
|
||||||
location /grafana/ {
|
|
||||||
proxy_pass http://localhost:3005/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# Configuration spécifique pour Grafana
|
|
||||||
proxy_set_header X-Grafana-Org-Id 1;
|
|
||||||
|
|
||||||
# Support des WebSockets pour les live updates
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 60s;
|
|
||||||
proxy_send_timeout 60s;
|
|
||||||
proxy_read_timeout 60s;
|
|
||||||
|
|
||||||
# Buffer settings
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_request_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Loki API - API de logs (DOIT être avant location /)
|
|
||||||
location /loki/ {
|
|
||||||
proxy_pass http://localhost:3100/;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes depuis Grafana
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Page de statut des services (DOIT être avant location /)
|
|
||||||
location /status {
|
|
||||||
# Redirection vers /status/
|
|
||||||
return 301 /status/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /status/ {
|
|
||||||
# Serveur statique pour la page HTML
|
|
||||||
alias /var/www/lecoffre/status/;
|
|
||||||
index index.html;
|
|
||||||
try_files $uri $uri/ /status/index.html;
|
|
||||||
|
|
||||||
# Headers de sécurité
|
|
||||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
||||||
add_header X-Content-Type-Options "nosniff" always;
|
|
||||||
add_header X-XSS-Protection "1; mode=block" always;
|
|
||||||
|
|
||||||
# Cache pour les assets statiques
|
|
||||||
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
|
|
||||||
expires 1h;
|
|
||||||
add_header Cache-Control "public, immutable";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de statut des services (DOIT être avant location /)
|
|
||||||
location /status/api {
|
|
||||||
proxy_pass http://localhost:3006/api;
|
|
||||||
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;
|
|
||||||
|
|
||||||
# CORS pour les requêtes AJAX
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, Authorization";
|
|
||||||
|
|
||||||
# Timeouts
|
|
||||||
proxy_connect_timeout 10s;
|
|
||||||
proxy_send_timeout 10s;
|
|
||||||
proxy_read_timeout 10s;
|
|
||||||
|
|
||||||
if ($request_method = 'OPTIONS') {
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# API backend - route /back/ vers /api/ du backend
|
|
||||||
location ~* ^/back/(.*)$ {
|
|
||||||
proxy_pass http://localhost:8080/api/$1;
|
|
||||||
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;
|
|
||||||
proxy_set_header Connection "";
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API direct - route /api/ vers le backend
|
|
||||||
# Autorisations CORS dynamiques pour origines connues
|
|
||||||
set $cors_origin "";
|
|
||||||
if ($http_origin ~* ^(http://local\.4nkweb\.com:3000|https://dev4\.4nkweb\.com)$) {
|
|
||||||
set $cors_origin $http_origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /api/ {
|
|
||||||
# CORS pour développement local Next.js
|
|
||||||
proxy_hide_header Access-Control-Allow-Origin;
|
|
||||||
proxy_hide_header Access-Control-Allow-Credentials;
|
|
||||||
proxy_hide_header Access-Control-Allow-Headers;
|
|
||||||
proxy_hide_header Access-Control-Allow-Methods;
|
|
||||||
|
|
||||||
if ($request_method = OPTIONS) {
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
return 204;
|
|
||||||
}
|
|
||||||
|
|
||||||
add_header Access-Control-Allow-Origin $cors_origin always;
|
|
||||||
add_header Access-Control-Allow-Credentials "true" always;
|
|
||||||
add_header Access-Control-Allow-Headers "Content-Type, x-session-id, Authorization" always;
|
|
||||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
|
||||||
|
|
||||||
proxy_pass http://dev3.4nkweb.com:8080/api/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# WebSocket relay (sdk_relay)
|
|
||||||
location /ws/ {
|
|
||||||
proxy_pass http://localhost:8090/;
|
|
||||||
proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
|
|
||||||
proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
|
|
||||||
proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
|
|
||||||
proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;
|
|
||||||
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;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 86400;
|
|
||||||
}
|
|
||||||
|
|
||||||
# API de transfert de fonds
|
|
||||||
location /api/v1/funds/ {
|
|
||||||
proxy_pass http://dev3.4nkweb.com:8080/api/v1/funds/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /home/debian/lecoffre_node/conf/nginx/assets;
|
|
||||||
try_files /favicon.ico =404;
|
|
||||||
}
|
|
||||||
|
|
||||||
# blindbit
|
|
||||||
location /blindbit/ {
|
|
||||||
proxy_pass http://localhost:8000/;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
}
|
|
||||||
|
|
||||||
# signer (sdk_signer) avec support WebSocket
|
|
||||||
|
|
||||||
# lecoffre-front - Application LeCoffre
|
|
||||||
location /lecoffre {
|
|
||||||
proxy_pass http://localhost:3004;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
proxy_send_timeout 300;
|
|
||||||
proxy_connect_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ihm_client (root) - DOIT être en dernier
|
|
||||||
location / {
|
|
||||||
proxy_pass http://localhost:3003;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 0.0.0.0:3000;
|
|
||||||
listen [::]:3000;
|
|
||||||
server_name local.4nkweb.com;
|
|
||||||
|
|
||||||
# HTTP pur: pas de HTTPS ni HSTS
|
|
||||||
|
|
||||||
# Favicon
|
|
||||||
location = /favicon.ico {
|
|
||||||
root /home/debian/lecoffre_node/conf/nginx/assets;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Compat: callback ID.not sans basePath (toutes variantes et querystring)
|
|
||||||
location /authorized-client {
|
|
||||||
proxy_pass http://127.0.0.2:3004/lecoffre/authorized-client;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_set_header X-Forwarded-Prefix /lecoffre;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Entrée sans slash
|
|
||||||
location = /lecoffre {
|
|
||||||
proxy_pass http://127.0.0.2:3004;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_set_header X-Forwarded-Prefix /lecoffre;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# BasePath /lecoffre
|
|
||||||
location /lecoffre/ {
|
|
||||||
proxy_pass http://127.0.0.2:3004;
|
|
||||||
include /etc/nginx/proxy_params;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_set_header X-Forwarded-Prefix /lecoffre;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
# HMR (si utilisé en local)
|
|
||||||
location /lecoffre/_next/webpack-hmr {
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_buffering off;
|
|
||||||
proxy_pass http://127.0.0.2:3004/lecoffre/_next/webpack-hmr;
|
|
||||||
proxy_read_timeout 600s;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Assets Next.js
|
|
||||||
location ~* ^(/_next/static/|/lecoffre/_next/static/|/.+\.(?:css|js|png|jpg|jpeg|gif|svg|ico|webp|woff2?))$ {
|
|
||||||
expires 7d;
|
|
||||||
add_header Cache-Control "public, max-age=604800, immutable" always;
|
|
||||||
proxy_pass http://127.0.0.2:3004$request_uri;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Proto http;
|
|
||||||
proxy_read_timeout 300;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name local.4nkweb.com;
|
|
||||||
|
|
||||||
# HTTP only: pas de redirection HTTPS, pas d'HSTS
|
|
||||||
location / {
|
|
||||||
return 302 http://local.4nkweb.com:3000$request_uri;
|
|
||||||
}
|
|
||||||
}
|
|
@ -77,3 +77,5 @@
|
|||||||
- ✅ CORS dev3: OPTIONS 204 + POST state 200
|
- ✅ CORS dev3: OPTIONS 204 + POST state 200
|
||||||
- ✅ ihm_client: `/` → 200
|
- ✅ ihm_client: `/` → 200
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,3 +39,5 @@ Vue d’ensemble
|
|||||||
- Checks publics: `/lecoffre` = 301 → `/lecoffre/`, `/lecoffre/` = 200.
|
- Checks publics: `/lecoffre` = 301 → `/lecoffre/`, `/lecoffre/` = 200.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,3 +28,5 @@ Notes
|
|||||||
- Nginx: rediriger `/lecoffre` → `/lecoffre/`, et proxy sur `^~ /lecoffre/` vers `http://localhost:3004`
|
- Nginx: rediriger `/lecoffre` → `/lecoffre/`, et proxy sur `^~ /lecoffre/` vers `http://localhost:3004`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user