369 lines
14 KiB
Markdown
369 lines
14 KiB
Markdown
# 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 "int-dev"
|
||
Fait toujours les build via CI avec des images docker pour le docker registry tagées "int-dev"
|
||
Déclanche toujours avec un tag "int-dev" 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 `int-dev` existe.
|
||
- Aucun tag Git nommé `int-dev` n’existe.
|
||
- 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 `int-dev` puis déclancher leur CI sur le tag git et docker `int-dev` 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 **`int-dev`**.
|
||
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 `int-dev`.
|
||
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 d’amé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 d’expé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 `int-dev`.
|
||
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 `int-dev` :
|
||
|
||
#### 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 `int-dev` :
|
||
1. Créer/supprimer le tag Docker `int-dev`
|
||
2. Pousser l'image sur le **tag Docker `int-dev`** 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 |