ci: docker_tag=ext

Initial commit - 4NK Environment
- Configuration complète LeCoffre
- Architecture autonome avec Nginx intégré
- Scripts de déploiement
- Documentation IA_agents
- Support redirections IdNot (port 3000)
- Monitoring Grafana/Loki/Promtail
This commit is contained in:
LeCoffre Deployment 2025-09-21 19:40:18 +00:00
commit 17c572b4ec
29 changed files with 1700 additions and 0 deletions

123
.dockerignore Normal file
View File

@ -0,0 +1,123 @@
# 4NK Environment - Docker Ignore
# ===============================
# Git
.git/
.gitignore
.gitattributes
# Documentation
README.md
docs/
*.md
!Dockerfile*
# Scripts de développement
scripts/
*.sh
!scripts/clone-all-repos.sh
# Configuration locale
.env
.env.*
!env.master
!env.example
# Données et logs
data/
logs/
*.log
*.data
*.db
*.sqlite
# Cache et build
node_modules/
dist/
build/
target/
*.o
*.so
*.dylib
# IDE et éditeurs
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
*.tmp
# Backup
*.backup/
backup/
# Certificats (sauf ceux nécessaires)
*.key
*.pem
ssl/
certs/
# Docker
.docker/
docker-data/
docker-volumes/
docker-compose.override.yml
# Monitoring
prometheus-data/
grafana-data/
loki-data/
# Bitcoin et crypto
.bitcoin/
.4nk/
wallet/
keys/
# Nginx cache et logs
nginx-cache/
nginx-logs/
# Supervisor logs
supervisor-logs/
# Tests
tests/
test/
spec/
*.test.js
*.spec.js
# Coverage
coverage/
.nyc_output/
# Temporary files
tmp/
temp/
*.tmp
*.temp
# Large files
*.tar
*.tar.gz
*.zip
*.rar
# Development tools
.eslintrc*
.prettierrc*
jest.config.*
tsconfig.json
package-lock.json
yarn.lock
Cargo.lock
# Project specific ignores
office.json
*.backup

98
.gitignore vendored Normal file
View File

@ -0,0 +1,98 @@
# 4NK Environment - Git Ignore
# ============================
# Dossiers de sauvegarde des scripts
*.backup/
backup/
# Fichiers temporaires
*.tmp
*.temp
*.log
*.pid
# Fichiers de configuration locale
.env
.env.*
!env.master
!env.example
# Données et logs
data/
logs/
*.data
*.db
*.sqlite
# Certificats et clés
*.key
*.pem
*.crt
*.p12
*.pfx
ssl/
certs/
# Docker
.docker/
docker-data/
docker-volumes/
# Cache et build
node_modules/
dist/
build/
target/
*.o
*.so
*.dylib
# IDE et éditeurs
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
*.tmp
# Git
.git/
*.orig
# Backup des projets existants
*.backup/
# Fichiers de configuration spécifiques au host
host-config/
local-config/
# Données sensibles
secrets/
private/
confidential/
# Monitoring et métriques
prometheus-data/
grafana-data/
loki-data/
# Bitcoin et crypto
.bitcoin/
.4nk/
wallet/
keys/
# Nginx
nginx-cache/
nginx-logs/
# Supervisor
supervisor-logs/
# Scripts de déploiement temporaires
deploy-*.tmp
setup-*.tmp

67
IA_agents/context.md Normal file
View File

