diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..19fa119 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +## [Unreleased] +### Corrections WebSocket et configuration du signer +- **Configuration du signer** : Ajout des variables d'environnement manquantes (RELAY_URLS, SIGNER_WS_URL, SIGNER_BASE_URL) +- **Documentation WebSocket** : Ajout de `docs/CORRECTIONS_WEBSOCKET.md` avec analyse complète des problèmes +- **Configuration Nginx** : Headers WebSocket explicites ajoutés pour `/ws/` et `/signer/` +- **Analyse de l'iframe** : Logique de fonctionnement de `ihm_client` documentée +- **Problème persistant** : Nginx ne transmet pas les headers WebSocket vers le relay (502 Bad Gateway) + +## [1.0.0] +### Version initiale +- Configuration Docker Compose complète +- Services : tor, bitcoin, blindbit, sdk_storage, sdk_relay, sdk_signer, ihm_client, lecoffre-front, lecoffre-back +- Configuration Nginx pour dev4.4nkweb.com +- Scripts de démarrage et validation diff --git a/conf/nginx/dev4.4nkweb.com.conf b/conf/nginx/dev4.4nkweb.com.conf index 80408aa..4f41d83 100644 --- a/conf/nginx/dev4.4nkweb.com.conf +++ b/conf/nginx/dev4.4nkweb.com.conf @@ -88,6 +88,10 @@ server { # WebSocket relay (sdk_relay) location /ws/ { proxy_pass http://127.0.0.1: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"; diff --git a/conf/nginx/dev4.4nkweb.com.conf.backup b/conf/nginx/dev4.4nkweb.com.conf.backup index 43bafad..80408aa 100644 --- a/conf/nginx/dev4.4nkweb.com.conf.backup +++ b/conf/nginx/dev4.4nkweb.com.conf.backup @@ -98,6 +98,15 @@ server { proxy_read_timeout 300; } + # API de transfert de fonds + location /api/v1/funds/ { + proxy_pass http://127.0.0.1:8080/api/v1/funds/; + include /etc/nginx/proxy_params; + proxy_read_timeout 300; + proxy_connect_timeout 300; + proxy_send_timeout 300; + } + # ihm_client (root) location / { proxy_pass http://127.0.0.1:3003; diff --git a/docker-compose.yml b/docker-compose.yml index 1a9be6d..94aa954 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -204,6 +204,10 @@ services: labels: - "com.centurylinklabs.watchtower.enable=true" restart: unless-stopped + environment: + - SIGNER_WS_URL=ws://dev3.4nkweb.com:9090 + - SIGNER_BASE_URL=https://dev3.4nkweb.com + - RELAY_URLS=wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ sdk_storage: image: git.4nkweb.com/4nk/sdk_storage:ext diff --git a/docs/CORRECTIONS_WEBSOCKET.md b/docs/CORRECTIONS_WEBSOCKET.md index 47f20c1..806eedf 100644 --- a/docs/CORRECTIONS_WEBSOCKET.md +++ b/docs/CORRECTIONS_WEBSOCKET.md @@ -1,34 +1,62 @@ -# Corrections WebSocket - LeCoffre Node +# Corrections WebSocket - lecoffre_node -## Problème identifié -L'iframe `ihm_client` était bloquée sur "Chargement de l'authentification..." car la connexion WebSocket échouait. +## Problèmes identifiés et résolus -## Cause racine -- Nginx était configuré pour pointer vers `127.0.0.1:8090` -- Le relay `sdk_relay` écoute sur `0.0.0.0:8090` dans le réseau Docker -- Les requêtes HTTP simples étaient rejetées (erreur "Unsupported HTTP method") +### 1. Configuration du signer (sdk_signer) +**Problème :** Le signer essayait de se connecter au relay sur `127.0.0.1:8090` au lieu d'utiliser les URLs configurées. -## Solution appliquée -1. **Configuration Nginx corrigée** : `proxy_pass http://127.0.0.1:8090/` -2. **Headers WebSocket requis** : - - `Upgrade: websocket` - - `Connection: upgrade` - - `Sec-WebSocket-Version: 13` - - `Sec-WebSocket-Key: [base64-encoded-key]` - -## Test de validation -```bash -curl -v -H "Upgrade: websocket" -H "Connection: upgrade" \ - -H "Sec-WebSocket-Version: 13" \ - -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \ - https://dev4.4nkweb.com/ws/ +**Solution :** Ajout des variables d'environnement manquantes dans `docker-compose.yml` : +```yaml +sdk_signer: + environment: + - SIGNER_WS_URL=ws://dev3.4nkweb.com:9090 + - SIGNER_BASE_URL=https://dev3.4nkweb.com + - RELAY_URLS=wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ ``` -Résultat attendu : `HTTP/1.1 101 Switching Protocols` +**Résultat :** Le signer fonctionne maintenant correctement et se connecte aux bons endpoints. -## Configuration durable -- Utilisation du port mappé `127.0.0.1:8090` (stable) -- Éviter les IPs de containers (changent à chaque redémarrage) +### 2. Configuration Nginx pour WebSockets +**Problème :** Nginx ne transmettait pas correctement les headers WebSocket vers le relay. -## Date -2025-09-20 +**Solution :** Ajout des headers WebSocket explicites dans `/conf/nginx/dev4.4nkweb.com.conf` : +```nginx +location /ws/ { + proxy_pass http://127.0.0.1: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"; + # ... autres headers +} +``` + +### 3. Logique de fonctionnement de l'iframe +**Analyse :** Structure de l'iframe `ihm_client` identifiée : +- `init()` dans `router.ts` initialise les services +- `Services.getInstance()` crée l'instance singleton +- `connectAllRelays()` établit les connexions WebSocket +- Configuration WebSocket : `wss://dev4.4nkweb.com/ws/` + +### 4. Vérification des appels WebSocket +**Confirmé :** Tous les appels WebSocket sont correctement dirigés vers des services WebSocket : +- `/ws/` → `sdk_relay:8090` (WebSocket) ✅ +- `/signer/` → `sdk_signer:3001` (WebSocket) ✅ +- `/lecoffre/` → `lecoffre-front:3004` (HTTP) ✅ + +## Problème persistant + +### Nginx WebSocket Headers +**Statut :** ⚠️ Problème persistant +- Nginx ne transmet toujours pas les headers WebSocket vers le relay +- 502 Bad Gateway depuis l'iframe +- Le relay rejette les connexions sans headers +- Erreur : `"No Upgrade: websocket header"` + +**Prochaines étapes :** Investigation plus approfondie de la configuration Nginx ou utilisation d'un proxy WebSocket dédié. + +## Date de mise à jour +2025-01-20 - Corrections WebSocket et configuration du signer \ No newline at end of file