345 lines
15 KiB
Markdown
345 lines
15 KiB
Markdown
# Architecture des Flux et Services - LeCoffre Node
|
|
|
|
---
|
|
|
|
## Tableau des Services - IP/Domaines et Ports
|
|
|
|
### 🚀 **Scripts de Gestion (Nouveau)**
|
|
|
|
| Script | Fonction | Utilisation |
|
|
|--------|----------|-------------|
|
|
| **`start.sh`** | Démarrage séquentiel avec progression | `./scripts/start.sh` |
|
|
| **`validate-deployment.sh`** | Validation complète du déploiement | `./scripts/validate-deployment.sh` |
|
|
| **`maintenance.sh`** | Menu interactif de maintenance | `./scripts/maintenance.sh` |
|
|
| **`backup-data.sh`** | Sauvegarde des volumes Docker | `./scripts/backup-data.sh` |
|
|
| **`restore-data.sh`** | Restauration depuis sauvegarde | `./scripts/restore-data.sh <backup>` |
|
|
| **`update-images.sh`** | Mise à jour sécurisée | `./scripts/update-images.sh` |
|
|
|
|
### 🏠 **Services Locaux (Docker Compose)**
|
|
|
|
| Service | Container | Port Local | Port Interne | Protocole | URL d'accès |
|
|
|---------|-----------|------------|--------------|-----------|-------------|
|
|
| **tor** | tor-proxy | - | 9050 | TCP | Réseau interne uniquement |
|
|
| **bitcoin** | bitcoin-signet | - | 38332 (RPC)<br>38333 (P2P)<br>29000 (ZMQ hash)<br>29001 (ZMQ rawtx) | TCP | Réseau interne uniquement |
|
|
| **blindbit** | blindbit-oracle | 0.0.0.0:8000 | 8000 | HTTP | http://0.0.0.0:8000 |
|
|
| **sdk_relay** | sdk_relay | 0.0.0.0:8090<br>0.0.0.0:8091 | 8090 (WS)<br>8091 (HTTP) | WebSocket/HTTP | ws://0.0.0.0:8090<br>http://0.0.0.0:8091 |
|
|
| **lecoffre-front** | lecoffre-front | 127.0.0.2:3004 | 3000 | HTTP | http://127.0.0.2:3004 |
|
|
| **ihm_client** | ihm_client | 0.0.0.0:3003 | 3003 | HTTP | http://0.0.0.0:3003 |
|
|
| **sdk_storage** | sdk_storage | 0.0.0.0:8081 | 8080 | HTTP | http://0.0.0.0:8081 |
|
|
| **grafana** | grafana | 127.0.0.1:3005 | 3000 | HTTP | http://127.0.0.1:3005 |
|
|
| **loki** | loki | 127.0.0.1:3100 | 3100 | HTTP | http://127.0.0.1:3100 |
|
|
| **promtail** | promtail | - | - | - | Collecte des logs |
|
|
|
|
### 🌐 **Services Externes**
|
|
|
|
| Service | Domaine | Port | Protocole | URL d'accès | Statut |
|
|
|---------|---------|------|-----------|-------------|--------|
|
|
| **Bootstrap Relay** | dev3.4nkweb.com | 443 | WSS | wss://dev3.4nkweb.com/ws/ | ✅ Actif |
|
|
| **Signer Externe** | dev3.4nkweb.com | 9090 | WS | ws://dev3.4nkweb.com:9090 | ✅ Actif |
|
|
| **Signer Base** | dev3.4nkweb.com | 443 | HTTPS | https://dev3.4nkweb.com | ✅ Actif |
|
|
| **Mempool** | mempool2.4nkweb.com | 443 | HTTPS | https://mempool2.4nkweb.com | ✅ Actif |
|
|
| **Storage** | dev4.4nkweb.com | 443 | HTTPS | https://dev4.4nkweb.com/storage | ✅ Actif |
|
|
|
|
### 🔄 **Proxy Nginx (dev4.4nkweb.com)**
|
|
|
|
| Route | Destination | Port | Protocole | Description |
|
|
|-------|-------------|------|-----------|-------------|
|
|
| **/** | ihm_client | 3003 | HTTP | Interface principale |
|
|
| **/lecoffre** | lecoffre-front | 3004 | HTTP | Application LeCoffre |
|
|
| **/ws/** | sdk_relay | 8090 | WebSocket | Relay WebSocket |
|
|
| **/src/service-workers/** | ihm_client | 3003 | HTTP | Service Workers |
|
|
| **/grafana/** | grafana | 3005 | HTTP | Interface de monitoring |
|
|
| **/loki/** | loki | 3100 | HTTP | API de logs |
|
|
|
|
### 🏠 **Proxy Nginx Local (dev3.4nkweb.com)**
|
|
|
|
| Route | Destination | Port | Protocole | Description |
|
|
|-------|-------------|------|-----------|-------------|
|
|
| **/** | Redirection | 3000 | HTTP | Redirige vers port 3000 |
|
|
| **/lecoffre/** | lecoffre-front | 3004 | HTTP | Application LeCoffre local |
|
|
|
|
### 🔧 **Configuration Bitcoin Signet**
|
|
|
|
| Service | Port | Protocole | Description |
|
|
|---------|------|-----------|-------------|
|
|
| **RPC** | 38332 | TCP | Interface RPC Bitcoin |
|
|
| **P2P** | 38333 | TCP | Réseau peer-to-peer |
|
|
| **ZMQ Hash** | 29000 | TCP | Notifications de blocs |
|
|
| **ZMQ RawTx** | 29001 | TCP | Notifications de transactions |
|
|
| **Tor** | 9050 | TCP | Proxy Tor |
|
|
|
|
### 🌐 **Réseau Docker**
|
|
|
|
| Réseau | Subnet | Driver | Services |
|
|
|--------|--------|--------|----------|
|
|
| **btcnet** | 172.20.0.0/16 | bridge | Tous les services |
|
|
|
|
### 🔗 **Variables d'Environnement Clés (Centralisées - 2024-09-21)**
|
|
|
|
**Configuration centralisée** : Toutes les variables sont dans `lecoffre_node/.env.master`
|
|
|
|
| Variable | Valeur | Service |
|
|
|----------|--------|---------|
|
|
| **VITE_BOOTSTRAPURL** | wss://dev4.4nkweb.com/ws/ | ihm_client |
|
|
| **RELAY_URLS** | wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ ||
|
|
| **bootstrap_url** | wss://dev3.4nkweb.com/ws/ | sdk_relay |
|
|
| **storage** | https://dev4.4nkweb.com/storage | sdk_relay |
|
|
| **GRAFANA_ADMIN_PASSWORD** | admin123 | grafana |
|
|
| **GF_SERVER_ROOT_URL** | https://dev4.4nkweb.com/grafana/ | grafana |
|
|
|
|
**Variables centralisées** :
|
|
- **SDK_RELAY_*** : Configuration complète du service relay
|
|
- **SIGNER_*** : Configuration complète du service signer
|
|
- **VITE_*** : Configuration des applications frontend
|
|
- **IDNOT_*** : Configuration des APIs notaires
|
|
- **STRIPE_*** : Configuration des paiements
|
|
- **MAILCHIMP_*** : Configuration des emails
|
|
- **OVH_*** : Configuration des SMS
|
|
|
|
---
|
|
|
|
## Flux d'Architecture
|
|
|
|
### 🔄 **Flux Principal**
|
|
|
|
```
|
|
Internet → dev4.4nkweb.com (Nginx) → Services Locaux
|
|
```
|
|
|
|
1. **Frontend** : `https://dev4.4nkweb.com/lecoffre` → lecoffre-front (127.0.0.2:3004)
|
|
3. **IHM** : `https://dev4.4nkweb.com/` → ihm_client (0.0.0.0:3003)
|
|
4. **WebSocket** : `https://dev4.4nkweb.com/ws/` → sdk_relay (0.0.0.0:8090)
|
|
5. **Monitoring** : `https://dev4.4nkweb.com/grafana/` → grafana (127.0.0.1:3005)
|
|
6. **Logs API** : `https://dev4.4nkweb.com/loki/` → loki (127.0.0.1:3100)
|
|
|
|
### 🌐 **Flux Externes**
|
|
|
|
- **Bootstrap** : `wss://dev3.4nkweb.com/ws/` (Relay externe)
|
|
- **Signer** : `ws://dev3.4nkweb.com:9090` (Actuellement inactif)
|
|
- **Mempool** : `https://mempool2.4nkweb.com` (Réseau Bitcoin Signet)
|
|
|
|
---
|
|
|
|
## 📊 **Architecture du Monitoring**
|
|
|
|
### 🔄 **Stack de Monitoring**
|
|
|
|
```
|
|
Services → Logs Centralisés → Promtail → Loki → Grafana
|
|
↓ ↓ ↓ ↓ ↓
|
|
Docker logs/ Collecte Stockage Dashboard
|
|
```
|
|
|
|
### 📁 **Centralisation des Logs**
|
|
|
|
| Service | Dossier de Logs | Volume Docker | Description |
|
|
|---------|-----------------|---------------|-------------|
|
|
| **bitcoin** | `logs/bitcoin/` | `./logs/bitcoin:/var/log/bitcoin` | Logs Bitcoin Signet |
|
|
| **blindbit** | `logs/blindbit/` | `./logs/blindbit:/var/log/blindbit` | Logs Oracle |
|
|
| **sdk_relay** | `logs/sdk_relay/` | `./logs/sdk_relay:/var/log/sdk_relay` | Logs Relay |
|
|
|
|
| **sdk_storage** | `logs/sdk_storage/` | `./logs/sdk_storage:/var/log/sdk_storage` | Logs Storage |
|
|
| **lecoffre-front** | `logs/lecoffre-front/` | `./logs/lecoffre-front:/var/log/lecoffre-front` | Logs Frontend |
|
|
| **ihm_client** | `logs/ihm_client/` | `./logs/ihm_client:/var/log/ihm_client` | Logs IHM |
|
|
| **miner** | `logs/miner/` | `./logs/miner:/var/log/miner` | Logs Mineur |
|
|
| **tor** | `logs/tor/` | `./logs/tor:/var/log/tor` | Logs Tor |
|
|
|
|
### 📊 **Dashboards Grafana**
|
|
|
|
| Dashboard | ID | Description | Métriques |
|
|
|-----------|----|--------------|-----------|
|
|
| **Vue d'ensemble LeCoffre** | `lecoffre-overview` | Monitoring global | Erreurs par service, volume de logs, logs d'erreur temps réel |
|
|
| **Bitcoin & Miner** | `bitcoin-miner` | Monitoring blockchain | Nouveaux blocs, blocs minés, erreurs blockchain |
|
|
| **Services Applications** | `services-overview` | Monitoring applicatif | Volume de logs par service, erreurs applications |
|
|
|
|
### 🔧 **Scripts de Gestion**
|
|
|
|
| Script | Description | Usage |
|
|
|--------|-------------|-------|
|
|
| `deploy-grafana.sh` | Déploiement du monitoring | `./scripts/deploy-grafana.sh start` |
|
|
| `setup-logs.sh` | Configuration des logs | `./scripts/setup-logs.sh` |
|
|
| `collect-logs.sh` | Collecte des logs | `./scripts/collect-logs.sh` |
|
|
| `test-monitoring.sh` | Test de connectivité | `./scripts/test-monitoring.sh` |
|
|
| `sync-monitoring-config.sh` | Synchronisation config | `./scripts/sync-monitoring-config.sh` |
|
|
|
|
---
|
|
|
|
## ⚠️ **Points d'Attention**
|
|
|
|
1. **dev3.4nkweb.com:9090** - Service signer externe actuellement inactif
|
|
2. **dev3.4nkweb.com** - Retourne 502 Bad Gateway (services backend indisponibles)
|
|
3. **Ports 0.0.0.0** - Services locaux uniquement accessibles depuis la machine
|
|
4. **Ports 127.0.0.2** - lecoffre-front sur interface séparée
|
|
5. **Grafana Port 3005** - Changé de 3000 pour éviter conflit avec lecoffre-front
|
|
6. **Monitoring** - Loki et Promtail doivent être démarrés avant Grafana
|
|
|
|
## 📋 **Ordre de Démarrage des Services**
|
|
|
|
Selon les règles du projet, l'ordre de démarrage est :
|
|
|
|
### 🚀 **Services Principaux**
|
|
1. **tor** - Proxy anonyme
|
|
2. **bitcoin** - Nœud Bitcoin Signet
|
|
3. **blindbit** - Oracle Bitcoin
|
|
4. **sdk_storage** - Stockage temporaire
|
|
5. **sdk_relay** - Relais des transactions
|
|
7. **ihm_client** - Interface utilisateur
|
|
9. **lecoffre-front** - Frontend application
|
|
|
|
### 📊 **Services de Monitoring**
|
|
10. **loki** - Base de données de logs
|
|
11. **promtail** - Agent de collecte des logs
|
|
12. **grafana** - Interface de visualisation
|
|
|
|
### 🔧 **Services Utilitaires**
|
|
- **watchtower** - Surveillance automatique des conteneurs
|
|
- **signet_miner** - Mineur Bitcoin (profil séparé)
|
|
|
|
---
|
|
|
|
## 🔧 **Configuration Critique**
|
|
|
|
### 🌐 **Services Externes**
|
|
- **Mempool du réseau signet** : `https://mempool2.4nkweb.com/fr/docs/api/rest`
|
|
- **Test de connectivité Bitcoin** : `docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile=/home/bitcoin/.bitcoin/signet/.cookie getblockchaininfo`
|
|
- **Test WebSocket Bootstrap** : `wss://dev3.4nkweb.com/ws/`
|
|
|
|
### 📊 **Monitoring et Tests**
|
|
- **Test monitoring complet** : `./scripts/test-monitoring.sh`
|
|
- **Déploiement Grafana** : `./scripts/deploy-grafana.sh start`
|
|
- **Collecte des logs** : `./scripts/collect-logs.sh`
|
|
- **Grafana local** : `http://localhost:3005` (admin/admin123)
|
|
- **Loki API** : `http://localhost:3100/loki/api/v1/labels`
|
|
- **Test connectivité Grafana** : `curl http://localhost:3005/api/health`
|
|
- **Test connectivité Loki** : `curl http://localhost:3100/ready`
|
|
|
|
---
|
|
|
|
## 💾 **Volumes et Persistance des Données**
|
|
|
|
### 📦 **Volumes Docker**
|
|
|
|
| Volume | Services | Données | Persistance |
|
|
|--------|----------|---------|-------------|
|
|
| **4nk_node_bitcoin_data** | bitcoin, blindbit | Blockchain, wallet, conf | ✅ Critique |
|
|
| **blindbit_data** | blindbit | Oracle data, tweaks | ✅ Critique |
|
|
| **sdk_data** | sdk_relay | Relay data, logs | ✅ Important |
|
|
| **grafana_data** | grafana | Dashboards, config | ✅ Important |
|
|
| **loki_data** | loki | Logs stockés | ✅ Important |
|
|
|
|
### 📁 **Volumes de Logs**
|
|
|
|
| Service | Volume Local | Volume Conteneur | Description |
|
|
|---------|--------------|------------------|-------------|
|
|
| **Tous services** | `./logs/{service}/` | `/var/log/{service}` | Logs centralisés |
|
|
| **Bitcoin** | `./logs/bitcoin/` | `/var/log/bitcoin` | Logs blockchain |
|
|
| **Applications** | `./logs/{app}/` | `/var/log/{app}` | Logs applicatifs |
|
|
|
|
### 🔄 **Rotation et Nettoyage**
|
|
|
|
- **Rotation automatique** : Configuration dans `conf/logrotate/`
|
|
- **Rétention** : 7 jours par défaut
|
|
- **Compression** : Automatique après rotation
|
|
- **Nettoyage** : Scripts de maintenance disponibles
|
|
|
|
---
|
|
|
|
## 🚀 **Déploiement et Maintenance**
|
|
|
|
### 📋 **Commandes Essentielles**
|
|
|
|
```bash
|
|
# Démarrage complet avec variables centralisées
|
|
docker compose --env-file .env.master up -d
|
|
|
|
# Test de la configuration centralisée
|
|
./scripts/test-env-config.sh
|
|
|
|
# Démarrage monitoring
|
|
./scripts/deploy-grafana.sh start
|
|
|
|
# Test de connectivité
|
|
./scripts/test-monitoring.sh
|
|
|
|
# Collecte des logs
|
|
./scripts/collect-logs.sh
|
|
|
|
# Synchronisation config
|
|
./scripts/sync-monitoring-config.sh
|
|
```
|
|
|
|
### 🔧 **Maintenance**
|
|
|
|
- **Surveillance** : Watchtower automatique toutes les 30s
|
|
- **Logs** : Centralisés et rotatifs
|
|
- **Monitoring** : Grafana + Loki + Promtail
|
|
- **Backup** : Volumes Docker persistants
|
|
|
|
---
|
|
|
|
## 🌐 **Configuration Nginx - Règles et Routes**
|
|
|
|
### 📋 **Tableau Récapitulatif des Routes**
|
|
|
|
| Domaine | Port | Route | Destination | Protocole | Statut |
|
|
|---------|------|-------|-------------|-----------|--------|
|
|
| **dev4.4nkweb.com** | 80 | `/` | Redirection HTTPS | HTTP | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 80 | `/.well-known/acme-challenge/` | Let's Encrypt | HTTP | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/grafana/` | Grafana (3005) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/loki/` | Loki (3100) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/status/` | Page statut | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/status/api` | API statut (3006) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/api/` | Backend (8080) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/ws/` | SDK Relay (8090) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/signer/` | SDK Signer (3001) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/blindbit/` | BlindBit (8000) | HTTPS | ✅ Actif |
|
|
| **dev4.4nkweb.com** | 443 | `/` | IHM Client (3003) | HTTPS | ✅ Actif |
|
|
| **dev3.4nkweb.com** | 80 | `/` | Redirection port 3000 | HTTP | ✅ Actif |
|
|
| **dev3.4nkweb.com** | 3000 | `/lecoffre/` | Frontend (3004) | HTTP | ✅ Actif |
|
|
| **dev3.4nkweb.com** | 3000 | `/authorized-client` | Frontend (3004) | HTTP | ✅ Actif |
|
|
|
|
### 🔧 **Configuration des Certificats SSL**
|
|
|
|
| Domaine | Certificat | Expiration | Statut |
|
|
|---------|------------|------------|--------|
|
|
| **dev4.4nkweb.com** | `/etc/letsencrypt/live/dev4.4nkweb.com/` | 15 Déc 2025 | ✅ Valide |
|
|
|
|
### 📁 **Fichiers de Configuration**
|
|
|
|
| Fichier | Description | Statut |
|
|
|---------|-------------|--------|
|
|
| `/etc/nginx/sites-enabled/dev4.4nkweb.com.conf` | HTTP + Redirection | ✅ Actif |
|
|
| `/etc/nginx/sites-enabled/dev4.4nkweb.com-https.conf` | HTTPS complet | ✅ Actif |
|
|
| `/etc/nginx/sites-enabled/dev3.4nkweb.com.conf` | Local HTTP | ✅ Actif |
|
|
| `/etc/nginx/sites-enabled/dev3.4nkweb.com-3000.conf` | Local port 3000 | ✅ Actif |
|
|
|
|
### 🧹 **Configuration Centralisée**
|
|
|
|
**Toutes les configurations Nginx sont centralisées dans `lecoffre_node/conf/nginx/` :**
|
|
- ✅ **Configurations projet** : Supprimées des autres projets
|
|
- ✅ **Configuration native** : Conservée dans `/etc/nginx/`
|
|
- ✅ **Liens symboliques** : Pointent vers `lecoffre_node/conf/nginx/`
|
|
- ✅ **Fichiers supprimés** : `ihm_client/nginx.dev.conf` (obsolète)
|
|
|
|
### ✅ **Statut Final**
|
|
|
|
1. **Configuration HTTPS active** : Le port 443 est en écoute ✅
|
|
2. **Fichiers nettoyés** : Tous les fichiers de sauvegarde supprimés ✅
|
|
3. **Configuration complète** : Tous les services accessibles en HTTPS ✅
|
|
4. **Redirection HTTP → HTTPS** : Fonctionnelle ✅
|
|
|
|
### 🎉 **Services HTTPS Opérationnels**
|
|
|
|
- ✅ **Grafana** : `https://dev4.4nkweb.com/grafana/`
|
|
- ✅ **Page de Statut** : `https://dev4.4nkweb.com/status/`
|
|
- ✅ **API de Statut** : `https://dev4.4nkweb.com/status/api`
|
|
- ✅ **Loki** : `https://dev4.4nkweb.com/loki/`
|
|
- ✅ **IHM Client** : `https://dev4.4nkweb.com/`
|
|
- ✅ **API Backend** : `https://dev4.4nkweb.com/api/`
|
|
- ✅ **WebSocket Relay** : `https://dev4.4nkweb.com/ws/`
|
|
- ✅ **BlindBit** : `https://dev4.4nkweb.com/blindbit/`
|
|
|
|
---
|
|
|
|
**Met à jour ce document si tu détectes des incohérences ou pose des questions pour confirmer.**
|
|
**Propose des améliorations dans un document lecoffre_node/IA_agents/todo.md** |