align docker images

This commit is contained in:
Nicolas Cantu 2025-09-21 12:55:37 +00:00
parent 1fce2df474
commit 4ec2546645
13 changed files with 1401 additions and 23 deletions

View File

@ -163,3 +163,72 @@ Chaque projet doit être prêt pour un dépôt sur `git.4nkweb.com` :
- Ne jamais partager le contenu du terminal ou des fichiers sensibles via Cursor en dehors du périmètre du projet. - Ne jamais partager le contenu du terminal ou des fichiers sensibles via Cursor en dehors du périmètre du projet.
- Vérifier et tenir à jour les .cursorrules. - Vérifier et tenir à jour les .cursorrules.
- Vérifier et tenir à jour les .cursorignore. - Vérifier et tenir à jour les .cursorignore.
# Déploiement
Dans lecoffre_node en utilisant les scripts de scripts/ :
Il y a des branches git "ext", des images docker avec le tag "ext", pas de tag git "ext"
pour tous les projets avec des Dockerfile:
vérifie que le repos distant est public (si possible, non bloquant, pour info)
vérifie que tu peux utiliser tes clés ssh pour le déploiement sur git
vérifie que tu es sur la branche ext
met à jour les dépendances
vérifie les variables d'environnement
met à jour le Dockerfle pour une bonne maîtrise des pré-requis (intégre l'installation et la mise à jour avec un sudo apt udpate && sudo apt upgrade et jq curl sed awk telnet ping npm (dernière version) et wscat)
build le projet
met à jour la documentation
met à jour les tests
met à jour les scripts
vérifie .gitignore
vérifie .dockerignore
vérifie .cursorignore
synchronise les confs sur lecoffre_node/conf
synchronise les logs sur lecoffre_node/logs
pousse toutes les modifications sur la branche git "ext"
supprimer les fichiers distants non suivis sur le git
pousse sur la tag docker "ext" via la CI
analyse les logs
corrige les erreurs petites et grosses sans déscactivation, sans simplification, sans contournement
teste
analyse les logs
corrige les erreurs petites et grosses sans déscactivation, sans simplification, sans contournement
ne fait pas d'autres versions des scripts mais améliore ceux existant et teste les
met à jour avec ce retour d'expérience
recommence si besoin pour valider un déploiement parfait et fluide
si tu as appres quelque chose techniquement ou fonctionnement écris le dans les docs
synchronise les confs sur lecoffre_node/conf
synchronise les logs sur lecoffre_node/logs
pousse toutes les modifications sur la branche git "ext"
pour tous les projets avec des sans Dockerfile avec sur git:
vérifie que le repos distant est public (si possible, non bloquant, pour info)
vérifie que tu peux utiliser tes clés ssh pour le déploiement sur git
vérifie que tu es sur la branche ext
met à jour les dépendances
vérifie les variables d'environnement
met à jour le Dockerfle pour une bonne maîtrise des pré-requis (intégre l'installation et la mise à jour avec un sudo apt udpate && sudo apt upgrade et jq curl sed awk telnet ping npm (dernière version) et wscat)
build le projet
met à jour la documentation
met à jour les tests
met à jour les scripts
vérifie .gitignore
vérifie .dockerignore
vérifie .cursorignore
synchronise les confs sur lecoffre_node/conf
synchronise les logs sur lecoffre_node/logs
pousse toutes les modifications sur la branche git "ext"
supprimer les fichiers distants non suivis sur le git
analyse les logs
corrige les erreurs petites et grosses sans déscactivation, sans simplification, sans contournement
teste
analyse les logs
corrige les erreurs petites et grosses sans déscactivation, sans simplification, sans contournement
ne fait pas d'autres versions des scripts mais améliore ceux existant et teste les
met à jour avec ce retour d'expérience
recommence si besoin pour valider un déploiement parfait et fluide
si tu as appres quelque chose techniquement ou fonctionnement écris le dans les docs
synchronise les confs sur lecoffre_node/conf
synchronise les logs sur lecoffre_node/logs
pousse toutes les modifications sur la branche git "ext"

113
IA_agents/deploy.md Normal file
View File

@ -0,0 +1,113 @@
# agent_deploy.md
## Contexte
Le site est sur @https://dev4.4nkweb.com/lecoffre (`lecoffre_front`).
Il sera redirigé au login des notaires vers un site qui redirige vers local.4nkdev.com qui sera redirigé vers @https://dev4.4nkweb.com/lecoffre avec l'ouverture de l'iframe @https://dev4.4nkweb.com/ (`ihm_client`).
Analyse le contenu de `lecoffre_node/IA_agents/flux.md` pour comprendre les flux.
Met à jour ce flux si tu détecte des incohérences ou pose des questions pour confirmer.
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.
Dans **tous les projets** :
- Une branche Git dédiée `ext` existe.
- Aucun tag Git nommé `ext` nexiste.
- Des images Docker avec le tag `ext` existent.
- Les images Docker ne sont build que via CI qui est la seule à pousser sur le registry ou pour test localement
Projets locaux avec Dockerfile à déployer par **`lecoffre_node/`** (d'autres projets externes sont ne dépendance dans le `lecoffre_node/docker-compose.yml`):
- **`sdk_relay/`** (relai des transations et messages et oracle)
- **`sdk_signer/`** (signature des processus métier et des identités/profils)
- **`sdk_storage/`** (stockage temporaire)
- **`ihm_client/`** (iframe dans les frontend des projets pour interactions avec les clés privés Bitcoin Silent Payment)
- **`lecoffre-back-mini/`** (backend pour les API tierces du projet lecoffre)
- **`lecoffre-front/`** (frontend du projet lecoffre)
Projets locaux sans Dockerfile à vérifier **`lecoffre_node/`**:
- **`sdk_common/`**
- **`sdk_client/`**
- **`sdk-signer-client/`**
---
## Procédure générale
### Vérifications initiales
1. Vérifier que le dépôt distant est **public** (si possible).
2. Vérifier lutilisation des **clés SSH** pour le déploiement Git.
3. Vérifier que la branche courante est bien **`ext`**.
4. Mettre à jour les dépendances.
5. Vérifier les **variables denvironnement**.
### Mise à jour et construction
6. Construire 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
11. Synchroniser les configurations dans `lecoffre_node/conf`.
12. Synchroniser les logs dans `lecoffre_node/logs`.
### Sécurité et conformité
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
14. Pousser toutes les modifications sur la branche Git `ext`.
15. Supprimer les fichiers distants non suivis par Git.
### Analyse et correction
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
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 analyse des logs, corrections, tests jusqu'à un déploiement parfait.
---
## Spécificités Dockerfile
Pour tous les projets contenant un **Dockerfile**, avant de pousser sur la branche `ext` :
- Mettre à jour le Dockerfile pour maîtriser les prérequis :
- inclure `sudo apt update && sudo apt upgrade`,
- installer `jq`, `curl`, `sed`, `awk`, `telnet`, `ping`, `npm` (dernière version), `wscat`.
- Construire limage pour test.
- Vérifier `.dockerignore`.
- Vérifier à l'absence de dépendances croisées ou dupliquée entre les projets, sinon mutualiser via d'autres projets/docker
Après le push sur la branche Git `ext` :
- Pousser limage sur le **tag Docker `ext`** via la CI.
---

123
IA_agents/flux.md Normal file
View File

@ -0,0 +1,123 @@
# Architecture des Flux et Services - LeCoffre Node
## Tableau des Services - IP/Domaines et Ports
### 🏠 **Services Locaux (Docker Compose)**
| Service | Container | Port Local | Port Interne | Protocole | URL d'accès |
|---------|-----------|------------|--------------|-----------|-------------|
| **tor** | tor-proxy | - | 9050 | TCP | Réseau interne uniquement |
| **bitcoin** | bitcoin-signet | - | 38332 (RPC)<br>38333 (P2P)<br>29000 (ZMQ hash)<br>29001 (ZMQ rawtx) | TCP | Réseau interne uniquement |
| **blindbit** | blindbit-oracle | 0.0.0.0:8000 | 8000 | HTTP | http://0.0.0.0:8000 |
| **sdk_relay** | sdk_relay | 0.0.0.0:8090<br>0.0.0.0:8091 | 8090 (WS)<br>8091 (HTTP) | WebSocket/HTTP | ws://0.0.0.0:8090<br>http://0.0.0.0:8091 |
| **lecoffre-back** | lecoffre-back | 0.0.0.0:8080 | 8080 | HTTP | http://0.0.0.0:8080 |
| **lecoffre-front** | lecoffre-front | 127.0.0.2:3004 | 3000 | HTTP | http://127.0.0.2:3004 |
| **ihm_client** | ihm_client | 0.0.0.0:3003 | 3003 | HTTP | http://0.0.0.0:3003 |
| **sdk_signer** | sdk_signer | 0.0.0.0:3001 | 3001 | HTTP/WebSocket | http://0.0.0.0:3001 |
| **sdk_storage** | sdk_storage | 0.0.0.0:8081 | 8080 | HTTP | http://0.0.0.0:8081 |
### 🌐 **Services Externes**
| Service | Domaine | Port | Protocole | URL d'accès | Statut |
|---------|---------|------|-----------|-------------|--------|
| **Bootstrap Relay** | dev3.4nkweb.com | 443 | WSS | wss://dev3.4nkweb.com/ws/ | ✅ Actif |
| **Signer Externe** | dev3.4nkweb.com | 9090 | WS | ws://dev3.4nkweb.com:9090 | ❌ Inactif |
| **Signer Base** | dev3.4nkweb.com | 443 | HTTPS | https://dev3.4nkweb.com | ⚠️ 502 Bad Gateway |
| **Mempool** | mempool2.4nkweb.com | 443 | HTTPS | https://mempool2.4nkweb.com | ✅ Actif |
| **Storage** | dev4.4nkweb.com | 443 | HTTPS | https://dev4.4nkweb.com/storage | ✅ Actif |
### 🔄 **Proxy Nginx (dev4.4nkweb.com)**
| Route | Destination | Port | Protocole | Description |
|-------|-------------|------|-----------|-------------|
| **/** | ihm_client | 3003 | HTTP | Interface principale |
| **/lecoffre** | lecoffre-front | 3004 | HTTP | Application LeCoffre |
| **/api/** | lecoffre-back | 8080 | HTTP | API Backend |
| **/back/** | lecoffre-back | 8080 | HTTP | API Backend (alias) |
| **/ws/** | sdk_relay | 8090 | WebSocket | Relay WebSocket |
| **/signer/** | sdk_signer | 3001 | HTTP/WebSocket | Service Signer |
| **/src/service-workers/** | ihm_client | 3003 | HTTP | Service Workers |
### 🏠 **Proxy Nginx Local (local.4nkweb.com)**
| Route | Destination | Port | Protocole | Description |
|-------|-------------|------|-----------|-------------|
| **/** | Redirection | 3000 | HTTP | Redirige vers port 3000 |
| **/lecoffre/** | lecoffre-front | 3004 | HTTP | Application LeCoffre local |
### 🔧 **Configuration Bitcoin Signet**
| Service | Port | Protocole | Description |
|---------|------|-----------|-------------|
| **RPC** | 38332 | TCP | Interface RPC Bitcoin |
| **P2P** | 38333 | TCP | Réseau peer-to-peer |
| **ZMQ Hash** | 29000 | TCP | Notifications de blocs |
| **ZMQ RawTx** | 29001 | TCP | Notifications de transactions |
| **Tor** | 9050 | TCP | Proxy Tor |
### 🌐 **Réseau Docker**
| Réseau | Subnet | Driver | Services |
|--------|--------|--------|----------|
| **btcnet** | 172.20.0.0/16 | bridge | Tous les services |
### 🔗 **Variables d'Environnement Clés**
| Variable | Valeur | Service |
|----------|--------|---------|
| **VITE_BOOTSTRAPURL** | wss://dev4.4nkweb.com/ws/ | ihm_client |
| **SIGNER_WS_URL** | ws://dev3.4nkweb.com:9090 | sdk_signer |
| **SIGNER_BASE_URL** | https://dev3.4nkweb.com | sdk_signer |
| **RELAY_URLS** | wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ | sdk_signer |
| **bootstrap_url** | wss://dev3.4nkweb.com/ws/ | sdk_relay |
| **storage** | https://dev4.4nkweb.com/storage | sdk_relay |
## Flux d'Architecture
### 🔄 **Flux Principal**
```
Internet → dev4.4nkweb.com (Nginx) → Services Locaux
```
1. **Frontend** : `https://dev4.4nkweb.com/lecoffre` → lecoffre-front (127.0.0.2:3004)
2. **API** : `https://dev4.4nkweb.com/api/` → lecoffre-back (0.0.0.0:8080)
3. **IHM** : `https://dev4.4nkweb.com/` → ihm_client (0.0.0.0:3003)
4. **WebSocket** : `https://dev4.4nkweb.com/ws/` → sdk_relay (0.0.0.0:8090)
### 🔗 **Flux de Redirection**
```
local.4nkdev.com → local.4nkweb.com → https://dev4.4nkweb.com/lecoffre
```
### 🌐 **Flux Externes**
- **Bootstrap** : `wss://dev3.4nkweb.com/ws/` (Relay externe)
- **Signer** : `ws://dev3.4nkweb.com:9090` (Actuellement inactif)
- **Mempool** : `https://mempool2.4nkweb.com` (Réseau Bitcoin Signet)
## ⚠️ **Points d'Attention**
1. **dev3.4nkweb.com:9090** - Service signer externe actuellement inactif
2. **dev3.4nkweb.com** - Retourne 502 Bad Gateway (services backend indisponibles)
3. **Ports 0.0.0.0** - Services locaux uniquement accessibles depuis la machine
4. **Ports 127.0.0.2** - lecoffre-front sur interface séparée
## 📋 **Ordre de Démarrage des Services**
Selon les règles du projet, l'ordre de démarrage est :
1. **tor** - Proxy anonyme
2. **bitcoin** - Nœud Bitcoin Signet
3. **blindbit** - Oracle Bitcoin
4. **sdk_storage** - Stockage temporaire
5. **sdk_relay** - Relais des transactions
6. **sdk_signer** - Signature des processus
7. **ihm_client** - Interface utilisateur
## 🔧 **Configuration Critique**
- **Mempool du réseau signet** : `https://mempool2.4nkweb.com/fr/docs/api/rest`
- **Test de connectivité Bitcoin** : `docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile=/home/bitcoin/.bitcoin/signet/.cookie getblockchaininfo`
- **Test WebSocket Bootstrap** : `wss://dev3.4nkweb.com/ws/`

96
conf/README.md Normal file
View File

@ -0,0 +1,96 @@
# Configuration Centralisée - LeCoffre Node
Ce dossier contient toutes les configurations centralisées pour les services du projet LeCoffre Node.
## Structure
```
conf/
├── bitcoin/ # Configuration Bitcoin Signet
│ └── bitcoin.conf
├── relay/ # Configuration SDK Relay
│ └── sdk_relay.conf
├── nginx/ # Configurations Nginx (déjà existantes)
│ └── ...
├── ihm_client/ # Configuration IHM Client
│ └── nginx.dev.conf
├── lecoffre-front/ # Configuration LeCoffre Frontend
├── lecoffre-back/ # Configuration LeCoffre Backend
└── miner/ # Configuration du mineur
```
## Scripts de Gestion
Les configurations et le déploiement sont gérés via des scripts centralisés :
- `scripts/sync-configs.sh` : Synchronise toutes les configurations
- `scripts/startup-sequence.sh` : Script principal avec déploiement complet
- `scripts/pre-build.sh` : Prépare l'environnement avant build Docker
## Avantages
1. **Centralisation** : Toutes les configurations au même endroit
2. **Cohérence** : Gestion uniforme des paramètres
3. **Maintenance** : Modifications centralisées
4. **Versioning** : Suivi des changements de configuration
5. **Backup** : Sauvegarde centralisée
## Utilisation
### Synchronisation manuelle
```bash
# Synchroniser tous les projets
./scripts/sync-configs.sh
# Synchroniser un projet spécifique
./scripts/sync-configs.sh ihm_client
```
### Déploiement complet
```bash
# Déployer tous les projets
./scripts/startup-sequence.sh deploy
# Déployer un projet spécifique
./scripts/startup-sequence.sh deploy-project ihm_client
# Déployer avec push des images Docker
PUSH_DOCKER_IMAGES=true ./scripts/startup-sequence.sh deploy
```
### Préparation avant build
```bash
# Préparer l'environnement avant build Docker
./scripts/pre-build.sh
```
### Commandes de maintenance
```bash
# Mettre à jour toutes les dépendances
./scripts/startup-sequence.sh update-deps
# Vérifier les fichiers ignore
./scripts/startup-sequence.sh check-ignore
# Nettoyer les fichiers non suivis
./scripts/startup-sequence.sh clean-untracked
# Compiler tous les projets
./scripts/startup-sequence.sh compile-all
# Exécuter tous les tests
./scripts/startup-sequence.sh test-all
```
### Modification d'une configuration
1. Éditer le fichier dans `conf/[service]/`
2. Synchroniser avec `./scripts/sync-configs.sh [service]`
3. Redémarrer le service concerné
## Services Concernés
- **Bitcoin Signet** : Configuration du nœud Bitcoin
- **SDK Relay** : Configuration du relais WebSocket
- **IHM Client** : Configuration Nginx pour l'interface client
- **LeCoffre Front/Back** : Configurations des services web
- **Mineur** : Configuration du minage Bitcoin

45
conf/bitcoin/bitcoin.conf Normal file
View File

@ -0,0 +1,45 @@
# Configuration globale
signet=1
server=1
datadir=/home/bitcoin/.bitcoin
[signet]
daemon=0
txindex=1
upnp=1
#debug=1
#loglevel=debug
logthreadnames=1
onion=tor:9050
listenonion=1
onlynet=onion
# Paramètres RPC
rpcauth=bitcoin:c8ea921c7357bd6a5a8a7c43a12350a7$955e25b17672987b17c5a12f12cd8b9c1d38f0f86201c8cd47fc431f2e1c7956
rpcallowip=0.0.0.0/0
rpcworkqueue=32
rpcthreads=4
rpcdoccheck=1
# Paramètres ZMQ
zmqpubhashblock=tcp://0.0.0.0:29000
zmqpubrawtx=tcp://0.0.0.0:29001
listen=1
bind=0.0.0.0:38333
rpcbind=0.0.0.0:38332
rpcport=38332
fallbackfee=0.0001
blockfilterindex=1
datacarriersize=205
acceptnonstdtxn=1
dustrelayfee=0.00000001
minrelaytxfee=0.00000001
prune=0
signetchallenge=0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821
wallet=mining
wallet=watchonly
maxtxfee=1
addnode=tlv2yqamflv22vfdzy2hha2nwmt6zrwrhjjzz4lx7qyq7lyc6wfhabyd.onion
addnode=6xi33lwwslsx3yi3f7c56wnqtdx4v73vj2up3prrwebpwbz6qisnqbyd.onion
addnode=id7e3r3d2epen2v65jebjhmx77aimu7oyhcg45zadafypr4crqsytfid.onion

View File

@ -0,0 +1,48 @@
server {
listen 80;
server_name localhost;
# Redirection des requêtes HTTP vers Vite
location / {
proxy_pass http://localhost:3003;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /ws/ {
proxy_pass http://dev4.4nkweb.com:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_read_timeout 86400;
}
location /storage/ {
rewrite ^/storage(/.*)$ $1 break;
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /api/ {
proxy_pass http://localhost:8091;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# CORS headers
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE" always;
add_header Access-Control-Allow-Headers "Authorization,Content-Type,Accept,X-Requested-With" always;
}
}

11
conf/relay/sdk_relay.conf Normal file
View File

@ -0,0 +1,11 @@
core_url="http://bitcoin:38332"
ws_url="0.0.0.0:8090"
wallet_name="default"
network="signet"
blindbit_url="http://blindbit-oracle:8000"
zmq_url="tcp://bitcoin:29000"
storage="https://dev4.4nkweb.com/storage"
data_dir="/home/bitcoin/.4nk"
bitcoin_data_dir="/home/bitcoin/.bitcoin"
bootstrap_url="wss://dev3.4nkweb.com/ws/"
bootstrap_faucet=true

View File

@ -15,7 +15,7 @@ services:
- tor - tor
volumes: volumes:
- bitcoin_data:/home/bitcoin/.bitcoin - bitcoin_data:/home/bitcoin/.bitcoin
- ./bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro - ./conf/bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro
networks: networks:
btcnet: btcnet:
aliases: aliases:
@ -65,7 +65,7 @@ services:
blindbit: blindbit:
condition: service_healthy condition: service_healthy
volumes: volumes:
- ./relay/sdk_relay.conf:/home/bitcoin/.conf:ro - ./conf/relay/sdk_relay.conf:/home/bitcoin/.conf:ro
- sdk_data:/home/bitcoin/.4nk - sdk_data:/home/bitcoin/.4nk
- bitcoin_data:/home/bitcoin/.bitcoin - bitcoin_data:/home/bitcoin/.bitcoin
- ./scripts/funds:/scripts/funds:ro - ./scripts/funds:/scripts/funds:ro
@ -213,7 +213,13 @@ services:
image: git.4nkweb.com/4nk/sdk_storage:ext image: git.4nkweb.com/4nk/sdk_storage:ext
container_name: sdk_storage container_name: sdk_storage
ports: ports:
- "127.0.0.1:8081:8081" - "127.0.0.1:8081:8080"
healthcheck:
test: ["CMD", "sh", "-c", "curl -f http://localhost:8080/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
networks: networks:
btcnet: btcnet:
aliases: aliases:

View File

@ -9,4 +9,3 @@ data_dir="/home/bitcoin/.4nk"
bitcoin_data_dir="/home/bitcoin/.bitcoin" bitcoin_data_dir="/home/bitcoin/.bitcoin"
bootstrap_url="wss://dev3.4nkweb.com/ws/" bootstrap_url="wss://dev3.4nkweb.com/ws/"
bootstrap_faucet=true bootstrap_faucet=true
sp_address="tsp1qqgmwp9n5p9ujhq2j6cfqe4jpkyu70jh9rgj0pwt3ndezk2mrlvw6jqew8fhsulewzglfr7g2aa48wyj4n0r7yasa3fm666vda8984ke8tuaf9m89"

104
scripts/build-project.sh Executable file
View File

@ -0,0 +1,104 @@
#!/bin/bash
# Script pour construire un projet spécifique avec synchronisation des configs
# Usage: ./scripts/build-project.sh <project_name> [docker_tag]
set -euo pipefail
# Couleurs pour les logs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonction de logging
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1"
}
# Vérifier les arguments
if [[ $# -lt 1 ]]; then
log_error "Usage: $0 <project_name> [docker_tag]"
echo ""
echo "Projets disponibles:"
echo " - ihm_client"
echo " - lecoffre-front"
echo " - lecoffre-back-mini"
echo " - sdk_relay"
echo " - sdk_storage"
echo " - sdk_signer"
echo ""
echo "Exemples:"
echo " $0 ihm_client"
echo " $0 ihm_client ext"
exit 1
fi
PROJECT_NAME="$1"
DOCKER_TAG="${2:-ext}"
PROJECT_ROOT="/home/debian/lecoffre_node"
PROJECT_PATH="/home/debian/$PROJECT_NAME"
# Changer vers le répertoire du projet
cd "$PROJECT_ROOT"
log "Construction du projet: $PROJECT_NAME (tag: $DOCKER_TAG)"
# 1. Synchroniser les configurations pour ce projet
log "Synchronisation des configurations pour $PROJECT_NAME..."
if ./scripts/sync-configs.sh "$PROJECT_NAME"; then
log_success "Configurations synchronisées"
else
log_warning "Aucune configuration à synchroniser pour $PROJECT_NAME"
fi
# 2. Changer vers le répertoire du projet
if [[ ! -d "$PROJECT_PATH" ]]; then
log_error "Projet non trouvé: $PROJECT_PATH"
exit 1
fi
cd "$PROJECT_PATH"
# 3. Vérifier qu'un Dockerfile existe
if [[ ! -f "Dockerfile" ]]; then
log_error "Dockerfile non trouvé dans $PROJECT_PATH"
exit 1
fi
# 4. Construire l'image Docker
log "Construction de l'image Docker..."
IMAGE_NAME="git.4nkweb.com/4nk/$PROJECT_NAME:$DOCKER_TAG"
if docker build -t "$IMAGE_NAME" .; then
log_success "Image construite: $IMAGE_NAME"
else
log_error "Échec de la construction de l'image"
exit 1
fi
# 5. Optionnel: pousser l'image
if [[ "${PUSH_IMAGE:-false}" == "true" ]]; then
log "Poussée de l'image vers le registry..."
if docker push "$IMAGE_NAME"; then
log_success "Image poussée: $IMAGE_NAME"
else
log_error "Échec de la poussée de l'image"
exit 1
fi
fi
log_success "Construction terminée pour $PROJECT_NAME"

100
scripts/pre-build.sh Executable file
View File

@ -0,0 +1,100 @@
#!/bin/bash
# Script de préparation avant build Docker
# Synchronise les configurations et prépare l'environnement
set -euo pipefail
# Couleurs pour les logs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonction de logging
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1"
}
# Répertoire racine du projet
PROJECT_ROOT="/home/debian/lecoffre_node"
# Changer vers le répertoire du projet
cd "$PROJECT_ROOT"
log "Préparation avant build Docker..."
# 1. Synchroniser toutes les configurations
log "Synchronisation des configurations..."
if ./scripts/sync-configs.sh; then
log_success "Configurations synchronisées"
else
log_error "Échec de la synchronisation des configurations"
exit 1
fi
# 2. Mettre à jour les dépendances de tous les projets
log "Mise à jour des dépendances..."
if ./scripts/startup-sequence.sh update-deps; then
log_success "Dépendances mises à jour"
else
log_warning "Échec de la mise à jour des dépendances"
fi
# 3. Vérifier les fichiers ignore
log "Vérification des fichiers ignore..."
if ./scripts/startup-sequence.sh check-ignore; then
log_success "Fichiers ignore vérifiés"
else
log_warning "Problèmes détectés avec les fichiers ignore"
fi
# 4. Nettoyer les fichiers non suivis
log "Nettoyage des fichiers non suivis..."
if ./scripts/startup-sequence.sh clean-untracked; then
log_success "Fichiers non suivis nettoyés"
else
log_warning "Échec du nettoyage des fichiers non suivis"
fi
# 5. Vérifier que les services nécessaires sont arrêtés
log "Vérification des services Docker..."
if docker compose ps --services --filter "status=running" | grep -q .; then
log_warning "Certains services sont en cours d'exécution"
log "Arrêt des services pour le build..."
docker compose down
log_success "Services arrêtés"
else
log_success "Aucun service en cours d'exécution"
fi
# 6. Nettoyer les images Docker obsolètes (optionnel)
if [[ "${CLEAN_DOCKER:-false}" == "true" ]]; then
log "Nettoyage des images Docker obsolètes..."
docker system prune -f
log_success "Nettoyage terminé"
fi
# 7. Vérifier l'espace disque
log "Vérification de l'espace disque..."
DISK_USAGE=$(df /home/debian | tail -1 | awk '{print $5}' | sed 's/%//')
if [[ $DISK_USAGE -gt 90 ]]; then
log_warning "Espace disque faible: ${DISK_USAGE}% utilisé"
else
log_success "Espace disque OK: ${DISK_USAGE}% utilisé"
fi
log_success "Préparation terminée - Prêt pour le build Docker"

View File

@ -19,6 +19,12 @@ EXTERNAL_SIGNER_PORT="9090"
PUBLIC_FRONT_URL="https://dev4.4nkweb.com/lecoffre" PUBLIC_FRONT_URL="https://dev4.4nkweb.com/lecoffre"
PUBLIC_IHM_URL="https://dev4.4nkweb.com" PUBLIC_IHM_URL="https://dev4.4nkweb.com"
# Projets avec Docker (images à construire)
DOCKER_PROJECTS=("sdk_relay" "sdk_storage" "sdk_signer" "ihm_client" "lecoffre-front" "lecoffre-back-mini")
# Projets sans Docker (libraries/packages)
LIBRARY_PROJECTS=("sdk_client" "sdk_common" "sdk-signer-client")
# Fonction de logging # Fonction de logging
log() { log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
@ -39,9 +45,9 @@ log_error() {
# Fonction de validation des dépendances externes # Fonction de validation des dépendances externes
validate_external_dependencies() { validate_external_dependencies() {
log "Validation des dépendances externes..." log "Validation des dépendances externes..."
local all_ok=true local all_ok=true
# Test du signer distant # Test du signer distant
log "Test de connectivité vers le signer distant ($EXTERNAL_SIGNER_HOST:$EXTERNAL_SIGNER_PORT)..." log "Test de connectivité vers le signer distant ($EXTERNAL_SIGNER_HOST:$EXTERNAL_SIGNER_PORT)..."
if timeout 10 bash -c "</dev/tcp/$EXTERNAL_SIGNER_HOST/$EXTERNAL_SIGNER_PORT" 2>/dev/null; then if timeout 10 bash -c "</dev/tcp/$EXTERNAL_SIGNER_HOST/$EXTERNAL_SIGNER_PORT" 2>/dev/null; then
@ -50,7 +56,7 @@ validate_external_dependencies() {
log_error "Signer distant non accessible" log_error "Signer distant non accessible"
all_ok=false all_ok=false
fi fi
# Test des URLs publiques # Test des URLs publiques
log "Test de connectivité vers les URLs publiques..." log "Test de connectivité vers les URLs publiques..."
if curl -s --connect-timeout 10 --max-time 15 "$PUBLIC_FRONT_URL" >/dev/null 2>&1; then if curl -s --connect-timeout 10 --max-time 15 "$PUBLIC_FRONT_URL" >/dev/null 2>&1; then
@ -58,13 +64,13 @@ validate_external_dependencies() {
else else
log_warning "LeCoffre Front non accessible (peut être normal si pas encore démarré)" log_warning "LeCoffre Front non accessible (peut être normal si pas encore démarré)"
fi fi
if curl -s --connect-timeout 10 --max-time 15 "$PUBLIC_IHM_URL" >/dev/null 2>&1; then if curl -s --connect-timeout 10 --max-time 15 "$PUBLIC_IHM_URL" >/dev/null 2>&1; then
log_success "IHM Client accessible" log_success "IHM Client accessible"
else else
log_warning "IHM Client non accessible (peut être normal si pas encore démarré)" log_warning "IHM Client non accessible (peut être normal si pas encore démarré)"
fi fi
return $([ "$all_ok" = true ] && echo 0 || echo 1) return $([ "$all_ok" = true ] && echo 0 || echo 1)
} }
@ -89,6 +95,324 @@ wait_for_service() {
return 1 return 1
} }
# Fonction pour synchroniser les configurations
sync_configurations() {
log "Synchronisation des configurations centralisées..."
if [[ -f "./scripts/sync-configs.sh" ]]; then
if ./scripts/sync-configs.sh; then
log_success "Configurations synchronisées"
else
log_warning "Échec de la synchronisation des configurations"
fi
else
log_warning "Script de synchronisation non trouvé"
fi
}
# Fonction pour mettre à jour les dépendances d'un projet
update_project_dependencies() {
local project="$1"
local project_path="/home/debian/$project"
log "Mise à jour des dépendances pour $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Rust projects
if [[ -f "Cargo.toml" ]]; then
log "Mise à jour des dépendances Rust..."
if cargo update; then
log_success "Dépendances Rust mises à jour"
else
log_warning "Échec de la mise à jour des dépendances Rust"
fi
fi
# Node.js projects
if [[ -f "package.json" ]]; then
log "Mise à jour des dépendances Node.js..."
if npm update; then
log_success "Dépendances Node.js mises à jour"
else
log_warning "Échec de la mise à jour des dépendances Node.js"
fi
fi
}
# Fonction pour vérifier les fichiers ignore d'un projet
check_project_ignore_files() {
local project="$1"
local project_path="/home/debian/$project"
log "Vérification des fichiers ignore pour $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Vérifier .gitignore
if [[ ! -f ".gitignore" ]]; then
log_warning ".gitignore manquant pour $project"
else
log_success ".gitignore présent"
fi
# Vérifier .dockerignore (pour les projets avec Docker)
if [[ " ${DOCKER_PROJECTS[@]} " =~ " ${project} " ]]; then
if [[ ! -f ".dockerignore" ]]; then
log_warning ".dockerignore manquant pour $project"
else
log_success ".dockerignore présent"
fi
fi
# Vérifier .cursorignore
if [[ ! -f ".cursorignore" ]]; then
log_warning ".cursorignore manquant pour $project"
else
log_success ".cursorignore présent"
fi
}
# Fonction pour nettoyer les fichiers non suivis d'un projet
clean_project_untracked() {
local project="$1"
local project_path="/home/debian/$project"
log "Nettoyage des fichiers non suivis pour $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Lister les fichiers non suivis
local untracked_files
untracked_files=$(git ls-files --others --exclude-standard 2>/dev/null || true)
if [[ -n "$untracked_files" ]]; then
log_info "Fichiers non suivis détectés:"
echo "$untracked_files" | while read -r file; do
echo " - $file"
done
# Supprimer les fichiers non suivis
if git clean -fd; then
log_success "Fichiers non suivis supprimés"
else
log_warning "Échec du nettoyage des fichiers non suivis"
fi
else
log_success "Aucun fichier non suivi"
fi
}
# Fonction pour compiler un projet
compile_project() {
local project="$1"
local project_path="/home/debian/$project"
log "Compilation de $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Rust projects
if [[ -f "Cargo.toml" ]]; then
log "Compilation Rust..."
if cargo build --release; then
log_success "Compilation Rust réussie"
else
log_error "Échec de la compilation Rust"
return 1
fi
# WebAssembly pour sdk_client
if [[ "$project" == "sdk_client" ]]; then
log "Build WebAssembly..."
if wasm-pack build --target bundler --release; then
log_success "Build WebAssembly réussi"
else
log_error "Échec du build WebAssembly"
return 1
fi
fi
fi
# Node.js projects
if [[ -f "package.json" ]]; then
if grep -q '"build"' package.json; then
log "Build Node.js..."
if npm run build; then
log_success "Build Node.js réussi"
else
log_error "Échec du build Node.js"
return 1
fi
fi
fi
# TypeScript projects
if [[ -f "tsconfig.json" ]]; then
log "Vérification TypeScript..."
if npx tsc --noEmit; then
log_success "Vérification TypeScript réussie"
else
log_warning "Erreurs TypeScript détectées"
fi
fi
}
# Fonction pour exécuter les tests d'un projet
test_project() {
local project="$1"
local project_path="/home/debian/$project"
log "Exécution des tests pour $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Rust projects
if [[ -f "Cargo.toml" ]]; then
log "Tests Rust..."
if cargo test; then
log_success "Tests Rust réussis"
else
log_warning "Certains tests Rust ont échoué"
fi
fi
# Node.js projects
if [[ -f "package.json" ]]; then
if grep -q '"test"' package.json; then
log "Tests Node.js..."
if npm test; then
log_success "Tests Node.js réussis"
else
log_warning "Certains tests Node.js ont échoué"
fi
fi
fi
}
# Fonction pour déployer un projet
deploy_project() {
local project="$1"
local project_path="/home/debian/$project"
log "Déploiement de $project"
if [[ ! -d "$project_path" ]]; then
log_error "Projet non trouvé: $project_path"
return 1
fi
cd "$project_path"
# Synchroniser les configurations si c'est un projet Docker
if [[ " ${DOCKER_PROJECTS[@]} " =~ " ${project} " ]]; then
if [[ -f "/home/debian/lecoffre_node/scripts/sync-configs.sh" ]]; then
log "Synchronisation des configurations..."
if /home/debian/lecoffre_node/scripts/sync-configs.sh "$project"; then
log_success "Configurations synchronisées"
else
log_warning "Échec de la synchronisation des configurations"
fi
fi
fi
# Mettre à jour les dépendances
update_project_dependencies "$project"
# Vérifier les fichiers ignore
check_project_ignore_files "$project"
# Nettoyer les fichiers non suivis
clean_project_untracked "$project"
# Compiler le projet
if ! compile_project "$project"; then
log_error "Échec de la compilation de $project"
return 1
fi
# Exécuter les tests
test_project "$project"
# Push vers la branche ext
log "Push vers la branche ext..."
if git checkout ext; then
log_success "Basculement vers la branche ext"
else
log_error "Échec du basculement vers la branche ext"
return 1
fi
if git add .; then
log_success "Ajout des modifications"
else
log_error "Échec de l'ajout des modifications"
return 1
fi
if git commit -m "ci: docker_tag=ext - Mise à jour automatique des dépendances et compilation"; then
log_success "Commit des modifications"
else
log_warning "Aucune modification à committer"
fi
if git push origin ext; then
log_success "Push vers la branche ext réussi"
else
log_error "Échec du push vers la branche ext"
return 1
fi
# Construire et pousser l'image Docker si c'est un projet Docker
if [[ " ${DOCKER_PROJECTS[@]} " =~ " ${project} " ]]; then
log "Construction de l'image Docker..."
if docker build -t "git.4nkweb.com/4nk/$project:ext" .; then
log_success "Image Docker construite"
# Pousser l'image si demandé
if [[ "${PUSH_DOCKER_IMAGES:-false}" == "true" ]]; then
log "Push de l'image Docker..."
if docker push "git.4nkweb.com/4nk/$project:ext"; then
log_success "Image Docker poussée"
else
log_error "Échec du push de l'image Docker"
return 1
fi
fi
else
log_error "Échec de la construction de l'image Docker"
return 1
fi
fi
log_success "Déploiement de $project terminé"
}
# Fonction pour vérifier l'état du scan # Fonction pour vérifier l'état du scan
check_scan_status() { check_scan_status() {
local sdk_relay_url="http://127.0.0.1:8091" local sdk_relay_url="http://127.0.0.1:8091"
@ -112,7 +436,7 @@ check_scan_status() {
# Fonction principale de démarrage # Fonction principale de démarrage
start_services() { start_services() {
log "🚀 Démarrage de lecoffre_node avec séquence optimisée" log "🚀 Démarrage de lecoffre_node avec séquence optimisée"
# Validation des dépendances externes avant démarrage # Validation des dépendances externes avant démarrage
if ! validate_external_dependencies; then if ! validate_external_dependencies; then
log_error "Dépendances externes non disponibles. Arrêt du démarrage." log_error "Dépendances externes non disponibles. Arrêt du démarrage."
@ -120,6 +444,21 @@ start_services() {
exit 1 exit 1
fi fi
# Préparation de l'environnement avant démarrage
log "🔧 Préparation de l'environnement..."
# Synchroniser les configurations centralisées
if [ -f "./scripts/sync-configs.sh" ]; then
log "📋 Synchronisation des configurations..."
./scripts/sync-configs.sh
fi
# Préparation du build si nécessaire
if [ -f "./scripts/pre-build.sh" ]; then
log "🏗️ Préparation du build..."
./scripts/pre-build.sh
fi
# Démarrage simplifié utilisant les healthchecks du docker-compose.yml # Démarrage simplifié utilisant les healthchecks du docker-compose.yml
log "📦 Démarrage de tous les services avec healthchecks..." log "📦 Démarrage de tous les services avec healthchecks..."
docker compose up -d docker compose up -d
@ -180,40 +519,40 @@ start_services() {
# Fonction de redémarrage intelligent # Fonction de redémarrage intelligent
restart_services() { restart_services() {
log "Redémarrage intelligent des services..." log "Redémarrage intelligent des services..."
# Arrêter les services qui dépendent d'externes # Arrêter les services qui dépendent d'externes
log "Arrêt des services dépendants..." log "Arrêt des services dépendants..."
docker stop lecoffre-back lecoffre-front ihm_client 2>/dev/null || true docker stop lecoffre-back lecoffre-front ihm_client 2>/dev/null || true
# Attendre que les dépendances externes soient disponibles # Attendre que les dépendances externes soient disponibles
log "Attente de la disponibilité des dépendances externes..." log "Attente de la disponibilité des dépendances externes..."
local max_attempts=30 local max_attempts=30
local attempt=0 local attempt=0
while [ $attempt -lt $max_attempts ]; do while [ $attempt -lt $max_attempts ]; do
if validate_external_dependencies; then if validate_external_dependencies; then
log_success "Dépendances externes disponibles" log_success "Dépendances externes disponibles"
break break
fi fi
attempt=$((attempt + 1)) attempt=$((attempt + 1))
log "Tentative $attempt/$max_attempts - Attente 10s..." log "Tentative $attempt/$max_attempts - Attente 10s..."
sleep 10 sleep 10
done done
if [ $attempt -eq $max_attempts ]; then if [ $attempt -eq $max_attempts ]; then
log_error "Dépendances externes non disponibles après $max_attempts tentatives" log_error "Dépendances externes non disponibles après $max_attempts tentatives"
return 1 return 1
fi fi
# Redémarrer les services # Redémarrer les services
log "Redémarrage des services..." log "Redémarrage des services..."
docker start lecoffre-back lecoffre-front ihm_client docker start lecoffre-back lecoffre-front ihm_client
# Attendre que les services soient prêts # Attendre que les services soient prêts
log "Attente de la disponibilité des services..." log "Attente de la disponibilité des services..."
sleep 15 sleep 15
log_success "Redémarrage terminé !" log_success "Redémarrage terminé !"
} }
@ -236,12 +575,141 @@ case "${1:-start}" in
check_scan_status check_scan_status
done done
;; ;;
"deploy")
log "🚀 Déploiement de tous les projets..."
# Synchroniser les configurations centralisées
sync_configurations
success_count=0
total_count=0
# Déployer les projets sans Docker
log "📚 Déploiement des projets library..."
for project in "${LIBRARY_PROJECTS[@]}"; do
total_count=$((total_count + 1))
if deploy_project "$project"; then
success_count=$((success_count + 1))
fi
done
# Déployer les projets avec Docker
log "🐳 Déploiement des projets Docker..."
for project in "${DOCKER_PROJECTS[@]}"; do
total_count=$((total_count + 1))
if deploy_project "$project"; then
success_count=$((success_count + 1))
fi
done
# Déployer lecoffre_node
log "🏗️ Déploiement du projet principal..."
total_count=$((total_count + 1))
cd "/home/debian/lecoffre_node"
if git checkout ext && git add . && git commit -m "ci: docker_tag=ext - Mise à jour des configurations centralisées" && git push origin ext; then
success_count=$((success_count + 1))
log_success "Déploiement de lecoffre_node terminé"
else
log_error "Échec du déploiement de lecoffre_node"
fi
# Résumé
log "📊 Résumé du déploiement:"
log " Projets déployés avec succès: $success_count/$total_count"
if [[ $success_count -eq $total_count ]]; then
log_success "🎉 Tous les projets ont été déployés avec succès!"
else
log_error "❌ Certains projets ont échoué"
exit 1
fi
;;
"deploy-project")
if [[ -z "${2:-}" ]]; then
log_error "Usage: $0 deploy-project <project_name>"
echo "Projets disponibles:"
echo " Docker: ${DOCKER_PROJECTS[*]}"
echo " Library: ${LIBRARY_PROJECTS[*]}"
exit 1
fi
local project="$2"
log "🚀 Déploiement du projet: $project"
if deploy_project "$project"; then
log_success "Déploiement de $project terminé avec succès!"
else
log_error "Échec du déploiement de $project"
exit 1
fi
;;
"update-deps")
log "📦 Mise à jour des dépendances de tous les projets..."
for project in "${DOCKER_PROJECTS[@]}" "${LIBRARY_PROJECTS[@]}"; do
update_project_dependencies "$project"
done
log_success "Mise à jour des dépendances terminée"
;;
"check-ignore")
log "🔍 Vérification des fichiers ignore de tous les projets..."
for project in "${DOCKER_PROJECTS[@]}" "${LIBRARY_PROJECTS[@]}"; do
check_project_ignore_files "$project"
done
log_success "Vérification des fichiers ignore terminée"
;;
"clean-untracked")
log "🧹 Nettoyage des fichiers non suivis de tous les projets..."
for project in "${DOCKER_PROJECTS[@]}" "${LIBRARY_PROJECTS[@]}"; do
clean_project_untracked "$project"
done
log_success "Nettoyage des fichiers non suivis terminé"
;;
"compile-all")
log "🔨 Compilation de tous les projets..."
for project in "${DOCKER_PROJECTS[@]}" "${LIBRARY_PROJECTS[@]}"; do
compile_project "$project"
done
log_success "Compilation de tous les projets terminée"
;;
"test-all")
log "🧪 Exécution des tests de tous les projets..."
for project in "${DOCKER_PROJECTS[@]}" "${LIBRARY_PROJECTS[@]}"; do
test_project "$project"
done
log_success "Tests de tous les projets terminés"
;;
*) *)
echo "Usage: $0 [start|restart|validate|monitor]" echo "Usage: $0 [COMMAND]"
echo " start - Démarrage complet avec validation (défaut)" echo ""
echo " restart - Redémarrage intelligent après réparation" echo "COMMANDS:"
echo " validate - Validation des dépendances externes uniquement" echo " start - Démarrage complet avec validation (défaut)"
echo " monitor - Monitoring continu" echo " restart - Redémarrage intelligent après réparation"
echo " validate - Validation des dépendances externes uniquement"
echo " monitor - Monitoring continu"
echo ""
echo " deploy - Déploiement complet de tous les projets"
echo " deploy-project - Déploiement d'un projet spécifique"
echo " update-deps - Mise à jour des dépendances de tous les projets"
echo " check-ignore - Vérification des fichiers ignore"
echo " clean-untracked - Nettoyage des fichiers non suivis"
echo " compile-all - Compilation de tous les projets"
echo " test-all - Exécution des tests de tous les projets"
echo ""
echo "EXAMPLES:"
echo " $0 deploy # Déploie tous les projets"
echo " $0 deploy-project ihm_client # Déploie seulement ihm_client"
echo " $0 update-deps # Met à jour toutes les dépendances"
echo " PUSH_DOCKER_IMAGES=true $0 deploy # Déploie avec push des images Docker"
exit 1 exit 1
;; ;;
esac esac

196
scripts/sync-configs.sh Executable file
View File

@ -0,0 +1,196 @@
#!/bin/bash
# Script de synchronisation des configurations centralisées
# Usage: ./scripts/sync-configs.sh [project_name]
# Si aucun projet n'est spécifié, synchronise tous les projets
set -euo pipefail
# Couleurs pour les logs
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonction de logging
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1"
}
# Répertoire racine du projet
PROJECT_ROOT="/home/debian/lecoffre_node"
CONF_DIR="$PROJECT_ROOT/conf"
# Vérifier que nous sommes dans le bon répertoire
if [[ ! -d "$CONF_DIR" ]]; then
log_error "Répertoire de configuration non trouvé: $CONF_DIR"
exit 1
fi
# Fonction pour synchroniser un projet
sync_project() {
local project_name="$1"
local project_path="/home/debian/$project_name"
log "Synchronisation de $project_name..."
# Vérifier que le projet existe
if [[ ! -d "$project_path" ]]; then
log_warning "Projet $project_name non trouvé: $project_path"
return 1
fi
case "$project_name" in
"lecoffre_node")
# Bitcoin configuration
if [[ -f "$CONF_DIR/bitcoin/bitcoin.conf" ]]; then
cp "$CONF_DIR/bitcoin/bitcoin.conf" "$project_path/bitcoin/"
log_success "Bitcoin config copiée"
fi
# Relay configuration
if [[ -f "$CONF_DIR/relay/sdk_relay.conf" ]]; then
cp "$CONF_DIR/relay/sdk_relay.conf" "$project_path/relay/"
log_success "Relay config copiée"
fi
;;
"ihm_client")
# Nginx configuration
if [[ -f "$CONF_DIR/ihm_client/nginx.dev.conf" ]]; then
cp "$CONF_DIR/ihm_client/nginx.dev.conf" "$project_path/"
log_success "Nginx config copiée vers ihm_client"
fi
;;
"lecoffre-front")
# Frontend configuration (si nécessaire)
if [[ -d "$CONF_DIR/lecoffre-front" ]]; then
cp -r "$CONF_DIR/lecoffre-front/"* "$project_path/" 2>/dev/null || true
log_success "Frontend configs copiées"
fi
;;
"lecoffre-back-mini")
# Backend configuration (si nécessaire)
if [[ -d "$CONF_DIR/lecoffre-back" ]]; then
cp -r "$CONF_DIR/lecoffre-back/"* "$project_path/" 2>/dev/null || true
log_success "Backend configs copiées"
fi
;;
*)
log_warning "Projet $project_name non configuré pour la synchronisation"
return 1
;;
esac
log_success "Synchronisation de $project_name terminée"
}
# Fonction pour synchroniser tous les projets
sync_all() {
log "Synchronisation de tous les projets..."
local projects=("lecoffre_node" "ihm_client" "lecoffre-front" "lecoffre-back-mini")
local success_count=0
local total_count=${#projects[@]}
for project in "${projects[@]}"; do
if sync_project "$project"; then
((success_count++))
fi
done
log "Synchronisation terminée: $success_count/$total_count projets synchronisés"
if [[ $success_count -eq $total_count ]]; then
log_success "Tous les projets ont été synchronisés avec succès"
return 0
else
log_warning "Certains projets n'ont pas pu être synchronisés"
return 1
fi
}
# Fonction pour afficher l'aide
show_help() {
echo "Usage: $0 [OPTIONS] [PROJECT_NAME]"
echo ""
echo "Synchronise les configurations centralisées vers les projets"
echo ""
echo "OPTIONS:"
echo " -h, --help Affiche cette aide"
echo " -l, --list Liste les projets disponibles"
echo " -v, --verbose Mode verbeux"
echo ""
echo "PROJECT_NAME:"
echo " Nom du projet à synchroniser (optionnel)"
echo " Si non spécifié, synchronise tous les projets"
echo ""
echo "Exemples:"
echo " $0 # Synchronise tous les projets"
echo " $0 ihm_client # Synchronise seulement ihm_client"
echo " $0 lecoffre_node # Synchronise seulement lecoffre_node"
}
# Fonction pour lister les projets
list_projects() {
echo "Projets disponibles pour la synchronisation:"
echo " - lecoffre_node (bitcoin.conf, sdk_relay.conf)"
echo " - ihm_client (nginx.dev.conf)"
echo " - lecoffre-front (configurations frontend)"
echo " - lecoffre-back-mini (configurations backend)"
}
# Parse des arguments
VERBOSE=false
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-l|--list)
list_projects
exit 0
;;
-v|--verbose)
VERBOSE=true
shift
;;
-*)
log_error "Option inconnue: $1"
show_help
exit 1
;;
*)
PROJECT_NAME="$1"
shift
;;
esac
done
# Changer vers le répertoire du projet
cd "$PROJECT_ROOT"
# Exécuter la synchronisation
if [[ -n "${PROJECT_NAME:-}" ]]; then
log "Synchronisation du projet: $PROJECT_NAME"
sync_project "$PROJECT_NAME"
else
sync_all
fi