259 lines
8.8 KiB
Markdown
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/`
|