# πŸš€ 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/`