lecoffre_node/README-AUTONOMOUS.md

259 lines
8.8 KiB
Markdown

# 🚀 Architecture Autonome LeCoffre Node
## Vue d'ensemble
Cette architecture autonome permet de déployer l'ensemble de l'écosystème LeCoffre dans un seul conteneur Docker, avec Nginx intégré pour une autonomie complète.
## 🏗️ Architecture
```
┌─────────────────────────────────────────────────────────┐
│ Container Master │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Nginx (Port 80) │ │
│ │ - Reverse Proxy │ │
│ │ - Load Balancing │ │
│ │ - SSL Termination │ │
│ │ - Rate Limiting │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Supervisor │ │
│ │ - Process Management │ │
│ │ - Auto-restart │ │
│ │ - Log Management │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Docker Compose Services │ │
│ │ - Bitcoin Signet │ │
│ │ - SDK Relay/Signer/Storage │ │
│ │ - LeCoffre Front/Back │ │
│ │ - IHM Client │ │
│ │ - Grafana/Loki/Promtail │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```
## 📁 Structure des fichiers
```
lecoffre_node/
├── Dockerfile.master # Image Docker autonome
├── .env.master # Configuration avec secrets
├── env.master # Variables publiques
├── docker-compose.yml # Services internes
├── conf/
│ ├── nginx/
│ │ └── nginx.conf # Configuration Nginx intégrée
│ └── supervisor/
│ └── supervisord.conf # Gestion des processus
├── scripts/
│ ├── entrypoint.sh # Point d'entrée principal
│ ├── startup.sh # Démarrage des services
│ └── deploy-autonomous.sh # Script de déploiement
└── README-AUTONOMOUS.md # Cette documentation
```
## 🔐 Sécurité
### Protection des secrets
- Tous les fichiers `.env` sont protégés par `.gitignore`
- Les secrets sont centralisés dans `.env.master`
- Variables sensibles : clés API, mots de passe, tokens
### Variables protégées
```bash
# IdNot
IDNOT_API_KEY=ba557f84-0bf6-4dbf-844f-df2767555e3e
IDNOT_CLIENT_SECRET=3F733549E879878344B6C949B366BB5CDBB2DB5B7F7AB7EBBEBB0F0DD0776D1C
# OVH
OVH_APP_SECRET=de1fac1779d707d263a611a557cd5766
OVH_CONSUMER_KEY=5fe817829b8a9c780cfa2354f8312ece
# Stripe
STRIPE_SECRET_KEY=sk_test_51OwKmMP5xh1u9BqSeFpqw0Yr15hHtFsh0pvRGaE0VERhlYtvw33ND1qiGA6Dy1DPmmV61B6BqIimlhuv7bwElhjF00PLQwD60n
# Grafana
GF_SECURITY_ADMIN_PASSWORD=Fuy8ZfxQI2xdSdoB8wsGxNjyU
```
## 🚀 Déploiement
### Prérequis
- Docker et Docker Compose installés
- Ports 80, 443, 3000 disponibles (le conteneur utilise son propre Nginx)
- Accès au socket Docker (`/var/run/docker.sock`)
- **Nginx du host supprimé** pour éviter les conflits
### Déploiement automatique
```bash
cd /home/debian/4NK_env/lecoffre_node
./scripts/deploy-autonomous.sh
```
### Déploiement manuel
```bash
# 1. Construction de l'image
docker build -f Dockerfile.master -t lecoffre-node-master:ext .
# 2. Démarrage du conteneur (utilise le port 80 du host)
docker run -d \
--name lecoffre-node-master \
--privileged \
--restart unless-stopped \
-p 80:80 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/data:/app/data \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/.env.master:/app/.env \
lecoffre-node-master:ext
```
### Désinstallation du Nginx du host (optionnel)
```bash
# Pour une indépendance complète, désinstaller Nginx du host
./scripts/uninstall-host-nginx.sh
```
## 🌐 Services exposés
| Service | URL | Description |
|---------|-----|-------------|
| Status Page | http://localhost/status/ | Tableau de bord des services |
| Grafana | http://localhost/grafana/ | Monitoring et logs |
| LeCoffre Front | http://localhost/lecoffre/ | Application principale |
| IHM Client | http://localhost/ | Interface client |
| API Backend | http://localhost/api/ | API REST |
| WebSocket | ws://localhost/ws/ | Communication temps réel |
| **Redirections IdNot** | http://dev3.4nkweb.com/ | Redirections externes IdNot |
| **HTTPS** | https://localhost/ | Accès sécurisé (certificats auto-signés) |
## 🔧 Gestion
### Commandes utiles
```bash
# Voir les logs
docker logs lecoffre-node-master
# Accéder au shell
docker exec -it lecoffre-node-master bash
# Redémarrer le conteneur
docker restart lecoffre-node-master
# Arrêter le conteneur
docker stop lecoffre-node-master
# Voir les services internes
docker exec lecoffre-node-master docker-compose ps
```
### Surveillance
```bash
# Healthcheck automatique
docker inspect lecoffre-node-master | grep Health -A 10
# Vérification des services
curl -f http://localhost:8080/status/api/health
```
## 📊 Monitoring
### Grafana Dashboards
- **Bitcoin Miner** : Surveillance du minage Signet
- **Backend Services** : Métriques des APIs
- **SDK Services** : État des services SDK
- **Frontend Services** : Performance des interfaces
- **Bitcoin Services** : État du réseau Bitcoin
### Logs centralisés
- Tous les logs sont collectés par Promtail
- Stockage dans Loki
- Visualisation dans Grafana
- Rotation automatique des logs
## 🔄 Maintenance
### Sauvegarde
```bash
# Sauvegarde des données
docker exec lecoffre-node-master tar -czf /app/backup/backup-$(date +%Y%m%d).tar.gz /app/data
# Restauration
docker exec lecoffre-node-master tar -xzf /app/backup/backup-YYYYMMDD.tar.gz -C /
```
### Mise à jour
```bash
# 1. Arrêter le conteneur
docker stop lecoffre-node-master
# 2. Reconstruire l'image
docker build -f Dockerfile.master -t lecoffre-node-master:ext .
# 3. Redémarrer
docker start lecoffre-node-master
```
## 🚨 Dépannage
### Problèmes courants
1. **Services non accessibles**
```bash
docker logs lecoffre-node-master
docker exec lecoffre-node-master docker-compose ps
```
2. **Problème de permissions Docker**
```bash
sudo chmod 666 /var/run/docker.sock
```
3. **Ports déjà utilisés**
```bash
sudo netstat -tulpn | grep :8080
sudo fuser -k 8080/tcp
```
### Logs détaillés
```bash
# Logs du conteneur master
docker logs lecoffre-node-master -f
# Logs des services internes
docker exec lecoffre-node-master tail -f /app/logs/docker-compose.log
# Logs Nginx
docker exec lecoffre-node-master tail -f /var/log/nginx/error.log
```
## 📝 Configuration
### Variables d'environnement principales
- `EXTERNAL_DOMAIN` : Domaine externe (dev4.4nkweb.com)
- `INTERNAL_DOMAIN` : Domaine interne (localhost)
- `DOCKER_NETWORK_SUBNET` : Sous-réseau Docker
- `GF_SECURITY_ADMIN_PASSWORD` : Mot de passe Grafana
### Personnalisation
1. Modifier `.env.master` pour les secrets
2. Ajuster `conf/nginx/nginx.conf` pour le routage
3. Configurer `conf/supervisor/supervisord.conf` pour les processus
## 🎯 Avantages
✅ **Autonomie complète** : Un seul conteneur pour tout l'écosystème
✅ **Sécurité renforcée** : Secrets centralisés et protégés
✅ **Monitoring intégré** : Grafana, Loki, Promtail inclus
✅ **Facilité de déploiement** : Script automatisé
✅ **Scalabilité** : Architecture modulaire
✅ **Maintenance simplifiée** : Gestion centralisée
## 📞 Support
Pour toute question ou problème :
1. Vérifier les logs : `docker logs lecoffre-node-master`
2. Consulter la documentation des services individuels
3. Tester la connectivité : `curl http://localhost:8080/status/`