align docker images
This commit is contained in:
parent
1fce2df474
commit
4ec2546645
69
.cursorrules
69
.cursorrules
@ -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.
|
||||
- Vérifier et tenir à jour les .cursorrules.
|
||||
- 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
113
IA_agents/deploy.md
Normal 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` n’existe.
|
||||
- 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 l’utilisation 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 d’environnement**.
|
||||
|
||||
### 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 d’amé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 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 `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 l’image 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 l’image sur le **tag Docker `ext`** via la CI.
|
||||
|
||||
---
|
123
IA_agents/flux.md
Normal file
123
IA_agents/flux.md
Normal 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
96
conf/README.md
Normal 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
45
conf/bitcoin/bitcoin.conf
Normal 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
|
48
conf/ihm_client/nginx.dev.conf
Normal file
48
conf/ihm_client/nginx.dev.conf
Normal 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
11
conf/relay/sdk_relay.conf
Normal 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
|
@ -15,7 +15,7 @@ services:
|
||||
- tor
|
||||
volumes:
|
||||
- bitcoin_data:/home/bitcoin/.bitcoin
|
||||
- ./bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro
|
||||
- ./conf/bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro
|
||||
networks:
|
||||
btcnet:
|
||||
aliases:
|
||||
@ -65,7 +65,7 @@ services:
|
||||
blindbit:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ./relay/sdk_relay.conf:/home/bitcoin/.conf:ro
|
||||
- ./conf/relay/sdk_relay.conf:/home/bitcoin/.conf:ro
|
||||
- sdk_data:/home/bitcoin/.4nk
|
||||
- bitcoin_data:/home/bitcoin/.bitcoin
|
||||
- ./scripts/funds:/scripts/funds:ro
|
||||
@ -213,7 +213,13 @@ services:
|
||||
image: git.4nkweb.com/4nk/sdk_storage:ext
|
||||
container_name: sdk_storage
|
||||
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:
|
||||
btcnet:
|
||||
aliases:
|
||||
|
@ -9,4 +9,3 @@ data_dir="/home/bitcoin/.4nk"
|
||||
bitcoin_data_dir="/home/bitcoin/.bitcoin"
|
||||
bootstrap_url="wss://dev3.4nkweb.com/ws/"
|
||||
bootstrap_faucet=true
|
||||
sp_address="tsp1qqgmwp9n5p9ujhq2j6cfqe4jpkyu70jh9rgj0pwt3ndezk2mrlvw6jqew8fhsulewzglfr7g2aa48wyj4n0r7yasa3fm666vda8984ke8tuaf9m89"
|
||||
|
104
scripts/build-project.sh
Executable file
104
scripts/build-project.sh
Executable 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
100
scripts/pre-build.sh
Executable 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"
|
@ -19,6 +19,12 @@ EXTERNAL_SIGNER_PORT="9090"
|
||||
PUBLIC_FRONT_URL="https://dev4.4nkweb.com/lecoffre"
|
||||
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
|
||||
log() {
|
||||
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||
@ -89,6 +95,324 @@ wait_for_service() {
|
||||
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
|
||||
check_scan_status() {
|
||||
local sdk_relay_url="http://127.0.0.1:8091"
|
||||
@ -120,6 +444,21 @@ start_services() {
|
||||
exit 1
|
||||
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
|
||||
log "📦 Démarrage de tous les services avec healthchecks..."
|
||||
docker compose up -d
|
||||
@ -236,12 +575,141 @@ case "${1:-start}" in
|
||||
check_scan_status
|
||||
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 ""
|
||||
echo "COMMANDS:"
|
||||
echo " start - Démarrage complet avec validation (défaut)"
|
||||
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
|
||||
;;
|
||||
esac
|
||||
|
196
scripts/sync-configs.sh
Executable file
196
scripts/sync-configs.sh
Executable 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
|
Loading…
x
Reference in New Issue
Block a user