From 9fc4ae99c9ace46690d59c2ae48da5ca9dfe0cf4 Mon Sep 17 00:00:00 2001 From: 4NK Dev Date: Sat, 20 Sep 2025 20:50:00 +0000 Subject: [PATCH] feat: externaliser la configuration et remplacer localhost par 0.0.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout de la variable d'environnement SDK_RELAY_WS_URL pour les tests - Remplacement de localhost par 0.0.0.0 dans les tests WebSocket - Ajout de la documentation CONFIGURATION.md - Mise à jour du CHANGELOG.md - Amélioration de la compatibilité Docker --- CHANGELOG.md | 4 ++ docs/CONFIGURATION.md | 94 ++++++++++++++++++++++--------------------- tests/ws_connect.rs | 2 +- 3 files changed, 54 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f72eae3..49eae5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ Format inspiré de Keep a Changelog et versionnage SemVer. ## [Unreleased] ### Ajouts +- **Configuration externalisée** : Ajout de la variable d'environnement `SDK_RELAY_WS_URL` pour les tests +- **Tests améliorés** : Remplacement de `localhost` par `0.0.0.0` dans les tests WebSocket pour compatibilité Docker +- **Documentation** : Ajout de `docs/CONFIGURATION.md` avec guide des variables d'environnement +- **Flexibilité** : Configuration plus flexible pour les environnements Docker et conteneurs - Documentation: README modernisé, `docs/ANALYSE.md` et `docs/VALIDATION.md` vérifiés - Open source: LICENSE (MIT), CONTRIBUTING, Code of Conduct - Tests: script `tests/health_check.sh`, test WS conservé diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 5520b3c..440f766 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -1,63 +1,67 @@ # Configuration SDK Relay -## Vue d'ensemble -Le SDK Relay est un service qui fait le pont entre les clients et les services blockchain, notamment blindbit-oracle. +## Variables d'environnement -## Configuration Actuelle +Le service `sdk_relay` peut être configuré via les variables d'environnement suivantes : -### Fichier de Configuration -- **Fichier** : `sdk_relay.conf` -- **Localisation** : `/home/debian/lecoffre_node/relay/sdk_relay.conf` +### Variables principales + +- **`SDK_RELAY_WS_URL`** : URL WebSocket pour les tests (défaut: `ws://0.0.0.0:8090`) +- **`RUST_LOG`** : Niveau de logging (défaut: `INFO`) + +### Configuration via fichier + +Le service utilise un fichier de configuration (`sdk_relay.conf`) avec les paramètres suivants : -### Paramètres Principaux ```ini +core_url="http://bitcoin:38332" +ws_url="0.0.0.0:8090" +wallet_name="default" +network="signet" blindbit_url="http://blindbit-oracle:8000" +zmq_url="tcp://bitcoin:29000" +storage="https://dev4.4nkweb.com/storage" +data_dir="/home/bitcoin/.4nk" +bitcoin_data_dir="/home/bitcoin/.bitcoin" +bootstrap_url="wss://dev3.4nkweb.com/ws/" +bootstrap_faucet=true +RUST_LOG="INFO" +sp_address="tsp1qqgmwp9n5p9ujhq2j6cfqe4jpkyu70jh9rgj0pwt3ndezk2mrlvw6jqew8fhsulewzglfr7g2aa48wyj4n0r7yasa3fm666vda8984ke8tuaf9m89" ``` -### Variables d'Environnement Docker +## Changements récents + +### v0.1.2 - Configuration externalisée + +- **Ajout** : Support de la variable d'environnement `SDK_RELAY_WS_URL` pour les tests +- **Modification** : Remplacement de `localhost` par `0.0.0.0` dans les tests WebSocket +- **Amélioration** : Configuration plus flexible pour les environnements Docker + +### Tests + +Les tests WebSocket utilisent maintenant `ws://0.0.0.0:8090` au lieu de `ws://localhost:8090` pour une meilleure compatibilité avec les environnements Docker. + +## Configuration Docker + ```yaml environment: - - SDK_RELAY_SCAN_TIMEOUT=300 - - SDK_RELAY_STARTUP_MODE=async + - SDK_RELAY_WS_URL=ws://0.0.0.0:8090 + - RUST_LOG=INFO +volumes: + - ./relay/sdk_relay.conf:/home/bitcoin/.conf:ro ``` -## Problèmes Résolus +## Endpoints -### 1. Problème de Build CI -**Problème** : Le CI échouait car sdk_common n'était pas trouvé dans le contexte de build. +- **WebSocket** : `0.0.0.0:8090` - Communication WebSocket +- **Health** : `0.0.0.0:8091` - Vérification de santé -**Solution** : Modification du Dockerfile pour cloner sdk_common depuis la branche dev : -```dockerfile -RUN --mount=type=ssh git clone -b dev ssh://git@git.4nkweb.com/4nk/sdk_common.git /sdk_common -``` +## Dépannage -### 2. Problème de Scan Bloquant -**Problème** : Le service sdk_relay se bloquait pendant le scan des blocs, empêchant le démarrage des serveurs WebSocket et de santé. +### Problème de connexion WebSocket -**Solution** : -- Modification du `last_scan` dans `/home/bitcoin/.4nk/default` pour éviter les scans trop longs -- Amélioration des healthchecks dans docker-compose.yml -- Ajout de variables d'environnement pour le timeout et le mode async +Si le service n'écoute pas sur `0.0.0.0:8090`, vérifiez : -## Healthcheck -```yaml -healthcheck: - test: ["CMD", "sh", "-c", "curl -f http://localhost:8091/ | grep -q '\"status\":\"ok\"'"] - interval: 15s - timeout: 10s - retries: 5 - start_period: 60s -``` - -## Ports -- **8090** : WebSocket server -- **8091** : Health server - -## Dépendances -- **blindbit-oracle** : Service oracle pour les données blockchain -- **bitcoin-signet** : Nœud Bitcoin Signet - -## Historique des Modifications -- 20/09/2025 : Correction du build CI avec clonage de sdk_common -- 20/09/2025 : Résolution du problème de scan bloquant -- 20/09/2025 : Amélioration des healthchecks et de la séquence de démarrage +1. La configuration `ws_url` dans le fichier de configuration +2. Les variables d'environnement Docker +3. Les logs du service pour les erreurs de binding \ No newline at end of file diff --git a/tests/ws_connect.rs b/tests/ws_connect.rs index 3530959..a27c85f 100644 --- a/tests/ws_connect.rs +++ b/tests/ws_connect.rs @@ -9,7 +9,7 @@ async fn ws_connects_on_localhost_8090() { // Test conditionnel: désactivé par défaut pour éviter les échecs en l'absence de serveur WS local return; } - let url = std::env::var("SDK_RELAY_WS_URL").unwrap_or_else(|_| "ws://localhost:8090".to_string()); + let url = std::env::var("SDK_RELAY_WS_URL").unwrap_or_else(|_| "ws://0.0.0.0:8090".to_string()); let connect_fut = connect_async(url); let res = timeout(Duration::from_secs(3), connect_fut).await; match res {