@ -0,0 +1,67 @@
# 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 @http://local.4nkweb.com:3000/ qui sera redirigé vers @https://dev4.4nkweb.com/lecoffre avec l'ouverture de l'iframe @https://dev4.4nkweb.com/ (`ihm_client`).
Fonctionnellement, le test est sur navigateur de :
* tenter un login () notaire dont la redirection IdNot (redirections et API notaires) et valider dans l'iframe et d'arriver connecté apres la vérification du compte Stripe (lecoffre-back-mini).
* créer un compte dossier en tant que notaire en ajoutant un client ce qui enverra un lien par mail par mailshimp puis en tant que client me connecté avec le lien recçu par mail, confirmer le code sms (api ovh) et accéder à mon dossier.
Tehcniquement, le test est sur navigateur de :
* Vérifier la page de statut des services : @https://dev4.4nkweb.com/status/
* Vérifier les dashboard grafana @https://dev4.4nkweb.com/grafana/
---
## Dépendances
A déployer par **`lecoffre_node/`** :
- image: btcpayserver/tor:0.4.8.10 (pour synchro Bitcoin)
- image: git.4nkweb.com/4nk/bitcoin:latest (pour mainchain et signet custom)
- image: git.4nkweb.com/4nk/blindbit-oracle:dev (pour scan des blocs et détection des secrets dans les transaction silent payment)
- image: containrrr/watchtower (pour la surveillance et mise à jour automatique des images)
- image: grafana/grafana:latest (pour le monitoring des évènements)
- image: grafana/loki:latest
- grafana/promtail:latest
---
## Projets locaux avec Dockerfile
A déployer par **`lecoffre_node/`** (d'autres projets externes sont ne dépendance dans le `lecoffre_node/docker-compose.yml`):
### Services optimisés (2024-12-19)
- **`sdk_relay/`** (relai des transations et messages et oracle) - Debian + Rust
- **`sdk_signer/`** (signature des processus métier et des identités/profils) - Debian + Node.js 20
- **`sdk_storage/`** (stockage temporaire) - Debian + Rust
- **`ihm_client/`** (iframe dans les frontend des projets pour interactions avec les clés privés Bitcoin Silent Payment) - Debian + Node.js 20
- **`lecoffre-back-mini/`** (backend pour les API tierces du projet lecoffre) - Debian + Node.js 19
- **`lecoffre-front/`** (frontend du projet lecoffre) - Debian + Node.js 19
### Architecture Docker
- **Base standardisée** : `debian:bookworm-slim` pour tous les services
- **Packages minimaux** : ca-certificates, curl, jq, git
- **Utilisateurs non-root** : appuser (UID 1000)
- **Images optimisées** : 120-300MB selon le service
- **Tag Docker** : `ext` pour tous les déploiements
---
## Projets locaux sans Dockerfile
A vérifier **`lecoffre_node/`**:
- **`sdk_common/`** (coeur de la gestion des clés)
- **`sdk_client/`** (coeur de l'intégration du système de process)
- **`sdk-signer-client/`** (coeur de l'intégration du système de process pour l'intégration)
- **`lecoffre_node/miner/`** (miner de la blockchain de preuves -layer2 de bitcoin depuis un signet-) - **Maintenant avec Dockerfile optimisé**
- **`status-api`** (interface d'affichage des statuts des interfaces et des services)
### Note importante
Le **miner** a maintenant un Dockerfile optimisé avec Debian + Python 3.11 et fait partie des services avec Dockerfile.
---
Met à jour ce document si tu détectes des incohérences ou pose des questions pour confirmer.
Propose des améliorations dans un document lecoffre_node/IA_agents/todo.md.

207
IA_agents/deploy.md Normal file
View File

@ -0,0 +1,207 @@
# agent_deploy.md
Respecte totalement et impérativemment les informations de ce document.
---
## Contexte
Consulte attentivement `lecoffre_node/IA_agents/context.md`.
Consulte attentivement `lecoffre_node/IA_agents/flux.md`.
Reste toujours sur la branche git "ext"
Fait toujours les build via CI avec des images docker pour le docker registry tagées "ext"
Déclanche toujours avec un tag "ext" remplace le précédent.
---
## Objectifs
Le déploiement se fait depuis le répertoire **`lecoffre_node/`**, en utilisant les scripts présents dans **`scripts/`**.
Ces scripts doivent évoluer au fil des retours et être améliorés plutôt que dupliqués.
Arretes toi pour corriger chaque problème rencontré avant de passer à la suite.
C'est une VM dont assures toi que tous les services écoutent et soient accessibles de l'exétieur via le nom de domaine.
Dans **tous les projets** à vérifier un par un dont lecoffre_node:
- Analyse le dossier pour bien le comprendre
- Analyse le code pour bien le comprendre
- Une branche Git dédiée `ext` existe.
- Aucun tag Git nommé `ext` nexiste.
- Les services doivent écouter sur 0.0.0.0 (et non sur 127.0.0.1).
- Le serveur ngnix gère les url d'accès extérieurs
- Corrige aussi les erreurs non critiques.
Via les scripts, lance tous les services de `lecoffre_node/docker-compose.yml`.
## Procédure générale
### Vérifications initiales par projet
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 (idéalement ~/.ssh/id_ed25519)
3. Vérifier que la branche courante est bien **`ext`**.
4. Mettre à jour les dépendances et les langages
5. Vérifier les **variables denvironnement**.
### Mise à jour et construction par projet
6. Supprime les caches, Optimise le build du projet et build le projet.
7. Mettre à jour la **documentation**.
8. Mettre à jour les **tests**.
9. Mettre à jour les **scripts**.
10. Vérifier que la présence et le contenu exhaustif et spécifique de :
- `.gitignore`
- `.dockerignore`
- `.cursorignore`
### Synchronisations par projet
11. Synchroniser les configurations dans `lecoffre_node/conf`.
Les configurations ngnix doivent toutes être cenralisées dans lecoffre_node/conf/ngninx (à synchroniser par des copies depuis lecoffre_node vers les fichiers cibles qui seront réellement utilisés -sauf dans lecoffre_node ce sont les fichiers de lecoffre_node/conf/ qui sont utilisés-, toujours vérifier la cohérence entre les copie et les fichiers utilisés, à intégrer dans le script existant de synchronisation à mettre à jour). Ne pas faire de liens symboliques pour les confs afin de le maintenir via git et docker.
12. Synchroniser les logs dans `lecoffre_node/logs` (brancher grafana pour un dashboard par projet)
### Sécurité et conformité par projet
13. Vérifier que le code ne fournit pas :
- de **données personnelles**,
- de **données sensibles exploitables**,
- de **failles de sécurité**.
### Gestion Git par projet
14. Pousser toutes les modifications sur la branche Git `ext`.
15. Supprimer les fichiers distants non suivis par Git.
### Analyse et correction par projet
16. Analyser les logs.
17. Corriger toutes les erreurs, petites et grosses, **sans désactivation**, **sans simplification**, **sans contournement**.
18. Tester.
19. Analyser de nouveau les logs.
20. Vérifier que les logs ne contiennent pas de données personnelles ou sensibles.
21. Corriger à nouveau si nécessaire (jusqu'à l'absence totale d'erreurs)
### Boucle damélioration par projet
22. Ne pas créer de nouvelles versions de scripts : **améliorer et tester ceux existants**.
23. Mettre à jour la documentation avec le **retour dexpérience** à chaque fois par une mise à jour de `docs/REX.md`.
24. Recommencer si nécessaire pour obtenir un déploiement fluide et parfait.
25. Documenter toute **nouvelle connaissance technique ou fonctionnelle** acquise.
26. Répéter la synchronisation des confs et logs.
27. Pousser toutes les modifications sur la branche `ext`.
28. Supprimer à nouveau les fichiers distants non suivis.
29. Répéter anal
### Lancement des services
30. Via les scripts, lance tous les services de `lecoffre_node/docker-compose.yml`.
31. Corriger toutes les erreurs, petites et grosses, **sans désactivation**, **sans simplification**, **sans contournement**.
32. Tester.
33. Analyser de nouveau les logs.
34. Vérifier que les logs ne contiennent pas de données personnelles ou sensibles.
35. Corriger à nouveau si nécessaire (jusqu'à l'absence totale d'erreurs)
36. Mettre à jour la documentation avec le **retour dexpérience** à chaque fois par une mise à jour de `docs/REX.md`.
37. Recommencer si nécessaire pour obtenir un déploiement fluide et parfait.
38. Assures toi d'être à jour pour le service grafana
39. Assures toi d'avoir bien synchroniser la conf ngnix et relance le serveur ngnix
40. Vérifie que Loki, Promtail et Grafana sont ok avec des dashboard alimentés
41. Vérifie qu'il n'y a aucun conflit de ports
---
## Spécificités Dockerfile par projet
### Architecture Docker optimisée (2024-12-19)
**Base standardisée** : Tous les Dockerfiles utilisent `debian:bookworm-slim` pour la cohérence et la légèreté.
### Règles Dockerfile obligatoires
Pour tous les projets contenant un **Dockerfile**, avant de pousser sur la branche `ext` :
#### 1. Base et packages minimaux
```dockerfile
FROM debian:bookworm-slim
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y --fix-missing \
ca-certificates curl jq git && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
```
**Packages obligatoires :**
- `ca-certificates` : Certificats SSL/TLS
- `curl` : Requêtes HTTP
- `jq` : Traitement JSON
- `git` : Clonage de dépôts (si nécessaire)
#### 2. Installation Node.js (pour les services Node.js)
```dockerfile
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
```
#### 3. Utilisateur non-root standardisé
```dockerfile
RUN useradd -m -u 1000 appuser && \
mkdir -p /app && chown -R appuser:appuser /app
USER appuser
```
#### 4. Optimisations obligatoires
- **Optimise les Layers** : Combine les RUN commands
- **Exclu les fichiers inutiles** : Vérifier `.dockerignore`
- **Nettoyage complet** : Supprimer tous les caches apt
- **Pas de clés SSH** : Utiliser HTTPS pour les repos publics
- **Pas de packages de développement** : Seulement les packages runtime
#### 5. Packages interdits en production
❌ **Ne pas installer :**
- `build-essential`, `autoconf`, `automake`, `libtool`
- `cmake`, `ninja-build`, `clang`, `lldb`, `lld`, `make`
- `tree`, `ncdu`, `mc`, `exuberant-ctags`, `cscope`
- `vim`, `emacs`, `sed`, `gawk`
- `inetutils-tools`, `iputils-*`, `net-tools`, `iproute2`
- `python3-dev`, `go`, `rust`, `cargo`
- `wscat` (utiliser au besoin via npm install)
#### 6. Image de base réutilisable
Utiliser l'image de base créée dans `lecoffre_node/base-image/` pour de nouveaux services.
### Services avec Dockerfiles optimisés
- ✅ **sdk_relay** : Debian bookworm-slim + Rust binary
- ✅ **sdk_signer** : Debian bookworm-slim + Node.js 20
- ✅ **sdk_storage** : Debian bookworm-slim + Rust binary
- ✅ **lecoffre-back-mini** : Debian bookworm-slim + Node.js 19
- ✅ **lecoffre-front** : Debian bookworm-slim + Node.js 19
- ✅ **ihm_client** : Debian bookworm-slim + Node.js 20
- ✅ **miner** : Debian bookworm-slim + Python 3.11
### Processus de déploiement
Après le push sur la branche Git `ext` :
1. Créer/supprimer le tag Docker `ext`
2. Pousser l'image sur le **tag Docker `ext`** via la CI
3. Vérifier le succès du build CI
### Tailles d'images cibles
- **Services légers** : 120-200MB
- **Services avec Node.js** : 180-250MB
- **Services avec Python** : 200-300MB
---
## Autres
N'attend pas infiniment le résultat des curls.
Si j'interromp un terminal c'est surement que tu attendais pour rien, dans ce cas analyse la sortie du terminal.
Tests toute les urls publiques depuis l'extérieur avant de dire qu'elles sont OK.
Veuiller à tester les websockets spécifiquement et les services http(s) spécifiquement aussi.
Vérifie que tous les imports sont présents.
Déclanche les builds via CI.
Vérifie les droits et le résultats de l'écriture sur les fichiers de conf ngninx et sur les fichiers de conf de Bitcoin.
---
Met à jour ce document si tu détectes des incohérences ou pose des questions pour confirmer.
Propose des améliorations dans un document lecoffre_node/IA_agents/todo.md

338
IA_agents/flux.md Normal file
View File

@ -0,0 +1,338 @@
# 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 |
| **grafana** | grafana | 127.0.0.1:3005 | 3000 | HTTP | http://127.0.0.1:3005 |
| **loki** | loki | 127.0.0.1:3100 | 3100 | HTTP | http://127.0.0.1:3100 |
| **promtail** | promtail | - | - | - | Collecte des logs |
### 🌐 **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 | ✅ Actif |
| **Signer Base** | dev3.4nkweb.com | 443 | HTTPS | https://dev3.4nkweb.com | ✅ Actif |
| **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 |
| **/grafana/** | grafana | 3005 | HTTP | Interface de monitoring |
| **/loki/** | loki | 3100 | HTTP | API de logs |
### 🏠 **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 |
| **GRAFANA_ADMIN_PASSWORD** | admin123 | grafana |
| **GF_SERVER_ROOT_URL** | https://dev4.4nkweb.com/grafana/ | grafana |
---
## 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)
5. **Monitoring** : `https://dev4.4nkweb.com/grafana/` → grafana (127.0.0.1:3005)
6. **Logs API** : `https://dev4.4nkweb.com/loki/` → loki (127.0.0.1:3100)
### 🔗 **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)
---
## 📊 **Architecture du Monitoring**
### 🔄 **Stack de Monitoring**
```
Services → Logs Centralisés → Promtail → Loki → Grafana
↓ ↓ ↓ ↓ ↓
Docker logs/ Collecte Stockage Dashboard
```
### 📁 **Centralisation des Logs**
| Service | Dossier de Logs | Volume Docker | Description |
|---------|-----------------|---------------|-------------|
| **bitcoin** | `logs/bitcoin/` | `./logs/bitcoin:/var/log/bitcoin` | Logs Bitcoin Signet |
| **blindbit** | `logs/blindbit/` | `./logs/blindbit:/var/log/blindbit` | Logs Oracle |
| **sdk_relay** | `logs/sdk_relay/` | `./logs/sdk_relay:/var/log/sdk_relay` | Logs Relay |
| **sdk_signer** | `logs/sdk_signer/` | `./logs/sdk_signer:/var/log/sdk_signer` | Logs Signer |
| **sdk_storage** | `logs/sdk_storage/` | `./logs/sdk_storage:/var/log/sdk_storage` | Logs Storage |
| **lecoffre-back** | `logs/lecoffre-back/` | `./logs/lecoffre-back:/var/log/lecoffre-back` | Logs Backend |
| **lecoffre-front** | `logs/lecoffre-front/` | `./logs/lecoffre-front:/var/log/lecoffre-front` | Logs Frontend |
| **ihm_client** | `logs/ihm_client/` | `./logs/ihm_client:/var/log/ihm_client` | Logs IHM |
| **miner** | `logs/miner/` | `./logs/miner:/var/log/miner` | Logs Mineur |
| **tor** | `logs/tor/` | `./logs/tor:/var/log/tor` | Logs Tor |
### 📊 **Dashboards Grafana**
| Dashboard | ID | Description | Métriques |
|-----------|----|--------------|-----------|
| **Vue d'ensemble LeCoffre** | `lecoffre-overview` | Monitoring global | Erreurs par service, volume de logs, logs d'erreur temps réel |
| **Bitcoin & Miner** | `bitcoin-miner` | Monitoring blockchain | Nouveaux blocs, blocs minés, erreurs blockchain |
| **Services Applications** | `services-overview` | Monitoring applicatif | Volume de logs par service, erreurs applications |
### 🔧 **Scripts de Gestion**
| Script | Description | Usage |
|--------|-------------|-------|
| `deploy-grafana.sh` | Déploiement du monitoring | `./scripts/deploy-grafana.sh start` |
| `setup-logs.sh` | Configuration des logs | `./scripts/setup-logs.sh` |
| `collect-logs.sh` | Collecte des logs | `./scripts/collect-logs.sh` |
| `test-monitoring.sh` | Test de connectivité | `./scripts/test-monitoring.sh` |
| `sync-monitoring-config.sh` | Synchronisation config | `./scripts/sync-monitoring-config.sh` |
---
## ⚠️ **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
5. **Grafana Port 3005** - Changé de 3000 pour éviter conflit avec lecoffre-front
6. **Monitoring** - Loki et Promtail doivent être démarrés avant Grafana
## 📋 **Ordre de Démarrage des Services**
Selon les règles du projet, l'ordre de démarrage est :
### 🚀 **Services Principaux**
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
8. **lecoffre-back** - Backend API
9. **lecoffre-front** - Frontend application
### 📊 **Services de Monitoring**
10. **loki** - Base de données de logs
11. **promtail** - Agent de collecte des logs
12. **grafana** - Interface de visualisation
### 🔧 **Services Utilitaires**
- **watchtower** - Surveillance automatique des conteneurs
- **signet_miner** - Mineur Bitcoin (profil séparé)
---
## 🔧 **Configuration Critique**
### 🌐 **Services Externes**
- **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/`
### 📊 **Monitoring et Tests**
- **Test monitoring complet** : `./scripts/test-monitoring.sh`
- **Déploiement Grafana** : `./scripts/deploy-grafana.sh start`
- **Collecte des logs** : `./scripts/collect-logs.sh`
- **Grafana local** : `http://localhost:3005` (admin/admin123)
- **Loki API** : `http://localhost:3100/loki/api/v1/labels`
- **Test connectivité Grafana** : `curl http://localhost:3005/api/health`
- **Test connectivité Loki** : `curl http://localhost:3100/ready`
---
## 💾 **Volumes et Persistance des Données**
### 📦 **Volumes Docker**
| Volume | Services | Données | Persistance |
|--------|----------|---------|-------------|
| **4nk_node_bitcoin_data** | bitcoin, blindbit | Blockchain, wallet, conf | ✅ Critique |
| **blindbit_data** | blindbit | Oracle data, tweaks | ✅ Critique |
| **sdk_data** | sdk_relay | Relay data, logs | ✅ Important |
| **grafana_data** | grafana | Dashboards, config | ✅ Important |
| **loki_data** | loki | Logs stockés | ✅ Important |
### 📁 **Volumes de Logs**
| Service | Volume Local | Volume Conteneur | Description |
|---------|--------------|------------------|-------------|
| **Tous services** | `./logs/{service}/` | `/var/log/{service}` | Logs centralisés |
| **Bitcoin** | `./logs/bitcoin/` | `/var/log/bitcoin` | Logs blockchain |
| **Applications** | `./logs/{app}/` | `/var/log/{app}` | Logs applicatifs |
### 🔄 **Rotation et Nettoyage**
- **Rotation automatique** : Configuration dans `conf/logrotate/`
- **Rétention** : 7 jours par défaut
- **Compression** : Automatique après rotation
- **Nettoyage** : Scripts de maintenance disponibles
---
## 🚀 **Déploiement et Maintenance**
### 📋 **Commandes Essentielles**
```bash
# Démarrage complet
docker compose up -d
# Démarrage monitoring
./scripts/deploy-grafana.sh start
# Test de connectivité
./scripts/test-monitoring.sh
# Collecte des logs
./scripts/collect-logs.sh
# Synchronisation config
./scripts/sync-monitoring-config.sh
```
### 🔧 **Maintenance**
- **Surveillance** : Watchtower automatique toutes les 30s
- **Logs** : Centralisés et rotatifs
- **Monitoring** : Grafana + Loki + Promtail
- **Backup** : Volumes Docker persistants
---
## 🌐 **Configuration Nginx - Règles et Routes**
### 📋 **Tableau Récapitulatif des Routes**
| Domaine | Port | Route | Destination | Protocole | Statut |
|---------|------|-------|-------------|-----------|--------|
| **dev4.4nkweb.com** | 80 | `/` | Redirection HTTPS | HTTP | ✅ Actif |
| **dev4.4nkweb.com** | 80 | `/.well-known/acme-challenge/` | Let's Encrypt | HTTP | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/grafana/` | Grafana (3005) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/loki/` | Loki (3100) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/status/` | Page statut | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/status/api` | API statut (3006) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/api/` | Backend (8080) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/ws/` | SDK Relay (8090) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/signer/` | SDK Signer (3001) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/blindbit/` | BlindBit (8000) | HTTPS | ✅ Actif |
| **dev4.4nkweb.com** | 443 | `/` | IHM Client (3003) | HTTPS | ✅ Actif |
| **local.4nkweb.com** | 80 | `/` | Redirection port 3000 | HTTP | ✅ Actif |
| **local.4nkweb.com** | 3000 | `/lecoffre/` | Frontend (3004) | HTTP | ✅ Actif |
| **local.4nkweb.com** | 3000 | `/authorized-client` | Frontend (3004) | HTTP | ✅ Actif |
### 🔧 **Configuration des Certificats SSL**
| Domaine | Certificat | Expiration | Statut |
|---------|------------|------------|--------|
| **dev4.4nkweb.com** | `/etc/letsencrypt/live/dev4.4nkweb.com/` | 15 Déc 2025 | ✅ Valide |
### 📁 **Fichiers de Configuration**
| Fichier | Description | Statut |
|---------|-------------|--------|
| `/etc/nginx/sites-enabled/dev4.4nkweb.com.conf` | HTTP + Redirection | ✅ Actif |
| `/etc/nginx/sites-enabled/dev4.4nkweb.com-https.conf` | HTTPS complet | ✅ Actif |
| `/etc/nginx/sites-enabled/local.4nkweb.com.conf` | Local HTTP | ✅ Actif |
| `/etc/nginx/sites-enabled/local.4nkweb.com-3000.conf` | Local port 3000 | ✅ Actif |
### 🧹 **Configuration Centralisée**
**Toutes les configurations Nginx sont centralisées dans `lecoffre_node/conf/nginx/` :**
- ✅ **Configurations projet** : Supprimées des autres projets
- ✅ **Configuration native** : Conservée dans `/etc/nginx/`
- ✅ **Liens symboliques** : Pointent vers `lecoffre_node/conf/nginx/`
- ✅ **Fichiers supprimés** : `ihm_client/nginx.dev.conf` (obsolète)
### ✅ **Statut Final**
1. **Configuration HTTPS active** : Le port 443 est en écoute ✅
2. **Fichiers nettoyés** : Tous les fichiers de sauvegarde supprimés ✅
3. **Configuration complète** : Tous les services accessibles en HTTPS ✅
4. **Redirection HTTP → HTTPS** : Fonctionnelle ✅
### 🎉 **Services HTTPS Opérationnels**
- ✅ **Grafana** : `https://dev4.4nkweb.com/grafana/`
- ✅ **Page de Statut** : `https://dev4.4nkweb.com/status/`
- ✅ **API de Statut** : `https://dev4.4nkweb.com/status/api`
- ✅ **Loki** : `https://dev4.4nkweb.com/loki/`
- ✅ **IHM Client** : `https://dev4.4nkweb.com/`
- ✅ **API Backend** : `https://dev4.4nkweb.com/api/`
- ✅ **WebSocket Relay** : `https://dev4.4nkweb.com/ws/`
- ✅ **SDK Signer** : `https://dev4.4nkweb.com/signer/`
- ✅ **BlindBit** : `https://dev4.4nkweb.com/blindbit/`
---
**Met à jour ce document si tu détectes des incohérences ou pose des questions pour confirmer.**
**Propose des améliorations dans un document lecoffre_node/IA_agents/todo.md**

100
IA_agents/todo.md Normal file
View File

@ -0,0 +1,100 @@
# TODO - Améliorations et optimisations LeCoffre
## 🔄 Tâches en cours
### Validation des builds CI
- [ ] Vérifier le succès des builds CI pour tous les services
- [ ] Tester le déploiement des nouvelles images optimisées
- [ ] Valider le fonctionnement des services avec les nouvelles images
- [ ] Vérifier que les dashboards Grafana fonctionnent correctement
## 📋 Tâches à faire
### Monitoring et observabilité
- [ ] Mettre en place des alertes sur la taille des images Docker
- [ ] Créer des métriques de performance des builds CI
- [ ] Optimiser les dashboards Grafana pour les nouvelles images
- [ ] Implémenter des tests de régression pour les images
### Documentation et formation
- [ ] Mettre à jour les README avec les nouvelles bases Docker
- [ ] Documenter le processus de création de nouveaux services
- [ ] Créer un guide de contribution avec les nouvelles règles
- [ ] Former l'équipe sur l'architecture Docker optimisée
### Optimisations futures
- [ ] Implémenter le multi-stage builds pour réduire davantage les images
- [ ] Optimiser les layers Docker avec des outils comme dive
- [ ] Mettre en place des scans de sécurité des images
- [ ] Automatiser les mises à jour des bases Debian
### Infrastructure
- [ ] Optimiser les volumes Docker pour les logs
- [ ] Implémenter la rotation automatique des logs
- [ ] Améliorer la configuration Nginx pour les nouveaux services
- [ ] Optimiser les variables d'environnement
### Tests et qualité
- [ ] Créer des tests d'intégration pour tous les services
- [ ] Implémenter des tests de performance des images
- [ ] Valider la compatibilité avec les différents environnements
- [ ] Tester les rollbacks en cas de problème
## 🚀 Améliorations suggérées
### Architecture
- [ ] Considérer l'utilisation de Docker Compose profiles pour différents environnements
- [ ] Implémenter un système de health checks plus robuste
- [ ] Optimiser les réseaux Docker pour la communication inter-services
- [ ] Considérer l'utilisation de secrets Docker pour les données sensibles
### Performance
- [ ] Optimiser les temps de démarrage des services
- [ ] Implémenter des caches pour les builds Docker
- [ ] Optimiser l'utilisation des ressources (CPU, mémoire)
- [ ] Implémenter des stratégies de scaling automatique
### Sécurité
- [ ] Mettre en place des scans de vulnérabilités automatiques
- [ ] Implémenter des politiques de sécurité strictes
- [ ] Optimiser les permissions des utilisateurs Docker
- [ ] Mettre en place des audits de sécurité réguliers
## 📊 Métriques à suivre
### Images Docker
- Taille des images (objectif : < 300MB)
- Temps de build (objectif : < 10 minutes)
- Taux de succès des builds CI (objectif : > 95%)
### Services
- Temps de démarrage (objectif : < 30 secondes)
- Disponibilité (objectif : > 99.9%)
- Performance des APIs (objectif : < 200ms)
### Infrastructure
- Utilisation des ressources (CPU, mémoire, disque)
- Latence réseau entre services
- Volume des logs générés
## 🎯 Objectifs à court terme (1-2 semaines)
1. Valider le fonctionnement de tous les services avec les nouvelles images
2. Mettre à jour la documentation utilisateur
3. Former l'équipe sur les nouvelles pratiques
4. Implémenter les alertes de monitoring
## 🎯 Objectifs à moyen terme (1-2 mois)
1. Optimiser davantage les performances
2. Implémenter des tests automatisés complets
3. Mettre en place des stratégies de déploiement avancées
4. Améliorer la sécurité globale
## 🎯 Objectifs à long terme (3-6 mois)
1. Migration vers une architecture microservices plus avancée
2. Implémentation de la haute disponibilité
3. Optimisation pour la scalabilité horizontale
4. Intégration avec des outils de CI/CD plus avancés
---
**Note** : Ce document doit être mis à jour régulièrement pour refléter l'évolution du projet et les nouvelles priorités.

148
README.md Normal file
View File

@ -0,0 +1,148 @@
# 4NK Environment
Environnement complet pour le déploiement de LeCoffre et tous ses services.
## 🏗️ Architecture
```
4NK_env/
├── lecoffre_node/ # Orchestrateur principal avec Nginx intégré
├── sdk_relay/ # Service de relais WebSocket
├── sdk_signer/ # Service de signature
├── sdk_storage/ # Service de stockage
├── sdk_client/ # Client SDK
├── sdk_common/ # Composants communs
├── sdk-signer-client/ # Client signeur
├── ihm_client/ # Interface utilisateur
├── lecoffre-back-mini/ # API Backend
├── lecoffre-front/ # Frontend Next.js
├── doc_api/ # Documentation API
├── IA_agents/ # Agents IA et documentation
└── scripts/ # Scripts de déploiement
├── clone-all-repos.sh # Clonage de tous les projets
├── init-4nk-env-repo.sh # Initialisation du dépôt 4NK_env
└── check-repos-status.sh # Vérification du statut
```
## 🚀 Déploiement
### 1. Clonage de tous les projets (branche ext)
```bash
cd /home/debian/4NK_env
./scripts/clone-all-repos.sh
```
### 2. Initialisation du dépôt 4NK_env
```bash
./scripts/init-4nk-env-repo.sh
```
### 3. Architecture autonome
```bash
cd lecoffre_node
./scripts/deploy-autonomous.sh
```
## 🌐 Services et Ports
| Service | URL | Description |
|---------|-----|-------------|
| **LeCoffre Front** | http://localhost/lecoffre/ | Application principale |
| **IHM Client** | http://localhost/ | Interface client |
| **API Backend** | http://localhost/api/ | API REST |
| **WebSocket** | ws://localhost/ws/ | Communication temps réel |
| **Status Page** | http://localhost/status/ | Tableau de bord |
| **Grafana** | http://localhost/grafana/ | Monitoring |
| **Redirections IdNot** | http://local.4nkweb.com:3000/ | Redirections externes |
| **HTTPS** | https://localhost/ | Accès sécurisé |
### Ports
- **80** : HTTP (redirection vers HTTPS)
- **443** : HTTPS avec certificats auto-signés
- **3000** : Redirections externes IdNot
## 🔧 Configuration
### Architecture Autonome
- **Nginx intégré** dans le conteneur `lecoffre_node`
- **Indépendant du host** (Nginx local supprimé)
- **Configuration centralisée** dans `lecoffre_node/conf/`
- **Variables d'environnement** dans `env.master`
### Monitoring
- **Grafana** : Tableaux de bord et visualisation
- **Loki** : Collecte et stockage des logs
- **Promtail** : Agent de collecte des logs
## 📚 Documentation
- **IA_agents/context.md** : Contexte général du projet
- **IA_agents/deploy.md** : Procédures de déploiement
- **IA_agents/flux.md** : Architecture des flux
- **lecoffre_node/README-AUTONOMOUS.md** : Architecture autonome
## 🛠️ Scripts Utiles
### Vérification du statut
```bash
./scripts/check-repos-status.sh
```
### Clonage des projets
```bash
./scripts/clone-all-repos.sh
```
### Initialisation du dépôt
```bash
./scripts/init-4nk-env-repo.sh
```
## 🔐 Sécurité
- **Fichiers .env** protégés par `.gitignore`
- **Certificats SSL** auto-signés générés automatiquement
- **Utilisateurs non-root** dans tous les conteneurs
- **Secrets centralisés** dans `env.master`
## 🐳 Docker
### Images optimisées
- **Base Debian** `bookworm-slim`
- **Packages minimaux** pour la sécurité
- **Utilisateurs non-root** (`appuser`, `lecoffreuser`)
- **Tag unique** : `ext`
### Architecture
- **Conteneur master** : `lecoffre_node` avec Nginx intégré
- **Services autonomes** : Chaque service dans son conteneur
- **Réseau Docker** : Communication interne sécurisée
## 📊 Monitoring
### Dashboards Grafana
- Bitcoin Miner
- Backend Services
- SDK Services
- Frontend Services
- Bitcoin Services
- Vue d'ensemble
### Logs centralisés
- **Loki** : Stockage des logs
- **Promtail** : Collecte des logs
- **LogQL** : Requêtes de logs
## 🔄 CI/CD
- **Branche** : `ext`
- **Tag Docker** : `ext`
- **Déclenchement** : Push sur `ext`
- **Build** : Automatique via Gitea CI
## 📞 Support
Pour toute question ou problème :
1. Vérifier les logs : `docker logs <container>`
2. Consulter la documentation : `IA_agents/`
3. Vérifier le statut : `./scripts/check-repos-status.sh`

165
doc_api/.cursorrules Normal file
View File

@ -0,0 +1,165 @@
# Règles globales Cursor pour les projets
## Principes généraux
- Lire impérativement le fichier `.cursorrules` au démarrage de chaque session.
- Lire tous les fichiers du dossier `docs/`, le code et les paramètres avant de commencer.
- Poser des questions et proposer des améliorations si nécessaire.
- Ajouter les leçons apprises à ce fichier `.cursorrules`.
- Écrire des documents complets et exhaustifs.
- Respecter strictement les règles de lint du Markdown.
- Préférer toujours un shell **bash** à PowerShell.
- Fermer et relancer le terminal avant chaque utilisation.
- Si le terminal est interrompu, analyser la commande précédente (interruption probablement volontaire).
- Exécuter automatiquement les étapes de résolution de problème.
- Expliquer les commandes complexes avant de les lancer.
- Compiler régulièrement et corriger toutes les erreurs avant de passer à létape suivante.
- Tester, documenter, compiler, aligner tag git, changelog et version avant déploiement et push.
- Utiliser `docx2txt` pour lire les fichiers `.docx`.
- Ajouter automatiquement les dépendances et rechercher systématiquement les dernières versions.
- Faire des commandes simples et claires en plusieurs étapes.
- Vérifie toujours tes hypothèses avant de commencer.
- N'oublie jamais qu'après la correction d'un problème, il faut corriger toutes les erreurs qui peuvent en découler.
## Organisation des fichiers et répertoires
- Scripts regroupés dans `scripts/`
- Configurations regroupées dans `confs/`
- Journaux regroupés dans `logs/`
- Répertoires obligatoires :
- `docs/` : documentation de toute fonctionnalité ajoutée, modifiée, supprimée ou découverte.
- `tests/` : tests liés à toute fonctionnalité ajoutée, modifiée, supprimée ou découverte.
- Remplacer les résumés (`RESUME`) par des mises à jour dans `docs/`.
## Configuration critique des services
- Mempool du réseau signet :
`https://mempool2.4nkweb.com/fr/docs/api/rest`
## Développement et sécurité
- Ne jamais committer de clés privées ou secrets.
- Utiliser des variables denvironnement pour les données sensibles.
- Définir correctement les dépendances Docker avec healthchecks.
- Utiliser les URLs de service Docker Compose (`http://service_name:port`).
- Documenter toutes les modifications importantes dans `docs/`.
- Externaliser au maximum les variables denvironnement.
- Toujours utiliser une clé SSH pour cloner les dépôts.
- Monter en version les dépôts au début du travail.
- Pousser les tags docker `ext` via la CI sur `git.4nkweb.com`.
- Corriger systématiquement les problèmes, sans contournement.
## Scripts (règles critiques)
- Vérifier lexistence dun script dans `scripts/` avant toute action.
- Utiliser les scripts existants plutôt que des commandes directes.
- Ne jamais créer plusieurs versions ou noms de scripts.
- Améliorer lexistant au lieu de créer des variantes (`startup-v2.sh`, etc.).
## Images Docker (règles critiques)
- Ajouter systématiquement `apt update && apt upgrade` dans les Dockerfiles.
- Installer en arrière-plan dans les images Docker :
`curl, git, sed, awk, nc, wget, jq, telnet, tee, wscat, ping, npm (dernière version)`
- Appliquer à tous les Dockerfiles et `docker-compose.yml`.
- N'utilise pas les version test ou dev ou ext-dev mais toujours les version ext, relance leur compilation si nécessaire
## Fichiers de configuration (règles critiques)
- Vérifier lécriture effective après chaque modification.
- Fichiers concernés : `nginx.conf`, `bitcoin.conf`, `package.json`, `Cargo.toml`.
- Utiliser `cat`, `jq` ou vérificateurs de syntaxe.
## Connexion au réseau Bitcoin signet
Commande unique et obligatoire :
```bash
docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile=/home/bitcoin/.bitcoin/signet/.cookie getblockchaininfo
````
## Connexion au relay/faucet bootstrap
* Test via WSS : `wss://dev3.4nkweb.com/ws/`
* Envoi Faucet, réponse attendue avec `NewTx` (tx hex et tweak\_data).
## Debug
* Automatiser dans le code toute solution validée.
* Pérenniser les retours dexpérience dans code et paramètres.
* Compléter les tests pour éviter les régressions.
## Nginx
* Tous les fichiers dans `conf/ngnix` doivent être mappés avec ceux du serveur.
## Minage (règles critiques)
* Toujours valider les adresses utilisées (adresses TSP non reconnues).
* Utiliser uniquement des adresses Bitcoin valides (bech32m).
* Vérifier que le minage génère des blocs avec transactions, pas uniquement coinbase.
* Surveiller les logs du minage pour détecter les erreurs dadresse.
* Vérifier la propagation via le mempool externe.
## Mempool externe
* Utiliser `https://mempool2.4nkweb.com` pour vérifier les transactions.
* Vérifier la synchronisation entre réseau local et externe.
## Données et modèles
* Utiliser les fichiers CSV comme base des modèles de données.
* Être attentif aux en-têtes multi-lignes.
* Confirmer la structure comprise et demander définition de toutes les colonnes.
* Corriger automatiquement incohérences de type.
## Implémentation et architecture
* Code splitting avec `React.lazy` et `Suspense`.
* Centraliser létat avec Redux ou Context API.
* Créer une couche dabstraction pour les services de données.
* Aller systématiquement au bout dune implémentation.
## Préparation open source
Chaque projet doit être prêt pour un dépôt sur `git.4nkweb.com` :
* Inclure : `LICENSE` (MIT, Apache 2.0 ou GPL), `CONTRIBUTING.md`, `CHANGELOG.md`, `CODE_OF_CONDUCT.md`.
* Aligner documentation et tests avec `4NK_node`.
## Versioning et documentation
* Mettre à jour documentation et tests systématiquement.
* Gérer versioning avec changelog.
* Demander validation avant tag.
* Documenter les hypothèses testées dans un REX technique.
* Tester avant tout commit.
* Tester les buildsavant tout tag.
## Bonnes pratiques de confidentialité et sécurité
### Docker
- Ne jamais stocker de secrets (clés, tokens, mots de passe) dans les Dockerfiles ou docker-compose.yml.
- Utiliser des fichiers `.env` sécurisés (non commités avec copie en .env.example) pour toutes les variables sensibles.
- Ne pas exécuter de conteneurs avec lutilisateur root, privilégier un utilisateur dédié.
- Limiter les capacités des conteneurs (option `--cap-drop`) pour réduire la surface dattaque.
- Scanner régulièrement les images Docker avec un outil de sécurité (ex : Trivy, Clair).
- Mettre à jour en continu les images de base afin déliminer les vulnérabilités.
- Ne jamais exposer de ports inutiles.
- Restreindre les volumes montés au strict nécessaire.
- Utiliser des réseaux Docker internes pour la communication inter-containers.
- Vérifier et tenir à jour les .dockerignore.
### Git
- Ne jamais committer de secrets, clés ou identifiants (même temporairement).
- Configurer des hooks Git (pre-commit) pour détecter automatiquement les secrets et les failles.
- Vérifier lhistorique (`git log`, `git filter-repo`) pour sassurer quaucune information sensible na été poussée.
- Signer les commits avec GPG pour garantir lauthenticité.
- Utiliser systématiquement SSH pour les connexions à distance.
- Restreindre les accès aux dépôts (principes du moindre privilège).
- Documenter les changements sensibles dans `CHANGELOG.md`.
- Ne jamais pousser directement sur `main` ou `master`, toujours passer par des branches de feature ou PR.
- Vérifier et tenir à jour les .gitignore.
- Vérifier et tenir à jour les .gitkeep.
- Vérifier et tenir à jour les .gitattributes.
### Cursor
- Toujours ouvrir une session en commençant par relire le fichier `.cursorrules`.
- Vérifier que Cursor ne propose pas de commit contenant des secrets ou fichiers sensibles.
- Ne pas exécuter dans Cursor de commandes non comprises ou copiées sans vérification.
- Préférer lutilisation de scripts audités dans `scripts/` plutôt que des commandes directes dans Cursor.
- Fermer et relancer Cursor régulièrement pour éviter des contextes persistants non désirés.
- 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.

1
ihm_client Submodule

@ -0,0 +1 @@
Subproject commit 34d57c95f7df27879f337ef14cd81ca5379c8a56

1
lecoffre-back-mini Submodule

@ -0,0 +1 @@
Subproject commit 65b2da6d04c0e81518280d90656ce7b9314575fc

1
lecoffre-front Submodule

@ -0,0 +1 @@
Subproject commit baa4e19432b53b320cb83c28af157bcf3bbf196c

1
lecoffre_node Submodule

@ -0,0 +1 @@
Subproject commit 66479e38ceb34ed21f40272172cb060899ba1cc9

1
office.json Normal file

File diff suppressed because one or more lines are too long

150
scripts/check-repos-status.sh Executable file
View File

@ -0,0 +1,150 @@
#!/bin/bash
set -euo pipefail
echo "🔍 VÉRIFICATION DU STATUT DES DÉPÔTS"
echo "==================================="
# Fonction de logging
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Liste des projets
declare -a PROJECTS=(
"lecoffre_node"
"sdk_relay"
"sdk_signer"
"sdk_storage"
"sdk_client"
"sdk_common"
"sdk-signer-client"
"ihm_client"
"lecoffre-back-mini"
"lecoffre-front"
"doc_api"
"IA_agents"
)
BASE_DIR="/home/debian/4NK_env"
log "📊 Statut des projets dans $BASE_DIR:"
echo ""
for project in "${PROJECTS[@]}"; do
project_path="$BASE_DIR/$project"
echo "📦 $project:"
if [ -d "$project_path" ]; then
cd "$project_path"
# Vérifier si c'est un dépôt Git
if [ -d ".git" ]; then
# Informations Git
current_branch=$(git branch --show-current 2>/dev/null || echo "N/A")
last_commit=$(git log -1 --oneline 2>/dev/null || echo "Aucun commit")
git_status=$(git status --porcelain 2>/dev/null || echo "Erreur Git")
echo " ✅ Dépôt Git détecté"
echo " 📍 Branche: $current_branch"
echo " 📝 Dernier commit: $last_commit"
if [ "$git_status" = "Erreur Git" ]; then
echo " ⚠️ Problème Git détecté"
elif [ -n "$git_status" ]; then
echo " 🔄 Modifications non commitées"
else
echo " ✅ Dépôt propre"
fi
else
echo " ⚠️ Dossier sans dépôt Git"
fi
# Vérifier les fichiers importants
if [ -f "Dockerfile" ]; then
echo " 🐳 Dockerfile présent"
fi
if [ -f "docker-compose.yml" ]; then
echo " 🐙 docker-compose.yml présent"
fi
if [ -f ".env" ]; then
echo " ⚙️ Fichier .env présent"
fi
cd "$BASE_DIR"
else
echo " ❌ Dossier introuvable"
fi
echo ""
done
# Vérifier le dépôt 4NK_env lui-même
log "🏠 Statut du dépôt 4NK_env:"
cd "$BASE_DIR"
if [ -d ".git" ]; then
current_branch=$(git branch --show-current 2>/dev/null || echo "N/A")
last_commit=$(git log -1 --oneline 2>/dev/null || echo "Aucun commit")
git_status=$(git status --porcelain 2>/dev/null || echo "Erreur Git")
echo " ✅ Dépôt Git 4NK_env détecté"
echo " 📍 Branche: $current_branch"
echo " 📝 Dernier commit: $last_commit"
if [ "$git_status" = "Erreur Git" ]; then
echo " ⚠️ Problème Git détecté"
elif [ -n "$git_status" ]; then
echo " 🔄 Modifications non commitées"
else
echo " ✅ Dépôt propre"
fi
else
echo " ⚠️ Dépôt 4NK_env non initialisé"
echo " 💡 Exécutez: ./scripts/init-4nk-env-repo.sh"
fi
echo ""
log "📋 Résumé des actions recommandées:"
# Vérifier quels projets ne sont pas sur la branche ext
ext_missing=()
for project in "${PROJECTS[@]}"; do
project_path="$BASE_DIR/$project"
if [ -d "$project_path/.git" ]; then
cd "$project_path"
current_branch=$(git branch --show-current 2>/dev/null || echo "N/A")
if [ "$current_branch" != "ext" ]; then
ext_missing+=("$project")
fi
cd "$BASE_DIR"
fi
done
if [ ${#ext_missing[@]} -gt 0 ]; then
echo " 🔄 Projets à mettre sur la branche 'ext':"
for project in "${ext_missing[@]}"; do
echo " - $project"
done
echo " 💡 Exécutez: ./scripts/clone-all-repos.sh"
fi
# Vérifier les fichiers manquants
missing_files=()
for file in ".gitignore" ".dockerignore" "README.md"; do
if [ ! -f "$BASE_DIR/$file" ]; then
missing_files+=("$file")
fi
done
if [ ${#missing_files[@]} -gt 0 ]; then
echo " 📄 Fichiers manquants:"
for file in "${missing_files[@]}"; do
echo " - $file"
done
fi
echo ""
log "✅ Vérification terminée"

125
scripts/clone-all-repos.sh Executable file
View File

@ -0,0 +1,125 @@
#!/bin/bash
set -euo pipefail
echo "🔄 SCRIPT DE CLONAGE GIT - BRANCHES EXT"
echo "======================================="
# Fonction de logging
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Configuration Git
GIT_BASE_URL="git@git.4nkweb.com:4nk"
BRANCH="ext"
BASE_DIR="/home/debian/4NK_env"
# Liste des projets à cloner
declare -a PROJECTS=(
"lecoffre_node"
"sdk_relay"
"sdk_signer"
"sdk_storage"
"sdk_client"
"sdk_common"
"sdk-signer-client"
"ihm_client"
"lecoffre-back-mini"
"lecoffre-front"
"doc_api"
"IA_agents"
)
log "📋 Projets à cloner sur la branche '$BRANCH':"
for project in "${PROJECTS[@]}"; do
echo " - $project"
done
echo ""
log "🔧 Configuration Git SSH..."
if ! ssh -T git@git.4nkweb.com 2>&1 | grep -q "successfully authenticated"; then
echo "❌ Erreur: Clé SSH non configurée pour git.4nkweb.com"
echo " Vérifiez votre configuration SSH et vos clés"
exit 1
fi
log "✅ Clé SSH configurée"
log "📁 Vérification du répertoire de base: $BASE_DIR"
if [ ! -d "$BASE_DIR" ]; then
log "❌ Répertoire $BASE_DIR introuvable"
exit 1
fi
cd "$BASE_DIR"
log "🔄 Début du clonage des projets..."
echo ""
for project in "${PROJECTS[@]}"; do
log "📦 Clonage de $project..."
# URL du projet
PROJECT_URL="$GIT_BASE_URL/$project.git"
# Vérifier si le dossier existe déjà
if [ -d "$project" ]; then
log "⚠️ Le dossier '$project' existe déjà"
log " Sauvegarde dans '$project.backup'"
mv "$project" "$project.backup"
fi
# Cloner le projet sur la branche ext
log " Clonage depuis: $PROJECT_URL"
log " Branche: $BRANCH"
if git clone -b "$BRANCH" "$PROJECT_URL" "$project"; then
log "$project cloné avec succès"
# Afficher les informations du repo
cd "$project"
log " Dernier commit: $(git log -1 --oneline)"
log " Branche: $(git branch --show-current)"
cd ..
else
log "❌ Échec du clonage de $project"
# Restaurer la sauvegarde si elle existe
if [ -d "$project.backup" ]; then
log " Restauration de la sauvegarde..."
mv "$project.backup" "$project"
fi
fi
echo ""
done
log "🎉 Clonage terminé !"
log "📊 Résumé des projets clonés:"
echo ""
echo "Projets clonés sur la branche '$BRANCH':"
echo "========================================"
for project in "${PROJECTS[@]}"; do
if [ -d "$project" ]; then
echo "$project"
else
echo "$project (échec)"
fi
done
echo ""
log "🔍 Vérification des branches:"
for project in "${PROJECTS[@]}"; do
if [ -d "$project" ]; then
cd "$project"
current_branch=$(git branch --show-current)
echo " $project: $current_branch"
cd ..
fi
done
echo ""
log "📝 Prochaines étapes:"
echo " 1. Vérifier que tous les projets sont sur la branche '$BRANCH'"
echo " 2. Configurer les fichiers .gitignore et .dockerignore"
echo " 3. Initialiser le dépôt 4NK_env"
echo " 4. Pousser sur git.4nkweb.com"

168
scripts/init-4nk-env-repo.sh Executable file
View File

@ -0,0 +1,168 @@
#!/bin/bash
set -euo pipefail
echo "🚀 INITIALISATION DU DÉPÔT 4NK_ENV"
echo "================================="
# Fonction de logging
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Configuration
REPO_NAME="4NK_env"
GIT_REMOTE="git@git.4nkweb.com:4nk/4NK_env.git"
BRANCH="ext"
log "📋 Configuration:"
echo " Dépôt: $REPO_NAME"
echo " Remote: $GIT_REMOTE"
echo " Branche: $BRANCH"
echo ""
# Vérifier si on est dans le bon répertoire
CURRENT_DIR=$(basename "$PWD")
if [ "$CURRENT_DIR" != "$REPO_NAME" ]; then
log "⚠️ Attention: Vous devez être dans le répertoire $REPO_NAME"
log " Répertoire actuel: $CURRENT_DIR"
exit 1
fi
# Vérifier la configuration SSH
log "🔧 Vérification de la configuration Git SSH..."
if ! ssh -T git@git.4nkweb.com 2>&1 | grep -q "successfully authenticated"; then
echo "❌ Erreur: Clé SSH non configurée pour git.4nkweb.com"
echo " Vérifiez votre configuration SSH et vos clés"
exit 1
fi
log "✅ Clé SSH configurée"
# Initialiser Git si ce n'est pas déjà fait
if [ ! -d ".git" ]; then
log "📦 Initialisation du dépôt Git..."
git init
log "✅ Dépôt Git initialisé"
else
log " Dépôt Git déjà initialisé"
fi
# Configuration Git
log "⚙️ Configuration Git..."
git config user.name "LeCoffre Deployment"
git config user.email "deployment@lecoffre.io"
# Ajouter le remote si il n'existe pas
if ! git remote get-url origin 2>/dev/null; then
log "🔗 Ajout du remote origin..."
git remote add origin "$GIT_REMOTE"
log "✅ Remote origin ajouté"
else
log " Remote origin déjà configuré"
fi
# Créer le fichier README.md s'il n'existe pas
if [ ! -f "README.md" ]; then
log "📝 Création du README.md..."
cat > README.md << 'EOF'
# 4NK Environment
Environnement complet pour le déploiement de LeCoffre et tous ses services.
## Structure
```
4NK_env/
├── lecoffre_node/ # Orchestrateur principal
├── sdk_relay/ # Service de relais WebSocket
├── sdk_signer/ # Service de signature
├── sdk_storage/ # Service de stockage
├── sdk_client/ # Client SDK
├── sdk_common/ # Composants communs
├── sdk-signer-client/ # Client signeur
├── ihm_client/ # Interface utilisateur
├── lecoffre-back-mini/ # API Backend
├── lecoffre-front/ # Frontend Next.js
├── doc_api/ # Documentation API
├── IA_agents/ # Agents IA et documentation
└── scripts/ # Scripts de déploiement
```
## Déploiement
### Architecture autonome
```bash
cd lecoffre_node
./scripts/deploy-autonomous.sh
```
### Clonage de tous les projets
```bash
./scripts/clone-all-repos.sh
```
## Services
- **LeCoffre Node** : Orchestrateur principal avec Nginx intégré
- **Bitcoin Signet** : Nœud Bitcoin pour tests
- **Monitoring** : Grafana, Loki, Promtail
- **Services SDK** : Relay, Signer, Storage
- **Applications** : Frontend, Backend, IHM Client
## Ports
- **80** : HTTP (redirection vers HTTPS)
- **443** : HTTPS avec certificats auto-signés
- **3000** : Redirections externes IdNot
## Documentation
Voir le dossier `IA_agents/` pour la documentation complète.
EOF
log "✅ README.md créé"
else
log " README.md existe déjà"
fi
# Ajouter tous les fichiers
log "📁 Ajout des fichiers au dépôt..."
git add .
# Vérifier s'il y a des changements
if git diff --staged --quiet; then
log " Aucun changement à committer"
else
log "💾 Commit initial..."
git commit -m "ci: docker_tag=ext
Initial commit - 4NK Environment
- Configuration complète LeCoffre
- Architecture autonome avec Nginx intégré
- Scripts de déploiement
- Documentation IA_agents
- Support redirections IdNot (port 3000)
- Monitoring Grafana/Loki/Promtail"
log "✅ Commit initial créé"
fi
# Créer et pousser la branche ext
log "🌿 Création et push de la branche '$BRANCH'..."
git checkout -b "$BRANCH" 2>/dev/null || git checkout "$BRANCH"
git push -u origin "$BRANCH"
log "🎉 Dépôt 4NK_env initialisé et poussé sur la branche '$BRANCH'!"
log "🔗 URL: $GIT_REMOTE"
echo ""
log "📊 Résumé:"
echo " ✅ Dépôt Git initialisé"
echo " ✅ Remote origin configuré"
echo " ✅ Branche '$BRANCH' créée et poussée"
echo " ✅ Fichiers .gitignore et .dockerignore configurés"
echo " ✅ README.md créé"
echo ""
log "🚀 Prochaines étapes:"
echo " 1. Vérifier le dépôt sur git.4nkweb.com"
echo " 2. Configurer les workflows CI/CD si nécessaire"
echo " 3. Cloner les projets avec ./scripts/clone-all-repos.sh"
echo " 4. Déployer avec ./lecoffre_node/scripts/deploy-autonomous.sh"

1
sdk-signer-client Submodule

@ -0,0 +1 @@
Subproject commit 684e03a754ad733e042a30470f5db530722e8cea

1
sdk_client Submodule

@ -0,0 +1 @@
Subproject commit fbc2dd2a33bcf6aa15db4696062371d20aebab67

1
sdk_common Submodule

@ -0,0 +1 @@
Subproject commit 6a6833ed1224c67ea081f89ad105d41dc41ae08b

1
sdk_relay Submodule

@ -0,0 +1 @@
Subproject commit 96d131a2704e59a4aa4f26bb2fcc39403f3806b1

1
sdk_signer Submodule

@ -0,0 +1 @@
Subproject commit 2355aebf6864b599219ef25fe98a2313d99687a6

1
sdk_storage Submodule

@ -0,0 +1 @@
Subproject commit d15c995b315ca2f5cb3a49ce315af7b2e46521f5