diff --git a/.cursorignore b/.cursorignore index e1dea156..8003c409 100644 --- a/.cursorignore +++ b/.cursorignore @@ -60,7 +60,7 @@ target/ # Docker (artefacts locaux éventuels) docker-compose.override.yml -docker-compose.*.yml.local +docker-compose.*.yml.4nk-local *.docker.tar docker-image-*.tar docker-save-*.tar diff --git a/data/.gitkeep b/data/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/log/README.md b/log/README.md deleted file mode 100644 index 5abf0c1a..00000000 --- a/log/README.md +++ /dev/null @@ -1,203 +0,0 @@ -# 📊 Monitoring des Logs 4NK_node - -Ce répertoire contient la configuration complète pour surveiller et analyser les logs de tous les services 4NK_node en temps réel. - -## 🚀 Démarrage Rapide - -### 1. Démarrer le monitoring -```bash -cd 4NK_node -./log/start-monitoring.sh -``` - -### 2. Accéder à Grafana -- **URL**: http://localhost:3000 -- **Utilisateur**: `admin` -- **Mot de passe**: `admin` - -### 3. Dashboard principal -Le dashboard principal est automatiquement configuré et accessible à : -http://localhost:3000/d/4nk-node-logs/4nk-node-vue-d-ensemble-des-logs - -## 🏗️ Architecture - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Services │ │ Promtail │ │ Loki │ -│ 4NK_node │───▶│ (Collecteur) │───▶│ (Stockage) │ -│ │ │ │ │ │ -└─────────────────┘ └─────────────────┘ └─────────────────┘ - │ │ - ▼ ▼ - ┌─────────────────┐ ┌─────────────────┐ - │ Grafana │ │ Dashboards │ - │ (Visualisation) │◄───│ (Analyses) │ - └─────────────────┘ └─────────────────┘ -``` - -## 📁 Structure des Fichiers - -``` -log/ -├── README.md # Ce fichier -├── start-monitoring.sh # Script de démarrage -├── log-monitoring.yml # Docker Compose pour le monitoring -├── loki-config.yaml # Configuration Loki -├── promtail-config.yml # Configuration Promtail -├── grafana-datasources.yml # Sources de données Grafana -├── grafana-dashboards.yml # Configuration des dashboards -└── dashboards/ - └── 4nk-node-overview.json # Dashboard principal -``` - -## 🔧 Services de Monitoring - -### Loki (Port 3100) -- **Rôle**: Stockage et indexation des logs -- **Fonctionnalités**: Requêtes LogQL, rétention configurable -- **Stockage**: Fichiers locaux avec compression - -### Promtail (Port 9080) -- **Rôle**: Collecte des logs Docker -- **Fonctionnalités**: Parsing JSON, étiquetage automatique -- **Collecte**: Logs de tous les conteneurs 4NK_node - -### Grafana (Port 3000) -- **Rôle**: Interface de visualisation -- **Fonctionnalités**: Dashboards, alertes, requêtes temps réel -- **Accès**: Interface web avec authentification - -## 📊 Dashboards Disponibles - -### Dashboard Principal : "4NK Node - Vue d'ensemble des Logs" -- **Log Rate par Service**: Graphique temporel des logs par service -- **Total Logs (5m)**: Statistique du nombre total de logs -- **Logs en Temps Réel**: Affichage en direct des logs de tous les services -- **Répartition par Service**: Graphique circulaire des logs par service -- **Répartition par Niveau**: Graphique circulaire des logs par niveau (info, error, debug) - -## 🔍 Requêtes LogQL Utiles - -### Logs d'un service spécifique -```logql -{job="4nk_node", service="bitcoin"} -``` - -### Logs d'erreur -```logql -{job="4nk_node"} |= "error" -``` - -### Logs des dernières 5 minutes -```logql -{job="4nk_node"} [5m] -``` - -### Recherche de texte -```logql -{job="4nk_node"} |~ "connection.*failed" -``` - -## 🛠️ Commandes Utiles - -### Démarrer le monitoring -```bash -docker compose -f log-monitoring.yml up -d -``` - -### Voir les logs des services de monitoring -```bash -docker compose -f log-monitoring.yml logs -f -``` - -### Arrêter le monitoring -```bash -docker compose -f log-monitoring.yml down -``` - -### Redémarrer un service spécifique -```bash -docker compose -f log-monitoring.yml restart grafana -``` - -### Vérifier le statut -```bash -docker compose -f log-monitoring.yml ps -``` - -## 📈 Métriques Surveillées - -### Services 4NK_node -- **bitcoin**: Logs de synchronisation, connexions RPC -- **blindbit**: Logs de traitement des blocs, erreurs -- **sdk_relay1/2/3**: Logs de connexion Bitcoin, erreurs RPC -- **sdk_signer**: Logs de connexion aux relays, erreurs WebSocket -- **sdk_storage**: Logs de base de données, erreurs de stockage -- **ihm_client**: Logs de l'interface utilisateur -- **tor**: Logs de connexion, erreurs de proxy - -### Niveaux de Log -- **INFO**: Informations générales, statut des services -- **ERROR**: Erreurs critiques, échecs de connexion -- **DEBUG**: Informations détaillées pour le débogage -- **WARN**: Avertissements, problèmes non critiques - -## 🔒 Sécurité - -- **Grafana**: Authentification requise (admin/admin) -- **Loki**: Pas d'authentification (accès local uniquement) -- **Promtail**: Pas d'authentification (collecte locale uniquement) -- **Ports exposés**: 3000 (Grafana), 3100 (Loki), 9080 (Promtail) - -## 🚨 Dépannage - -### Grafana ne démarre pas -```bash -docker compose -f log-monitoring.yml logs grafana -``` - -### Promtail ne collecte pas de logs -```bash -docker compose -f log-monitoring.yml logs promtail -``` - -### Loki ne stocke pas de logs -```bash -docker compose -f log-monitoring.yml logs loki -``` - -### Vérifier les permissions -```bash -ls -la log/ -chmod +x log/start-monitoring.sh -``` - -## 📝 Personnalisation - -### Ajouter un nouveau service -1. Modifier `promtail-config.yml` -2. Ajouter une nouvelle section `static_configs` -3. Redémarrer Promtail - -### Créer un nouveau dashboard -1. Créer un fichier JSON dans `dashboards/` -2. Modifier `grafana-dashboards.yml` si nécessaire -3. Redémarrer Grafana - -### Modifier la rétention des logs -1. Modifier `loki-config.yaml` -2. Ajuster `retention_period` et `chunk_retain_period` -3. Redémarrer Loki - -## 🌟 Fonctionnalités Avancées - -- **Alertes**: Configuration d'alertes sur des patterns de logs -- **Rétention**: Gestion automatique de la rétention des logs -- **Compression**: Compression automatique des anciens logs -- **Recherche**: Recherche full-text dans tous les logs -- **Filtrage**: Filtrage par service, niveau, timestamp -- **Export**: Export des logs en différents formats - ---- - -**Note**: Ce système de monitoring est conçu pour un environnement de développement. Pour la production, considérez l'ajout d'authentification et de chiffrement. diff --git a/log/dashboards/4nk-node-overview.json b/log/dashboards/4nk-node-overview.json deleted file mode 100644 index 3894cacb..00000000 --- a/log/dashboards/4nk-node-overview.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "grafana", - "uid": "-- Grafana --" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": null, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 1, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "editorMode": "code", - "expr": "rate({job=\"4nk_node\"} [5m])", - "queryType": "", - "refId": "A" - } - ], - "title": "Log Rate par Service", - "type": "timeseries" - }, - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "id": 2, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "textMode": "auto" - }, - "pluginVersion": "10.0.0", - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "editorMode": "code", - "expr": "count_over_time({job=\"4nk_node\"} [5m])", - "queryType": "", - "refId": "A" - } - ], - "title": "Total Logs (5m)", - "type": "stat" - }, - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "gridPos": { - "h": 8, - "w": 24, - "x": 0, - "y": 8 - }, - "id": 3, - "options": { - "dedupStrategy": "none", - "enableLogDetails": true, - "prettifyLogMessage": false, - "showCommonLabels": false, - "showLabels": false, - "showTime": false, - "sortOrder": "Descending", - "wrapLogMessage": false - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "editorMode": "code", - "expr": "{job=\"4nk_node\"} | json | line_format \"{{.service}}: {{.msg}}\"", - "maxLines": 100, - "queryType": "", - "refId": "A" - } - ], - "title": "Logs en Temps Réel - Tous les Services", - "type": "logs" - }, - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "hideFrom": { - "legend": false, - "tooltip": false, - "vis": false - } - }, - "mappings": [] - }, - "overrides": [] - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 16 - }, - "id": 4, - "options": { - "legend": { - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "pieType": "pie", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "editorMode": "code", - "expr": "count_over_time({job=\"4nk_node\"} [5m]) by (service)", - "queryType": "", - "refId": "A" - } - ], - "title": "Répartition des Logs par Service", - "type": "piechart" - }, - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 16 - }, - "id": 5, - "options": { - "legend": { - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "pieType": "pie", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "loki", - "uid": "loki" - }, - "editorMode": "code", - "expr": "count_over_time({job=\"4nk_node\"} [5m]) by (level)", - "queryType": "", - "refId": "A" - } - ], - "title": "Répartition des Logs par Niveau", - "type": "piechart" - } - ], - "refresh": "5s", - "schemaVersion": 38, - "style": "dark", - "tags": [ - "4nk_node", - "monitoring", - "logs" - ], - "templating": { - "list": [] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "4NK Node - Vue d'ensemble des Logs", - "uid": "4nk-node-logs", - "version": 1, - "weekStart": "" -} diff --git a/log/grafana-dashboards.yml b/log/grafana-dashboards.yml deleted file mode 100644 index 89f7165a..00000000 --- a/log/grafana-dashboards.yml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: 1 - -providers: - - name: '4NK Node Dashboards' - orgId: 1 - folder: '4NK Node' - type: file - disableDeletion: false - updateIntervalSeconds: 10 - allowUiUpdates: true - options: - path: /etc/grafana/provisioning/dashboards/dashboards \ No newline at end of file diff --git a/log/grafana-datasources.yml b/log/grafana-datasources.yml deleted file mode 100644 index 452fac63..00000000 --- a/log/grafana-datasources.yml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: 1 - -datasources: - - name: Loki - type: loki - access: proxy - url: http://localhost:3100 - isDefault: true - editable: true - jsonData: - maxLines: 1000 - derivedFields: - - datasourceUid: loki - matcherRegex: "container_name=(\\w+)" - name: "Container" - url: "/d/${__value.raw}" \ No newline at end of file diff --git a/log/loki-config.yaml b/log/loki-config.yaml deleted file mode 100644 index ba32f3d5..00000000 --- a/log/loki-config.yaml +++ /dev/null @@ -1,45 +0,0 @@ -server: - http_listen_port: 3100 - grpc_listen_port: 9096 - log_level: info - chunk_target_size: 1048576 -schema_config: - configs: - - from: 2020-10-15 - store: boltdb-shipper - object_store: filesystem - schema: v11 - index: - prefix: index_ - period: 24h -storage_config: - boltdb_shipper: - active_index_directory: /loki/index - cache_location: /loki/boltdb-cache - shared_store: filesystem - filesystem: - directory: /loki/chunks -limits_config: - enforce_metric_name: false - reject_old_samples: true - reject_old_samples_max_age: 168h -chunk_store_config: - max_look_back_period: 168h -compactor: - working_directory: /loki/boltdb-shipper-compactor - shared_store: filesystem - compactor_ring: - kvstore: - store: inmemory -ruler: - storage: - type: local - local: - directory: /loki/rules - ring: - kvstore: - store: inmemory - rule_path: /loki/rules-temp - alertmanager_url: http://localhost:9093 - enable_api: true -EOF diff --git a/log/promtail-config.yml b/log/promtail-config.yml deleted file mode 100644 index 67fb9e2d..00000000 --- a/log/promtail-config.yml +++ /dev/null @@ -1,32 +0,0 @@ -server: - http_listen_port: 9080 - grpc_listen_port: 0 - -positions: - filename: /tmp/positions.yaml - -clients: - - url: http://loki:3100/loki/api/v1/push - -scrape_configs: - - job_name: 4nk_node_core_logs - static_configs: - - targets: [localhost] - labels: - job: 4nk_node_core - __path__: /workspace/logs/**/*.log - - - job_name: 4nk_modules_logs - static_configs: - - targets: [localhost] - labels: - job: 4nk_modules - __path__: /workspace/modules/*/logs/**/*.log - - - job_name: 4nk_projects_logs - static_configs: - - targets: [localhost] - labels: - job: 4nk_projects - __path__: /workspace/projects/*/*/logs/**/*.log -EOF diff --git a/log/start-monitoring.sh b/log/start-monitoring.sh deleted file mode 100755 index 02812dab..00000000 --- a/log/start-monitoring.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -# Script de démarrage du monitoring des logs 4NK_node -# Auteur: Assistant IA -# Date: $(date) - -echo "🚀 Démarrage du monitoring des logs 4NK_node..." - -# Vérifier que nous sommes dans le bon répertoire -if [ ! -f "log-monitoring.yml" ]; then - echo "❌ Erreur: Ce script doit être exécuté depuis le répertoire 4NK_node" - exit 1 -fi - -# Démarrer les services de monitoring -echo "📊 Démarrage de Loki (stockage des logs)..." -docker compose -f log-monitoring.yml up -d loki - -echo "⏳ Attente du démarrage de Loki..." -sleep 10 - -echo "📥 Démarrage de Promtail (collecte des logs)..." -docker compose -f log-monitoring.yml up -d promtail - -echo "⏳ Attente du démarrage de Promtail..." -sleep 5 - -echo "📈 Démarrage de Grafana (visualisation)..." -docker compose -f log-monitoring.yml up -d grafana - -echo "⏳ Attente du démarrage de Grafana..." -sleep 10 - -# Vérifier le statut des services -echo "🔍 Vérification du statut des services..." -docker compose -f log-monitoring.yml ps - -echo "" -echo "✅ Monitoring des logs démarré avec succès !" -echo "" -echo "🌐 Accès aux services :" -echo " - Grafana: http://localhost:3000 (admin/admin)" -echo " - Loki: http://localhost:3100" -echo " - Promtail: http://localhost:9080" -echo "" -echo "📊 Dashboard principal: http://localhost:3000/d/4nk-node-logs/4nk-node-vue-d-ensemble-des-logs" -echo "" -echo "📝 Pour arrêter: docker compose -f log-monitoring.yml down" -echo "📝 Pour voir les logs: docker compose -f log-monitoring.yml logs -f" diff --git a/modules/bitcoin/conf/bitcoin.conf b/modules/bitcoin/conf/bitcoin.conf deleted file mode 100644 index 92c51779..00000000 --- a/modules/bitcoin/conf/bitcoin.conf +++ /dev/null @@ -1,40 +0,0 @@ -# Configuration globale -datadir=/home/bitcoin/.bitcoin -server=1 -txindex=1 -debug=1 -loglevel=debug -logthreadnames=1 -signet=1 -onion=tor:9050 -listenonion=1 - -# Paramètres RPC -rpcauth=bitcoin:c8ea921c7357bd6a5a8a7c43a12350a7$955e25b17672987b17c5a12f12cd8b9c1d38f0f86201c8cd47fc431f2e1c7956 -rpcallowip=172.20.0.0/16 -rpcworkqueue=32 -rpcthreads=4 -rpcdoccheck=1 - -# Paramètres ZMQ -zmqpubhashblock=tcp://0.0.0.0:29000 -zmqpubrawtx=tcp://0.0.0.0:29000 - -[signet] -listen=1 -bind=0.0.0.0:38333 -rpcbind=0.0.0.0:38332 -rpcport=38332 -fallbackfee=0.0001 -blockfilterindex=1 -datacarriersize=205 -acceptnonstdtxn=1 -dustrelayfee=0.00000001 -minrelaytxfee=0.00000001 -prune=0 -signetchallenge=0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821 -walletdir=/home/bitcoin/.bitcoin/wallets -wallet=mining -wallet=watchonly -maxtxfee=1 -addnode=tlv2yqamflv22vfdzy2hha2nwmt6zrwrhjjzz4lx7qyq7lyc6wfhabyd.onion diff --git a/modules/bitcoin/conf/bitcoin.conf.exemple b/modules/bitcoin/conf/bitcoin.conf.exemple deleted file mode 100644 index d9e0ce4d..00000000 --- a/modules/bitcoin/conf/bitcoin.conf.exemple +++ /dev/null @@ -1,40 +0,0 @@ -# Configuration globale -datadir=/home/bitcoin/.bitcoin -server=1 -txindex=1 -debug=1 -loglevel=debug -logthreadnames=1 -signet=1 -onion=tor:9050 -listenonion=1 - -# Paramètres RPC -rpcauth=bitcoin:c8ea921c7357bd6a5a8a7c43a12350a7$955e25b17672987b17c5a12f12cd8b9c1d38f0f86201c8cd47fc431f2e1c7956 -rpcallowip=172.20.0.0/16 -rpcworkqueue=32 -rpcthreads=4 -rpcdoccheck=1 - -# Paramètres ZMQ -zmqpubhashblock=tcp://bitcoin.local:29000 -zmqpubrawtx=tcp://bitcoin.local:29000 - -[signet] -listen=1 -bind=bitcoin.local:38333 -rpcbind=bitcoin.local:38332 -rpcport=38332 -fallbackfee=0.0001 -blockfilterindex=1 -datacarriersize=205 -acceptnonstdtxn=1 -dustrelayfee=0.00000001 -minrelaytxfee=0.00000001 -prune=0 -signetchallenge=0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821 -walletdir=/home/bitcoin/.bitcoin/wallets -wallet=mining -wallet=watchonly -maxtxfee=1 -addnode=tlv2yqamflv22vfdzy2hha2nwmt6zrwrhjjzz4lx7qyq7lyc6wfhabyd.onion diff --git a/modules/bitcoin/logs/.gitkeep b/modules/bitcoin/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/blindbit-oracle/conf/blindbit.toml.exemple b/modules/blindbit-oracle/conf/blindbit.toml.exemple deleted file mode 100644 index 03041c0c..00000000 --- a/modules/blindbit-oracle/conf/blindbit.toml.exemple +++ /dev/null @@ -1,28 +0,0 @@ -# Configuration pour blindbit-oracle -host = "blindbit-oracle.local:8000" - -# Définit la chaîne sur laquelle le wallet fonctionne -chain = "signet" - -# Point d'accès RPC Bitcoin -rpc_endpoint = "http://bitcoin.local:38332" - -# Chemin vers le fichier cookie RPC Bitcoin -cookie_path = "/home/bitcoin/.bitcoin/signet/.cookie" - -# Identifiants RPC Bitcoin (non utilisés avec cookie_path) -rpc_user = "" -rpc_pass = "" - -# Hauteur de départ pour la synchronisation -sync_start_height = 1 - -# Paramètres de performance -max_parallel_tweak_computations = 4 -max_parallel_requests = 4 - -# Configuration des index -tweaks_only = 0 -tweaks_full_basic = 1 -tweaks_full_with_dust_filter = 1 -tweaks_cut_through_with_dust_filter = 1 \ No newline at end of file diff --git a/modules/blindbit-oracle/logs/.gitkeep b/modules/blindbit-oracle/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/grafana-central/conf/grafana.ini b/modules/grafana-central/conf/grafana.ini deleted file mode 100644 index 0f7dea86..00000000 --- a/modules/grafana-central/conf/grafana.ini +++ /dev/null @@ -1,49 +0,0 @@ -[paths] -data = /var/lib/grafana/data -logs = /var/lib/grafana/logs -plugins = /var/lib/grafana/plugins -provisioning = /etc/grafana/provisioning - -[server] -http_port = 3000 -http_addr = 0.0.0.0 -root_url = http://grafana-central.local:3000/ -serve_from_sub_path = false - -[database] -type = sqlite3 -path = grafana.db - -[security] -admin_user = admin -admin_password = admin -secret_key = SW2YcwTIb9zpOOhoPsMm - -[users] -allow_sign_up = false -auto_assign_org = true -auto_assign_org_role = Viewer - -[log] -mode = console -level = info - -[alerting] -enabled = true - -[explore] -enabled = true - -[panels] -disable_sanitize_html = false - -[plugins] -enable_alpha = false -app_tls_skip_verify_insecure = false - -[auth] -disable_login_form = false -disable_signout_menu = false - -[auth.anonymous] -enabled = false diff --git a/modules/ihm_client/conf/.env.exemple b/modules/ihm_client/conf/.env.exemple deleted file mode 100644 index 14b846a7..00000000 --- a/modules/ihm_client/conf/.env.exemple +++ /dev/null @@ -1,16 +0,0 @@ - -[PROD] -U32_MAX=4294967295 -BASEURL="http://ihm-client.local" -BOOTSTRAPURL=["http://sdk-relay1.local:8090"] -STORAGEURL="http://sdk-storage.local/storage" -BLINDBITURL="http://blindbit.local:8000" -DEFAULTAMOUNT=1000 - -[DEV] -U32_MAX=4294967295 -BASEURL="http://ihm-client.local" -BOOTSTRAPURL=["http://sdk-relay1.local:8090"] -STORAGEURL="http://sdk-storage.local/storage" -BLINDBITURL="http://blindbit.local:8000" -DEFAULTAMOUNT=1000 \ No newline at end of file diff --git a/modules/ihm_client/logs/.gitkeep b/modules/ihm_client/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/local_IA/.gitkeep b/modules/local_IA/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/local_IA/conf/.gitkeep b/modules/local_IA/conf/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/local_IA/logs/.gitkeep b/modules/local_IA/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/local_IA/scripts/.gitkeep b/modules/local_IA/scripts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/nginx-proxy/certs/local.crt b/modules/nginx-proxy/certs/local.crt deleted file mode 100644 index 0f807ac2..00000000 --- a/modules/nginx-proxy/certs/local.crt +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIUaYEl/pQF0ZyLDAi5FR7xZYyeeKswDQYJKoZIhvcNAQEL -BQAwEjEQMA4GA1UEAwwHKi5sb2NhbDAeFw0yNTA5MTExNDI0MjRaFw0zNTA5MDkx -NDI0MjRaMBIxEDAOBgNVBAMMByoubG9jYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQD3Njaaod0J1g8ag24ZDwW2Y1xOmJpZqQp2b2CQodAsoAQFrvfz -ltOwOAiZPV2aBDL7u2aKbNfZW7AUTBNDanevadLzeXK1H9xXuDzr0ROQh0LK3V+V -znfQh8Y12HdOWtyZMf3suEBoy98OoT8jqUocDajDOfVMx1kYb3Rl8EUmcS9IqOOr -h68rrcmSH4Wq1cTXMv71qqTD7K0vixdgrOgN2YLF5l+upb465TpUFp3pp63s/Itf -/AOpd5PDu2tw2aZvrEH4MckQ310S3rRQCobe61m5iwIRk1KWdgb2bGyV6yZX6KmF -htFN1OZaN0Iz/kzMkqSRhyfViiCcyStLWw2NAgMBAAGjbjBsMB0GA1UdDgQWBBR8 -4QPda5kFELdFLjDjbieUMk9nsTAfBgNVHSMEGDAWgBR84QPda5kFELdFLjDjbieU -Mk9nsTAPBgNVHRMBAf8EBTADAQH/MBkGA1UdEQQSMBCCByoubG9jYWyCBWxvY2Fs -MA0GCSqGSIb3DQEBCwUAA4IBAQC+OzNNEUQLR/01AwfQpduYSD+YVRxrYvDdKujR -zc+yTyglkM3RQdmLVsMPaVmZatUc0DG1Ggx+D9oTLVrqQcdy1mKBJ2jKn+cnlJ9R -32CKtnb6vBPTwm03dP08H6cH8f17RKI4rTnl7C/bygMNeuvmlXltr7FZIdI9fJ1n -kMGpY7FXQQw66qYy6OFc+YPkA3soOAfyUuNIzjaxB/E87Sk4quxE6zFNfCBK8QTS -/Cwdx7anxQpmnpu9a1f7ql1t6ylFPCn39HT/kemSXeq2nU43X/CGEAhVKK4aEX9Y -E3plaTx7fKjFEli0V7T+bhj8c6nJb3IprvW2uQ+fhzqRmRiI ------END CERTIFICATE----- diff --git a/modules/nginx-proxy/certs/local.key b/modules/nginx-proxy/certs/local.key deleted file mode 100644 index 03b202e8..00000000 --- a/modules/nginx-proxy/certs/local.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQD3Njaaod0J1g8a -g24ZDwW2Y1xOmJpZqQp2b2CQodAsoAQFrvfzltOwOAiZPV2aBDL7u2aKbNfZW7AU -TBNDanevadLzeXK1H9xXuDzr0ROQh0LK3V+VznfQh8Y12HdOWtyZMf3suEBoy98O -oT8jqUocDajDOfVMx1kYb3Rl8EUmcS9IqOOrh68rrcmSH4Wq1cTXMv71qqTD7K0v -ixdgrOgN2YLF5l+upb465TpUFp3pp63s/Itf/AOpd5PDu2tw2aZvrEH4MckQ310S -3rRQCobe61m5iwIRk1KWdgb2bGyV6yZX6KmFhtFN1OZaN0Iz/kzMkqSRhyfViiCc -yStLWw2NAgMBAAECggEAXOU3YaYffJm+tTTcQ3hcqivuPO6lWbnm35h8zfywUISU -3lngfN2ZkKeNu5/Os5iOXAAQyUWbWudUZFwuBPBWJ0l55tolW6CsWR43blnzoyTg -2YCUcaPTbD4JIqTEOGJ2cO7TP4gBVCAAIuw+4LS1z5Lmbu4xmndyqHcBY2kFYyr6 -CS4oHCip1J5AcIXbDx0eEJxyFFQvh/nAy1nUvoAuqt3X0Bpoj90uBXyG1KRz2Db7 -KANWPMeWRVPU6ceXorUPb24fUDah2g3YddXG3bqVVS0yq9G5eMZv5sl8Chs2P5Kp -3wARRjvt1WANXWPwk8W+cbBrWsZxCgCxgpgup48S9QKBgQD+Chl+TexZzReHR5yD -jif3/FKX2hp38RmNbpO2EhxCbkmGgmZwTkWyNCwCCr4mhAKMIMbL69zT8HKxWdSx -C0lJ9oPYCW3VqqPOIfIsN6mW2Hi4s2aMA8nNUUWWjhyi/msSDxOZRJZUj3s3+evs -B/Q9jkQvFkmNT0ZYSpHlUwgR5wKBgQD5Hp/ZLzySaBOqLpZjmPih9Q53diSuTZvN -wZVicmh32moGniSGKjWC7cetGCyAHzsBMDdN9XBJ1gqGxkmiFFmmfdxtpo/Jmps1 -a//ZS+RfXpphpRmgXfnUd9nUNwv0roQWTf0njmwdjXFNMBQjlQQZ1NwsvrJPr4FA -9rC3dLmeawKBgF4skkzPSEn2DL3anzvprAlzYY7njJ5gI4/ZqSp6xj0eM2WI277Q -VWf9jT7oipsunt8hm3CnLELpRStX2NAVFgM0PqYMwMnPq0/UJ7manOTNtNsLrn1D -PkE92qU4Y4dM95ZHPoW39l68nfofTQU/4ZwcLEykX3niJHrAkhtIT5qLAoGAGeXK -Hkzf0iSJrs5rCe2UI1oTZ+3bQFeHE+vE+NgF7jfBf/CewWfP6k2HzYHO1n7opmX5 -ydvzEWnz7DDe5L+S1lENQkTne8Db08DndxKBqjxudiowsNA0MZdICNy0HHqr9pmi -8KLIsIXMuoZ+AXjzVTAgt3IXnVsUZ8l9c4Tp6wMCgYBGIx0MLhJ69X1Te9SQb/pT -rxEEmn17z7YY0xUablgwahA+HbCeJjAckk7zmjEG9c8hixYecXZTD9A7ul9gCrAU -zlZF2QDv28tLRr8nHNYFFzbNTI/gy0cFDJKGouE6DPGjU8bWM23fXtJJTVeqIMW5 -8oCPL7ZL6V5uxZEWFfQUtg== ------END PRIVATE KEY----- diff --git a/modules/nginx-proxy/conf/nginx.conf b/modules/nginx-proxy/conf/nginx.conf deleted file mode 100644 index fcd1aa84..00000000 --- a/modules/nginx-proxy/conf/nginx.conf +++ /dev/null @@ -1,76 +0,0 @@ -worker_processes auto; - -events { - worker_connections 1024; -} - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - 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 /var/log/nginx/access.log main; - error_log /var/log/nginx/error.log warn; - - sendfile on; - keepalive_timeout 65; - - # DNS interne (dnsmasq sur la passerelle Docker de 4nk_network) - resolver 172.20.0.1 valid=10s ipv6=off; - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - # Mapping hôte -> port applicatif - map $host $upstream_port { - default 80; - ihm-client.local 80; - coffre-front.local 3000; - coffre-back-mini.local 8080; - blindbit-oracle.local 8000; - sdk-storage.local 8080; - sdk-relay1.local 8090; - sdk-relay2.local 8090; - sdk-relay3.local 8090; - sdk-signer.local 9090; - grafana-central.local 3000; - loki.local 3100; - prometheus.local 9091; - 4nk-ia-front.local 3000; - } - - ssl_protocols TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - ssl_session_cache shared:SSL:10m; - ssl_session_timeout 10m; - - server { - listen 443 ssl; - server_name *.local; - - ssl_certificate /etc/nginx/certs/local.crt; - ssl_certificate_key /etc/nginx/certs/local.key; - - add_header X-Content-Type-Options nosniff; - add_header X-Frame-Options SAMEORIGIN; - add_header X-XSS-Protection "1; mode=block"; - - location / { - 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 https; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_read_timeout 300s; - proxy_send_timeout 300s; - proxy_pass http://$host:$upstream_port$request_uri; - } - } -} diff --git a/modules/sdk_relay1/conf/sdk_relay1.conf.exemple b/modules/sdk_relay1/conf/sdk_relay1.conf.exemple deleted file mode 100644 index 2902c07b..00000000 --- a/modules/sdk_relay1/conf/sdk_relay1.conf.exemple +++ /dev/null @@ -1,9 +0,0 @@ -core_url="http://bitcoin.local:38332" -ws_url="sdk-relay1.local:8090" -wallet_name="default" -network="signet" -blindbit_url="http://blindbit-oracle.local:8000" -zmq_url="tcp://bitcoin.local:29000" -storage="https://sdk-storage.local/storage" -data_dir="/home/bitcoin/.4nk" -bitcoin_data_dir="/home/bitcoin/.bitcoin" diff --git a/modules/sdk_relay1/logs/.gitkeep b/modules/sdk_relay1/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/sdk_relay2/conf/sdk_relay2.conf.exemple b/modules/sdk_relay2/conf/sdk_relay2.conf.exemple deleted file mode 100644 index 8d5cb13e..00000000 --- a/modules/sdk_relay2/conf/sdk_relay2.conf.exemple +++ /dev/null @@ -1,9 +0,0 @@ -core_url="http://bitcoin.local:38332" -ws_url="sdk-relay2.local:8090" -wallet_name="default" -network="signet" -blindbit_url="http://blindbit-oracle.local:8000" -zmq_url="tcp://bitcoin.local:29000" -storage="https://sdk-storage.local/storage" -data_dir="/home/bitcoin/.4nk" -bitcoin_data_dir="/home/bitcoin/.bitcoin" diff --git a/modules/sdk_relay2/logs/.gitkeep b/modules/sdk_relay2/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/sdk_relay3/conf/sdk_relay3.conf.exemple b/modules/sdk_relay3/conf/sdk_relay3.conf.exemple deleted file mode 100644 index 5e041773..00000000 --- a/modules/sdk_relay3/conf/sdk_relay3.conf.exemple +++ /dev/null @@ -1,9 +0,0 @@ -core_url="http://bitcoin.local:38332" -ws_url="sdk-relay3.local:8090" -wallet_name="default" -network="signet" -blindbit_url="http://blindbit-oracle.local:8000" -zmq_url="tcp://bitcoin.local:29000" -storage="https://sdk-storage.local/storage" -data_dir="/home/bitcoin/.4nk" -bitcoin_data_dir="/home/bitcoin/.bitcoin" diff --git a/modules/sdk_relay3/logs/.gitkeep b/modules/sdk_relay3/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/sdk_signer/conf/.env.exemple b/modules/sdk_signer/conf/.env.exemple deleted file mode 100644 index 51bb0692..00000000 --- a/modules/sdk_signer/conf/.env.exemple +++ /dev/null @@ -1,33 +0,0 @@ -# Configuration sdk_signer - Module 4NK_node - -# Ports -ws_port = 9090 -http_port = 9092 - -# URLs des services -relay_urls = ["http://sdk-relay1.local:8091", "http://sdk-relay2.local:8093", "http://sdk-relay3.local:8095"] -storage_url = "http://sdk-storage.local:8081" -blindbit_url = "http://blindbit-core.local:8000" -bitcoin_rpc_url = "http://bitcoin.local:38332" - -# Authentification Bitcoin -bitcoin_rpc_user = "bitcoin" -bitcoin_rpc_password = "bitcoin" -data_dir="/home/bitcoin/.4nk" -bitcoin_data_dir="/home/bitcoin/.bitcoin" - -# Mode développement -dev_mode = true -debug_level = "info" - -# Limites de connexions -max_connections = 100 -timeout = 30 - -# Logging -log_level = "info" -log_file = "/home/bitcoin/logs/sdk_signer.log" - -# Sécurité -enable_tls = false -enable_auth = false diff --git a/modules/sdk_signer/log/.gitkeep b/modules/sdk_signer/log/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/sdk_storage/conf/.gitkeep b/modules/sdk_storage/conf/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/sdk_storage/log/.gitkeep b/modules/sdk_storage/log/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/tor/conf/tor.conf.exemple b/modules/tor/conf/tor.conf.exemple deleted file mode 100644 index 55e45ef7..00000000 --- a/modules/tor/conf/tor.conf.exemple +++ /dev/null @@ -1,16 +0,0 @@ -# Configuration Tor pour 4NK_node (conteneur) - -# Ports d\écoute - -# Ports d\'écoute -SocksPort tor.local:9050 -ControlPort tor.local:9051 - -# Répertoires -DataDirectory /var/lib/tor - -# Logs (fichier monté par docker-compose) -Log notice file /var/log/tor/notices.log - -# Exécution en avant-plan dans un conteneur -RunAsDaemon 0 diff --git a/modules/tor/entrypoint.sh b/modules/tor/entrypoint.sh deleted file mode 100644 index bd617e6b..00000000 --- a/modules/tor/entrypoint.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -e - -TORRC_PATH=/etc/tor/torrc -if [ ! -f "$TORRC_PATH" ]; then - mkdir -p /etc/tor - cat > "$TORRC_PATH" << 'EOF' -Log notice file /var/log/tor/notices.log -DataDirectory /var/lib/tor -SocksPort 0.0.0.0:9050 -ControlPort 9051 -EOF -fi - -# Ensure permissions for Tor data directories when running as root -chown -R 0:0 /var/lib/tor /var/log/tor /etc/tor 2>/dev/null || true -chmod -R a+rwX /var/lib/tor /var/log/tor /etc/tor 2>/dev/null || true - -tor -f "$TORRC_PATH" diff --git a/modules/tor/log/.gitkeep b/modules/tor/log/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/tor/tor.conf.exemple b/modules/tor/tor.conf.exemple deleted file mode 100644 index 0424d504..00000000 --- a/modules/tor/tor.conf.exemple +++ /dev/null @@ -1,15 +0,0 @@ -# Configuration Tor simple pour 4NK_node -# Écoute sur toutes les interfaces pour permettre la connexion depuis d'autres conteneurs - -# Ports SOCKS et contrôle -SocksPort tor.4nk.local:9050 -ControlPort tor.4nk.local:9051 - -# Répertoire de données -DataDirectory /var/lib/tor - -# Logs sur stdout pour Docker -Log notice stdout - -# Désactiver le mode daemon pour Docker -RunAsDaemon 0 diff --git a/projects/lecoffre/lecoffre-back-mini/conf/.env.exemple b/projects/lecoffre/lecoffre-back-mini/conf/.env.exemple deleted file mode 100644 index f553eec5..00000000 --- a/projects/lecoffre/lecoffre-back-mini/conf/.env.exemple +++ /dev/null @@ -1,50 +0,0 @@ -# Configuration OVH -OVH_APP_KEY= -OVH_APP_SECRET= -OVH_CONSUMER_KEY= -OVH_SMS_SERVICE_NAME=sms-tt802880-1 - -# Configuration SMS Factor -SMS_FACTOR_TOKEN= - -#Configuration Mailchimp -MAILCHIMP_API_KEY= -MAILCHIMP_KEY= -MAILCHIMP_LIST_ID= - -#Configuration Stripe -STRIPE_SECRET_KEY= -STRIPE_WEBHOOK_SECRET= -STRIPE_STANDARD_SUBSCRIPTION_PRICE_ID= -STRIPE_STANDARD_ANNUAL_SUBSCRIPTION_PRICE_ID= -STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID= -STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID= - -# Configuration serveur -APP_HOST=http://coffre-back-mini.local -PORT=8080 - -# Configuration front-end -NEXT_PUBLIC_4NK_URL=http://ihm-client.local -NEXT_PUBLIC_FRONT_APP_HOST=http://coffre-front.local:3000 -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= -NEXT_PUBLIC_BACK_API_PROTOCOL=http -NEXT_PUBLIC_BACK_API_HOST=localhost -BACK_API_PORT=8080 -BACK_API_ROOT_URL=/api -BACK_API_VERSION=/v1 - -# Configuration idnot -IDNOT_ANNUARY_BASE_URL='https://qual-api.notaires.fr/annuaire' -IDNOT_API_KEY='' - -# Configuration PostgreSQL -DB_HOST=miniback-postgres.local -DB_PORT=5432 -DB_NAME=miniback -DB_USER=miniback -DB_PASSWORD=minibackpassword - -LOG_LEVEL="debug" \ No newline at end of file diff --git a/projects/lecoffre/lecoffre-back-mini/logs/.gitkeep b/projects/lecoffre/lecoffre-back-mini/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/projects/lecoffre/lecoffre-front/conf/.env.exemple b/projects/lecoffre/lecoffre-front/conf/.env.exemple deleted file mode 100644 index bbcc2322..00000000 --- a/projects/lecoffre/lecoffre-front/conf/.env.exemple +++ /dev/null @@ -1,10 +0,0 @@ -NEXT_PUBLIC_4NK_URL="http://ihm-client.local:3003" -NEXT_PUBLIC_FRONT_APP_HOST="http://coffre-front.local:3000" -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="" -NEXT_PUBLIC_BACK_API_PROTOCOL=http:// -NEXT_PUBLIC_BACK_API_HOST=localhost -NEXT_PUBLIC_BACK_API_PORT=8080 -NEXT_PUBLIC_BACK_API_ROOT_URL=/api -NEXT_PUBLIC_BACK_API_VERSION=/v1 \ No newline at end of file diff --git a/projects/lecoffre/lecoffre-front/conf/.env.local b/projects/lecoffre/lecoffre-front/conf/.env.local deleted file mode 100644 index 10337da7..00000000 --- a/projects/lecoffre/lecoffre-front/conf/.env.local +++ /dev/null @@ -1 +0,0 @@ -NEXT_PUBLIC_TARGET_ORIGIN=http://coffre-back-mini.local diff --git a/projects/lecoffre/lecoffre-front/logs/.gitkeep b/projects/lecoffre/lecoffre-front/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/start-dnsmasq.sh b/scripts/start-dnsmasq.sh index 1597df9f..ff26613e 100755 --- a/scripts/start-dnsmasq.sh +++ b/scripts/start-dnsmasq.sh @@ -37,7 +37,7 @@ echo "🧪 Test de résolution DNS..." sleep 2 # Test des noms Docker -for hostname in "tor.4nk.local" "bitcoin.4nk.local" "coffre-front.4nk.local"; do +for hostname in "tor.4nk.4nk-local" "bitcoin.4nk.4nk-local" "coffre-front.4nk.4nk-local"; do echo -n " Test $hostname: " if nslookup -port=5353 "$hostname" 127.0.0.1 > /dev/null 2>&1; then echo "✅ OK" diff --git a/tests/connectivity/check_http_endpoints.sh b/tests/connectivity/check_http_endpoints.sh index 7318e1d4..355bb585 100755 --- a/tests/connectivity/check_http_endpoints.sh +++ b/tests/connectivity/check_http_endpoints.sh @@ -2,18 +2,18 @@ set -euo pipefail hostnames=( - tor.local - bitcoin.local - blindbit-oracle.local - sdk-storage.local - sdk-relay1.local - sdk-relay2.local - sdk-relay3.local - sdk-signer.local - ihm-client.local - miniback-postgres.local - coffre-front.local - coffre-back-mini.local + tor.modules.4nk-local + bitcoin.modules.4nk-local + blindbit-oracle.modules.4nk-local + sdk-storage.modules.4nk-local + i1.sdk-relay.4nk-local + i2.sdk-relay.4nk-local + i3.sdk-relay.4nk-local + sdk-signer.4nk-local + ihm.client.modules.4nk-local + miniback-postgres.4nk-local + coffre-front.4nk-local + coffre-back-mini.4nk-local ) # Vérifier la résolution DNS via dnsmasq (127.0.0.1:5353) @@ -26,14 +26,14 @@ for h in "${hostnames[@]}"; do done declare -A ports=( - [bitcoin.local]=38332 - [blindbit-oracle.local]=8000 - [sdk-storage.local]=8080 - [sdk-relay1.local]=8090 - [sdk-relay2.local]=8090 - [sdk-relay3.local]=8090 - [sdk-signer.local]=9090 - [ihm-client.local]=80 + [bitcoin.modules.4nk-local]=38332 + [blindbit-oracle.modules.4nk-local]=8000 + [sdk-storage.modules.4nk-local]=8080 + [i1.sdk-relay.4nk-local]=8090 + [i2.sdk-relay.4nk-local]=8090 + [i3.sdk-relay.4nk-local]=8090 + [sdk-signer.4nk-local]=9090 + [ihm.client.modules.4nk-local]=80 ) fail=0