4NK_env/IA_agents/deploy.md
2025-09-22 02:01:09 +00:00

369 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# agent_deploy.md
Respecte totalement et impérativemment les informations de ce document.
---
## Contexte
Consulte attentivement `IA_agents/context.md`.
Consulte attentivement `IA_agents/flux.md`.
Reste toujours sur la branche git "ext"
Fait toujours les build via CI avec des images docker pour le docker registry tagées "ext"
Déclanche toujours avec un tag "ext" remplace le précédent.
---
## Objectifs
Le déploiement se fait depuis le répertoire **`lecoffre_node/`**, en utilisant les scripts présents dans **`scripts/`**.
Ces scripts doivent évoluer au fil des retours et être améliorés plutôt que dupliqués.
Arretes toi pour corriger chaque problème rencontré avant de passer à la suite.
C'est une VM dont assures toi que tous les services écoutent et soient accessibles de l'exétieur via le nom de domaine.
Dans **tous les projets** à vérifier un par un dont lecoffre_node:
- Analyse le dossier pour bien le comprendre
- Analyse le code pour bien le comprendre
- Une branche Git dédiée `ext` existe.
- Aucun tag Git nommé `ext` nexiste.
- Les services doivent écouter sur `0.0.0.0` (et non sur `127.0.0.1`).
- Le serveur ngnix gère les url d'accès extérieurs
- Corrige aussi les erreurs non critiques.
- Corrige aussi les problèmes de code.
- N'oublie pas que les images de`lecoffre_node` sont récupérées des projets qui doivent avoir pousser leurs modifications sur la branche `ext` puis déclancher leur CI sur le tag git et docker `ext` pour pouvoir être récupérées à jour sur `lecoffre_node` (si elle n'est pas déjà présente)
- Avant de charger une image docker vérifie toujours qu'il n'y en a pas une nouvelle
Via les scripts, lance tous les services de `lecoffre_node/docker-compose.yml`.
## Procédure générale
### 🚀 Démarrage Rapide (Nouveau)
```bash
# Démarrage complet des services avec progression détaillée
./scripts/start.sh
# Validation complète du déploiement
./scripts/validate-deployment.sh
# Maintenance interactive
./scripts/maintenance.sh
```
### 🛡️ Protection des Données
```bash
# Sauvegarde automatique avant toute opération
./scripts/backup-data.sh
# Mise à jour sécurisée des images
./scripts/update-images.sh
# Restauration en cas de problème
./scripts/restore-data.sh <backup_file>
```
### Vérifications initiales par projet
1. Vérifier que le dépôt distant est **public** (si possible).
2. Vérifier l'utilisation des **clés SSH** pour le déploiement Git (idéalement ~/.ssh/id_ed25519)
3. Vérifier que la branche courante est bien **`ext`**.
4. Mettre à jour les dépendances et les langages
5. Vérifier les **variables d'environnement**.
### Mise à jour et construction par projet
6. si il y a eu des changements Supprime les caches, Optimise le build du projet et build le projet.
7. Mettre à jour la **documentation**.
8. Mettre à jour les **tests**.
9. Mettre à jour les **scripts**.
10. Vérifier que la présence et le contenu exhaustif et spécifique de :
- `.gitignore`
- `.dockerignore`
- `.cursorignore`
### Synchronisations par projet
11. Synchroniser les configurations dans `lecoffre_node/conf`.
Les configurations ngnix doivent toutes être cenralisées dans lecoffre_node/conf/ngninx (à synchroniser par des copies depuis lecoffre_node vers les fichiers cibles qui seront réellement utilisés -sauf dans lecoffre_node ce sont les fichiers de lecoffre_node/conf/ qui sont utilisés-, toujours vérifier la cohérence entre les copie et les fichiers utilisés, à intégrer dans le script existant de synchronisation à mettre à jour). Ne pas faire de liens symboliques pour les confs afin de le maintenir via git et docker.
12. Synchroniser les logs dans `lecoffre_node/logs` (brancher grafana pour un dashboard par projet)
### Sécurité et conformité par projet
13. Vérifier que le code ne fournit pas :
- de **données personnelles**,
- de **données sensibles exploitables**,
- de **failles de sécurité**.
### Gestion Git par projet
14. Si il y a eu des changements, pousser toutes les modifications sur la branche Git `ext`.
15. Supprimer les fichiers distants non suivis par Git.
### Analyse et correction par projet
16. Analyser les logs.
17. Corriger toutes les erreurs, petites et grosses, **sans désactivation**, **sans simplification**, **sans contournement**.
18. Tester.
19. Analyser de nouveau les logs.
20. Vérifier que les logs ne contiennent pas de données personnelles ou sensibles.
21. Corriger à nouveau si nécessaire (jusqu'à l'absence totale d'erreurs)
### Boucle damélioration par projet
22. Ne pas créer de nouvelles versions de scripts : **améliorer et tester ceux existants**.
23. Mettre à jour la documentation avec le **retour dexpérience** à chaque fois par une mise à jour de `docs/REX.md`.
24. Recommencer si nécessaire pour obtenir un déploiement fluide et parfait.
25. Documenter toute **nouvelle connaissance technique ou fonctionnelle** acquise.
26. Répéter la synchronisation des confs et logs.
27. Pousser toutes les modifications sur la branche `ext`.
28. Supprimer à nouveau les fichiers distants non suivis.
29. Répéter anal
### Lancement des services
30. Via les scripts, lance tous les services de `lecoffre_node/docker-compose.yml`.
31. **Utiliser le système de monitoring et progression** :
- Utiliser `./scripts/start-with-progress.sh` pour le démarrage ordonné avec suivi
- Utiliser `./scripts/monitor-progress.sh` pour l'aperçu des services
- Utiliser `./scripts/watch-progress.sh` pour la surveillance en temps réel
- Utiliser `./scripts/logs-with-progress.sh` pour les logs avec progression
32. **Surveiller la progression des services critiques** :
- **Bitcoin IBD** : Suivre la progression des blocs téléchargés
- **BlindBit** : Surveiller l'état du scan des blocs
- **SDK Relay** : Attendre la synchronisation Bitcoin avant le démarrage
- **Services LeCoffre** : Vérifier les dépendances avant démarrage
33. Corriger toutes les erreurs, petites et grosses, **sans désactivation**, **sans simplification**, **sans contournement**.
34. Tester.
35. Analyser de nouveau les logs avec les outils de monitoring.
36. Vérifier que les logs ne contiennent pas de données personnelles ou sensibles.
37. Corriger à nouveau si nécessaire (jusqu'à l'absence totale d'erreurs)
38. Mettre à jour la documentation avec le **retour d'expérience** à chaque fois par une mise à jour de `docs/REX.md`.
39. Recommencer si nécessaire pour obtenir un déploiement fluide et parfait.
40. Assures toi d'être à jour pour le service grafana
41. Assures toi d'avoir bien synchroniser la conf ngnix et relance le serveur ngnix
42. Vérifie que Loki, Promtail et Grafana sont ok avec des dashboard alimentés
43. Vérifie qu'il n'y a aucun conflit de ports
44. **Tester l'accès externe** : Vérifier toutes les URLs publiques depuis l'extérieur
---
## Spécificités Dockerfile par projet
### Architecture Docker optimisée (2024-12-19)
**Base standardisée** : Tous les Dockerfiles utilisent `debian:bookworm-slim` pour la cohérence et la légèreté.
### Variables d'environnement centralisées (2024-09-21)
**Configuration centralisée** : Toutes les variables d'environnement sont maintenant centralisées dans `lecoffre_node/.env.master`.
-**Fichiers .env supprimés** des projets individuels (sdk_relay, sdk_signer, ihm_client, lecoffre-back-mini, lecoffre-front)
-**Docker Compose** configure toutes les variables d'environnement depuis `.env.master`
-**Applications** lisent les variables d'environnement (pas de fichiers .env locaux)
-**Architecture sécurisée** : Configuration centralisée et protégée
### Règles Dockerfile obligatoires
Pour tous les projets contenant un **Dockerfile**, avant de pousser sur la branche `ext` :
#### 1. Base et packages minimaux
```dockerfile
FROM debian:bookworm-slim
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y --fix-missing \
ca-certificates curl jq git && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
```
**Packages obligatoires :**
- `ca-certificates` : Certificats SSL/TLS
- `curl` : Requêtes HTTP
- `jq` : Traitement JSON
- `git` : Clonage de dépôts (si nécessaire)
#### 2. Installation Node.js (pour les services Node.js)
```dockerfile
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
```
#### 3. Utilisateur non-root standardisé
```dockerfile
RUN useradd -m -u 1000 appuser && \
mkdir -p /app && chown -R appuser:appuser /app
USER appuser
```
#### 4. Optimisations obligatoires
- **Optimise les Layers** : Combine les RUN commands
- **Exclu les fichiers inutiles** : Vérifier `.dockerignore`
- **Nettoyage complet** : Supprimer tous les caches apt
- **Pas de clés SSH** : Utiliser HTTPS pour les repos publics
- **Pas de packages de développement** : Seulement les packages runtime
#### 5. Packages interdits en production
**Ne pas installer :**
- `build-essential`, `autoconf`, `automake`, `libtool`
- `cmake`, `ninja-build`, `clang`, `lldb`, `lld`, `make`
- `tree`, `ncdu`, `mc`, `exuberant-ctags`, `cscope`
- `vim`, `emacs`, `sed`, `gawk`
- `inetutils-tools`, `iputils-*`, `net-tools`, `iproute2`
- `python3-dev`, `go`, `rust`, `cargo`
- `wscat` (utiliser au besoin via npm install)
#### 6. Image de base réutilisable
Utiliser l'image de base créée dans `lecoffre_node/base-image/` pour de nouveaux services.
### Services avec Dockerfiles optimisés
-**sdk_relay** : Debian bookworm-slim + Rust binary
-**sdk_signer** : Debian bookworm-slim + Node.js 20
-**sdk_storage** : Debian bookworm-slim + Rust binary
-**lecoffre-back-mini** : Debian bookworm-slim + Node.js 19
-**lecoffre-front** : Debian bookworm-slim + Node.js 19
-**ihm_client** : Debian bookworm-slim + Node.js 20
-**miner** : Debian bookworm-slim + Python 3.11
### Processus de déploiement
Si il y a eu des changements, Après le push sur la branche Git `ext` :
1. Créer/supprimer le tag Docker `ext`
2. Pousser l'image sur le **tag Docker `ext`** via la CI
3. Vérifier le succès du build CI
### 🆕 Nouveaux Scripts de Gestion
**Scripts principaux** :
```bash
# Démarrage séquentiel avec progression détaillée
./scripts/start.sh
# Validation complète du déploiement
./scripts/validate-deployment.sh
# Menu de maintenance interactif
./scripts/maintenance.sh
```
**Scripts de protection des données** :
```bash
# Sauvegarde automatique des volumes Docker
./scripts/backup-data.sh
# Mise à jour sécurisée avec sauvegarde
./scripts/update-images.sh
# Restauration depuis une sauvegarde
./scripts/restore-data.sh <backup_file>
```
**Scripts de monitoring** :
```bash
# Collecte des logs de tous les services
./scripts/collect-logs.sh
# Tests des services de monitoring
./scripts/test-monitoring.sh
# Tests des dashboards Grafana
./scripts/test-dashboards.sh
```
### Déploiement avec variables centralisées
**Utilisation du .env.master** :
```bash
# Déploiement avec variables centralisées
docker compose --env-file .env.master up
# Test de la configuration
./scripts/test-env-config.sh
```
**Variables disponibles** :
- **SDK_RELAY_*** : Configuration du service relay
- **SIGNER_*** : Configuration 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
### Tailles d'images cibles
- **Services légers** : 120-200MB
- **Services avec Node.js** : 180-250MB
- **Services avec Python** : 200-300MB
---
## Système de Monitoring et Progression
### Healthchecks Informatifs
Tous les services disposent maintenant de healthchecks qui affichent des informations de progression :
- **Bitcoin** : `Bitcoin IBD: 34729/136548 blocks (101819 remaining) - 25%`
- **BlindBit** : `BlindBit ready: Oracle service responding`
- **SDK Relay** : `SDK Relay IBD: Waiting for Bitcoin sync to complete`
- **Autres services** : Messages clairs sur l'état de démarrage
### Scripts de Monitoring
**Scripts disponibles** :
- `./scripts/monitor-progress.sh` : Aperçu complet de tous les services
- `./scripts/watch-progress.sh` : Surveillance en temps réel
- `./scripts/logs-with-progress.sh` : Logs avec informations de progression
- `./scripts/start-with-progress.sh` : Démarrage ordonné avec suivi
**Utilisation** :
```bash
# Surveillance générale
./scripts/monitor-progress.sh
# Surveillance en temps réel
./scripts/watch-progress.sh
# Logs avec progression
./scripts/logs-with-progress.sh bitcoin -p -f
# Démarrage avec suivi
./scripts/start-with-progress.sh
```
### Ordre de Démarrage Critique
1. **Tor** → 2. **Bitcoin** → 3. **BlindBit** → 4. **SDK Storage** → 5. **SDK Relay** → 6. **SDK Signer** → 7. **IHM Client** → 8. **LeCoffre Backend** → 9. **LeCoffre Frontend** → 10. **Services de monitoring**
### Progression des Services
- **Bitcoin IBD** : Suivre la progression des blocs téléchargés
- **BlindBit** : Surveiller l'état du scan des blocs
- **SDK Relay** : Attendre la synchronisation Bitcoin
- **Services LeCoffre** : Vérifier les dépendances
### Documentation Complète
Consulter les documents suivants pour plus de détails :
- `IA_agents/monitoring-progress.md` : Documentation complète du système
- `IA_agents/quick-reference-monitoring.md` : Guide de référence rapide
- `IA_agents/troubleshooting-monitoring.md` : Guide de dépannage
---
## Autres
N'attend pas infiniment le résultat des curls.
Si j'interromp un terminal c'est surement que tu attendais pour rien, dans ce cas analyse la sortie du terminal.
Tests toute les urls publiques depuis l'extérieur avant de dire qu'elles sont OK.
Veuiller à tester les websockets spécifiquement et les services http(s) spécifiquement aussi.
Vérifie que tous les imports sont présents.
Déclanche les builds via CI.
Vérifie les droits et le résultats de l'écriture sur les fichiers de conf ngninx et sur les fichiers de conf de Bitcoin.
**Utilise les outils de monitoring** pour suivre la progression et diagnostiquer les problèmes.
---
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