feat: préparer l'intégration complète dans 4NK_node - ajout Dockerfile.4nk-node optimisé pour l'intégration - configuration nginx.4nk-node.conf adaptée aux services 4NK_node - script start-4nk-node.sh avec vérification des services - docker-compose.4nk-node.yml pour l'intégration - documentation INTEGRATION_4NK_NODE.md complète - script d'automatisation integrate-4nk-node.sh - structure .cursor/rules pour la cohérence avec 4NK_node - fichier AGENTS.md pour la gouvernance du projet
This commit is contained in:
parent
484b5ea250
commit
c563d7b16c
11
.cursor/.cursorignore
Normal file
11
.cursor/.cursorignore
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Ignorer les sorties volumineuses ou non pertinentes pour le contexte IA
|
||||||
|
archive/**
|
||||||
|
tests/logs/**
|
||||||
|
tests/reports/**
|
||||||
|
node_modules/**
|
||||||
|
dist/**
|
||||||
|
build/**
|
||||||
|
.tmp/**
|
||||||
|
.cache/**#
|
||||||
|
.env
|
||||||
|
.env.*
|
59
.cursor/rules/00-foundations.mdc
Normal file
59
.cursor/rules/00-foundations.mdc
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fondations de rédaction et de comportement
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
S’applique à tout le dépôt 4NK/4NK_node pour toute génération, refactorisation, édition inline ou discussion dans Cursor.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Garantir l’usage exclusif du français.
|
||||||
|
- Proscrire l’injection d’exemples de code applicatif dans la base de code.
|
||||||
|
- Assurer une cohérence stricte de terminologie et de ton.
|
||||||
|
- Exiger une introduction et/ou une conclusion dans toute proposition de texte.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Toujours répondre et documenter en français.
|
||||||
|
- Ne pas inclure d’exemples exécutables ou de quickstarts dans la base ; préférer des descriptions prescriptives.
|
||||||
|
- Tout contenu produit doit mentionner explicitement les artefacts à mettre à jour lorsqu’il impacte docs/ et tests/.
|
||||||
|
- Préserver la typographie française (capitaliser uniquement le premier mot d’un titre et les noms propres).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Relecture linguistique et technique systématique.
|
||||||
|
- Refuser toute sortie avec exemples de code applicatif.
|
||||||
|
- Vérifier que l’issue traitée se conclut par un rappel des fichiers à mettre à jour.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- README.md, docs/**, tests/**, CHANGELOG.md, .gitea/**.# Fondations de rédaction et de comportement
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
S’applique à tout le dépôt 4NK/4NK_node pour toute génération, refactorisation, édition inline ou discussion dans Cursor.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Garantir l’usage exclusif du français.
|
||||||
|
- Proscrire l’injection d’exemples de code applicatif dans la base de code.
|
||||||
|
- Assurer une cohérence stricte de terminologie et de ton.
|
||||||
|
- Exiger une introduction et/ou une conclusion dans toute proposition de texte.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Toujours répondre et documenter en français.
|
||||||
|
- Ne pas inclure d’exemples exécutables ou de quickstarts dans la base ; préférer des descriptions prescriptives.
|
||||||
|
- Tout contenu produit doit mentionner explicitement les artefacts à mettre à jour lorsqu’il impacte docs/ et tests/.
|
||||||
|
- Préserver la typographie française (capitaliser uniquement le premier mot d’un titre et les noms propres).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Relecture linguistique et technique systématique.
|
||||||
|
- Refuser toute sortie avec exemples de code applicatif.
|
||||||
|
- Vérifier que l’issue traitée se conclut par un rappel des fichiers à mettre à jour.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- README.md, docs/**, tests/**, CHANGELOG.md, .gitea/**.
|
139
.cursor/rules/10-project-structure.mdc
Normal file
139
.cursor/rules/10-project-structure.mdc
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Structure projet 4NK_node
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Maintenance de l’arborescence canonique, création/mise à jour/suppression de fichiers et répertoires.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Garantir l’alignement strict avec l’arborescence 4NK_node.
|
||||||
|
- Prévenir toute dérive structurelle.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- S’assurer que l’arborescence suivante existe et reste conforme :
|
||||||
|
|
||||||
|
4NK/4NK_node
|
||||||
|
├── archive
|
||||||
|
├── CHANGELOG.md
|
||||||
|
├── CODE_OF_CONDUCT.md
|
||||||
|
├── CONTRIBUTING.md
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── docs
|
||||||
|
│ ├── API.md
|
||||||
|
│ ├── ARCHITECTURE.md
|
||||||
|
│ ├── COMMUNITY_GUIDE.md
|
||||||
|
│ ├── CONFIGURATION.md
|
||||||
|
│ ├── GITEA_SETUP.md
|
||||||
|
│ ├── INDEX.md
|
||||||
|
│ ├── INSTALLATION.md
|
||||||
|
│ ├── MIGRATION.md
|
||||||
|
│ ├── OPEN_SOURCE_CHECKLIST.md
|
||||||
|
│ ├── QUICK_REFERENCE.md
|
||||||
|
│ ├── RELEASE_PLAN.md
|
||||||
|
│ ├── ROADMAP.md
|
||||||
|
│ ├── SECURITY_AUDIT.md
|
||||||
|
│ ├── TESTING.md
|
||||||
|
│ └── USAGE.md
|
||||||
|
├── LICENSE
|
||||||
|
├── README.md
|
||||||
|
├── tests
|
||||||
|
│ ├── cleanup.sh
|
||||||
|
│ ├── connectivity
|
||||||
|
│ ├── external
|
||||||
|
│ ├── integration
|
||||||
|
│ ├── logs
|
||||||
|
│ ├── performance
|
||||||
|
│ ├── README.md
|
||||||
|
│ ├── reports
|
||||||
|
│ └── unit
|
||||||
|
└── .gitea
|
||||||
|
├── ISSUE_TEMPLATE
|
||||||
|
│ ├── bug_report.md
|
||||||
|
│ └── feature_request.md
|
||||||
|
├── PULL_REQUEST_TEMPLATE.md
|
||||||
|
└── workflows
|
||||||
|
└── ci.yml
|
||||||
|
|
||||||
|
- Tout document obsolète est déplacé vers archive/ avec métadonnées (date, raison).
|
||||||
|
- Interdire la suppression brute de fichiers sans archivage et note dans CHANGELOG.md.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Diff structurel comparé à cette référence.
|
||||||
|
- Erreur bloquante si un fichier « requis » manque.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- archive/**, docs/**, tests/**, .gitea/**, CHANGELOG.md.
|
||||||
|
|
||||||
|
# Structure projet 4NK_node
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Maintenance de l’arborescence canonique, création/mise à jour/suppression de fichiers et répertoires.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Garantir l’alignement strict avec l’arborescence 4NK_node.
|
||||||
|
- Prévenir toute dérive structurelle.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- S’assurer que l’arborescence suivante existe et reste conforme :
|
||||||
|
|
||||||
|
4NK/4NK_node
|
||||||
|
├── archive
|
||||||
|
├── CHANGELOG.md
|
||||||
|
├── CODE_OF_CONDUCT.md
|
||||||
|
├── CONTRIBUTING.md
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── docs
|
||||||
|
│ ├── API.md
|
||||||
|
│ ├── ARCHITECTURE.md
|
||||||
|
│ ├── COMMUNITY_GUIDE.md
|
||||||
|
│ ├── CONFIGURATION.md
|
||||||
|
│ ├── GITEA_SETUP.md
|
||||||
|
│ ├── INDEX.md
|
||||||
|
│ ├── INSTALLATION.md
|
||||||
|
│ ├── MIGRATION.md
|
||||||
|
│ ├── OPEN_SOURCE_CHECKLIST.md
|
||||||
|
│ ├── QUICK_REFERENCE.md
|
||||||
|
│ ├── RELEASE_PLAN.md
|
||||||
|
│ ├── ROADMAP.md
|
||||||
|
│ ├── SECURITY_AUDIT.md
|
||||||
|
│ ├── TESTING.md
|
||||||
|
│ └── USAGE.md
|
||||||
|
├── LICENSE
|
||||||
|
├── README.md
|
||||||
|
├── tests
|
||||||
|
│ ├── cleanup.sh
|
||||||
|
│ ├── connectivity
|
||||||
|
│ ├── external
|
||||||
|
│ ├── integration
|
||||||
|
│ ├── logs
|
||||||
|
│ ├── performance
|
||||||
|
│ ├── README.md
|
||||||
|
│ ├── reports
|
||||||
|
│ └── unit
|
||||||
|
└── .gitea
|
||||||
|
├── ISSUE_TEMPLATE
|
||||||
|
│ ├── bug_report.md
|
||||||
|
│ └── feature_request.md
|
||||||
|
├── PULL_REQUEST_TEMPLATE.md
|
||||||
|
└── workflows
|
||||||
|
└── ci.yml
|
||||||
|
|
||||||
|
- Tout document obsolète est déplacé vers archive/ avec métadonnées (date, raison).
|
||||||
|
- Interdire la suppression brute de fichiers sans archivage et note dans CHANGELOG.md.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Diff structurel comparé à cette référence.
|
||||||
|
- Erreur bloquante si un fichier « requis » manque.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- archive/**, docs/**, tests/**, .gitea/**, CHANGELOG.md.
|
62
.cursor/rules/20-documentation.mdc
Normal file
62
.cursor/rules/20-documentation.mdc
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Documentation continue
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Mises à jour de docs/** corrélées à tout changement de code, configuration, dépendance, données ou CI.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
- Remplacer toute section générique « RESUME » par des mises à jour ciblées dans les fichiers appropriés.
|
||||||
|
- Tenir INDEX.md comme table des matières de référence.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
- À chaque changement, mettre à jour :
|
||||||
|
- API.md (spécifications, contrats, schémas, invariants).
|
||||||
|
- ARCHITECTURE.md (décisions, diagrammes, couplages, performances).
|
||||||
|
- CONFIGURATION.md (paramètres, formats, valeurs par défaut).
|
||||||
|
- INSTALLATION.md (pré-requis, étapes, vérifications).
|
||||||
|
- MIGRATION.md (chemins de migration, scripts, compatibilités).
|
||||||
|
- USAGE.md (parcours fonctionnels, contraintes).
|
||||||
|
- TESTING.md (pyramide, critères d’acceptation).
|
||||||
|
- SECURITY_AUDIT.md (menaces, contrôles, dettes résiduelles).
|
||||||
|
- RELEASE_PLAN.md, ROADMAP.md (planification), OPEN_SOURCE_CHECKLIST.md, COMMUNITY_GUIDE.md, GITEA_SETUP.md.
|
||||||
|
- Maintenir QUICK_REFERENCE.md pour les référentiels synthétiques utilisés par l’équipe.
|
||||||
|
- Ajouter un REX technique en cas d’hypothèses multiples avant résolution dans archive/.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
- Cohérence croisée entre README.md et INDEX.md.
|
||||||
|
- Refus si une modification de code n’a pas de trace dans docs/** correspondants.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
- docs/**, README.md, archive/**.
|
||||||
|
# Documentation continue
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Mises à jour de docs/** corrélées à tout changement de code, configuration, dépendance, données ou CI.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
- Remplacer toute section générique « RESUME » par des mises à jour ciblées dans les fichiers appropriés.
|
||||||
|
- Tenir INDEX.md comme table des matières de référence.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
- À chaque changement, mettre à jour :
|
||||||
|
- API.md (spécifications, contrats, schémas, invariants).
|
||||||
|
- ARCHITECTURE.md (décisions, diagrammes, couplages, performances).
|
||||||
|
- CONFIGURATION.md (paramètres, formats, valeurs par défaut).
|
||||||
|
- INSTALLATION.md (pré-requis, étapes, vérifications).
|
||||||
|
- MIGRATION.md (chemins de migration, scripts, compatibilités).
|
||||||
|
- USAGE.md (parcours fonctionnels, contraintes).
|
||||||
|
- TESTING.md (pyramide, critères d’acceptation).
|
||||||
|
- SECURITY_AUDIT.md (menaces, contrôles, dettes résiduelles).
|
||||||
|
- RELEASE_PLAN.md, ROADMAP.md (planification), OPEN_SOURCE_CHECKLIST.md, COMMUNITY_GUIDE.md, GITEA_SETUP.md.
|
||||||
|
- Maintenir QUICK_REFERENCE.md pour les référentiels synthétiques utilisés par l’équipe.
|
||||||
|
- Ajouter un REX technique en cas d’hypothèses multiples avant résolution dans archive/.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
- Cohérence croisée entre README.md et INDEX.md.
|
||||||
|
- Refus si une modification de code n’a pas de trace dans docs/** correspondants.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
- docs/**, README.md, archive/**.
|
57
.cursor/rules/30-testing.mdc
Normal file
57
.cursor/rules/30-testing.mdc
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Tests et qualité
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Stratégie de tests, exécution locale, stabilité, non-régression.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Exiger des tests verts avant tout commit.
|
||||||
|
- Couvrir les axes unit, integration, connectivity, performance, external.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Ajouter/mettre à jour des tests dans tests/unit, tests/integration, tests/connectivity, tests/performance, tests/external selon l’impact.
|
||||||
|
- Consigner les journaux dans tests/logs et les rapports dans tests/reports.
|
||||||
|
- Maintenir tests/README.md (stratégie, outillage, seuils).
|
||||||
|
- Fournir un nettoyage reproductible via tests/cleanup.sh.
|
||||||
|
- Bloquer l’édition si des tests échouent tant que la correction n’est pas appliquée.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus d’un commit si tests en échec.
|
||||||
|
- Exiger justification et plan de test dans docs/TESTING.md pour toute refonte majeure.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- tests/**, docs/TESTING.md, CHANGELOG.md.
|
||||||
|
|
||||||
|
# Tests et qualité
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Stratégie de tests, exécution locale, stabilité, non-régression.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Exiger des tests verts avant tout commit.
|
||||||
|
- Couvrir les axes unit, integration, connectivity, performance, external.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Ajouter/mettre à jour des tests dans tests/unit, tests/integration, tests/connectivity, tests/performance, tests/external selon l’impact.
|
||||||
|
- Consigner les journaux dans tests/logs et les rapports dans tests/reports.
|
||||||
|
- Maintenir tests/README.md (stratégie, outillage, seuils).
|
||||||
|
- Fournir un nettoyage reproductible via tests/cleanup.sh.
|
||||||
|
- Bloquer l’édition si des tests échouent tant que la correction n’est pas appliquée.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus d’un commit si tests en échec.
|
||||||
|
- Exiger justification et plan de test dans docs/TESTING.md pour toute refonte majeure.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- tests/**, docs/TESTING.md, CHANGELOG.md.
|
55
.cursor/rules/40-dependencies-and-build.mdc
Normal file
55
.cursor/rules/40-dependencies-and-build.mdc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Dépendances, compilation et build
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Gestion des dépendances, compilation fréquente, politique de versions.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Ajouter automatiquement les dépendances manquantes si justifié.
|
||||||
|
- Rechercher systématiquement les dernières versions stables.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Lorsqu’une fonctionnalité nécessite une dépendance, l’ajouter et la documenter (nom, version, portée, impact) dans docs/ARCHITECTURE.md et docs/CONFIGURATION.md si nécessaire.
|
||||||
|
- Compiler très régulièrement et « quand nécessaire » (avant refactor, avant push, après mise à jour de dépendances).
|
||||||
|
- Corriger toute erreur de compilation/exécution avant de poursuivre.
|
||||||
|
- Documenter tout changement de dépendances (raison, risques, rollback).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Interdire la progression si la compilation échoue.
|
||||||
|
- Vérifier la présence d’une note de changement dans CHANGELOG.md en cas de dépendance ajoutée/retirée.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/ARCHITECTURE.md, docs/CONFIGURATION.md, CHANGELOG.md.
|
||||||
|
|
||||||
|
# Dépendances, compilation et build
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Gestion des dépendances, compilation fréquente, politique de versions.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Ajouter automatiquement les dépendances manquantes si justifié.
|
||||||
|
- Rechercher systématiquement les dernières versions stables.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Lorsqu’une fonctionnalité nécessite une dépendance, l’ajouter et la documenter (nom, version, portée, impact) dans docs/ARCHITECTURE.md et docs/CONFIGURATION.md si nécessaire.
|
||||||
|
- Compiler très régulièrement et « quand nécessaire » (avant refactor, avant push, après mise à jour de dépendances).
|
||||||
|
- Corriger toute erreur de compilation/exécution avant de poursuivre.
|
||||||
|
- Documenter tout changement de dépendances (raison, risques, rollback).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Interdire la progression si la compilation échoue.
|
||||||
|
- Vérifier la présence d’une note de changement dans CHANGELOG.md en cas de dépendance ajoutée/retirée.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/ARCHITECTURE.md, docs/CONFIGURATION.md, CHANGELOG.md.
|
54
.cursor/rules/50-data-csv-models.mdc
Normal file
54
.cursor/rules/50-data-csv-models.mdc
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
# Modélisation des données à partir de CSV
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Utilisation des CSV comme base des modèles de données, y compris en-têtes multi-lignes.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Confirmer la structure inférée pour chaque CSV.
|
||||||
|
- Demander une définition formelle de toutes les colonnes.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Gérer explicitement les en-têtes multi-lignes (titre principal + sous-colonnes).
|
||||||
|
- Confirmer par écrit dans docs/API.md ou docs/ARCHITECTURE.md : nombre de lignes d’en-tête, mapping colonnes→types, unités, domaines de valeurs, nullabilité, contraintes.
|
||||||
|
- Poser des questions si ambiguïtés ; proposer une normalisation temporaire documentée.
|
||||||
|
- Corriger automatiquement les incohérences de types si une règle de mapping est établie ailleurs et documenter la transformation.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Aucune ingestion sans spécification de colonnes validée.
|
||||||
|
- Traçabilité des corrections de types (avant/après) dans docs/ARCHITECTURE.md.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/API.md, docs/ARCHITECTURE.md, docs/USAGE.md.
|
||||||
|
|
||||||
|
# Modélisation des données à partir de CSV
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Utilisation des CSV comme base des modèles de données, y compris en-têtes multi-lignes.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Confirmer la structure inférée pour chaque CSV.
|
||||||
|
- Demander une définition formelle de toutes les colonnes.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Gérer explicitement les en-têtes multi-lignes (titre principal + sous-colonnes).
|
||||||
|
- Confirmer par écrit dans docs/API.md ou docs/ARCHITECTURE.md : nombre de lignes d’en-tête, mapping colonnes→types, unités, domaines de valeurs, nullabilité, contraintes.
|
||||||
|
- Poser des questions si ambiguïtés ; proposer une normalisation temporaire documentée.
|
||||||
|
- Corriger automatiquement les incohérences de types si une règle de mapping est établie ailleurs et documenter la transformation.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Aucune ingestion sans spécification de colonnes validée.
|
||||||
|
- Traçabilité des corrections de types (avant/après) dans docs/ARCHITECTURE.md.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/API.md, docs/ARCHITECTURE.md, docs/USAGE.md.
|
41
.cursor/rules/60-office-docs.mdc
Normal file
41
.cursor/rules/60-office-docs.mdc
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
# Lecture des documents bureautiques
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Lecture des fichiers .docx et alternatives.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
- Utiliser docx2txt par défaut.
|
||||||
|
- Proposer des solutions de repli si lecture impossible.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
- Lire les .docx avec docx2txt.
|
||||||
|
- En cas d’échec, proposer : conversion via pandoc, demande d’une source alternative, ou extraction textuelle.
|
||||||
|
- Documenter dans docs/INDEX.md la provenance et le statut des documents importés.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
- Vérification que les contenus extraits sont intégrés aux fichiers docs/ concernés.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
- docs/**, archive/**.
|
||||||
|
# Lecture des documents bureautiques
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Lecture des fichiers .docx et alternatives.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
- Utiliser docx2txt par défaut.
|
||||||
|
- Proposer des solutions de repli si lecture impossible.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
- Lire les .docx avec docx2txt.
|
||||||
|
- En cas d’échec, proposer : conversion via pandoc, demande d’une source alternative, ou extraction textuelle.
|
||||||
|
- Documenter dans docs/INDEX.md la provenance et le statut des documents importés.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
- Vérification que les contenus extraits sont intégrés aux fichiers docs/ concernés.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
- docs/**, archive/**.
|
56
.cursor/rules/70-frontend-architecture.mdc
Normal file
56
.cursor/rules/70-frontend-architecture.mdc
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Architecture frontend
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Qualité du bundle, découpage, état global et couche de services.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Réduire la taille du bundle initial via code splitting.
|
||||||
|
- Éviter le prop drilling via Redux ou Context API.
|
||||||
|
- Abstraire les services de données pour testabilité et maintenance.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Mettre en place React.lazy et Suspense pour le chargement différé des vues/segments.
|
||||||
|
- Centraliser l’état global via Redux ou Context API.
|
||||||
|
- Isoler les appels « data » derrière une couche d’abstraction à interface stable.
|
||||||
|
- Interdire l’ajout d’exemples front dans la base de code.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Vérifier que les points d’entrée sont minimes et que les segments non critiques sont chargés à la demande.
|
||||||
|
- S’assurer que docs/ARCHITECTURE.md décrit les décisions et les points d’extension.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/ARCHITECTURE.md, docs/TESTING.md.
|
||||||
|
# Architecture frontend
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Qualité du bundle, découpage, état global et couche de services.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Réduire la taille du bundle initial via code splitting.
|
||||||
|
- Éviter le prop drilling via Redux ou Context API.
|
||||||
|
- Abstraire les services de données pour testabilité et maintenance.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Mettre en place React.lazy et Suspense pour le chargement différé des vues/segments.
|
||||||
|
- Centraliser l’état global via Redux ou Context API.
|
||||||
|
- Isoler les appels « data » derrière une couche d’abstraction à interface stable.
|
||||||
|
- Interdire l’ajout d’exemples front dans la base de code.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Vérifier que les points d’entrée sont minimes et que les segments non critiques sont chargés à la demande.
|
||||||
|
- S’assurer que docs/ARCHITECTURE.md décrit les décisions et les points d’extension.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- docs/ARCHITECTURE.md, docs/TESTING.md.
|
53
.cursor/rules/80-versioning-and-release.mdc
Normal file
53
.cursor/rules/80-versioning-and-release.mdc
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# Versionnage et publication
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Gestion sémantique des versions, CHANGELOG, confirmation push/tag.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Tenir CHANGELOG.md comme source unique de vérité.
|
||||||
|
- Demander confirmation avant push et tag.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- À chaque changement significatif, mettre à jour CHANGELOG.md (ajouts, changements, corrections, ruptures).
|
||||||
|
- Proposer un bump semver (major/minor/patch) motivé par l’impact.
|
||||||
|
- Avant tout push ou tag, demander confirmation explicite.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus si modification sans entrée correspondante dans CHANGELOG.md.
|
||||||
|
- Cohérence entre CHANGELOG.md, docs/RELEASE_PLAN.md et docs/ROADMAP.md.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- CHANGELOG.md, docs/RELEASE_PLAN.md, docs/ROADMAP.md.
|
||||||
|
|
||||||
|
# Versionnage et publication
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Gestion sémantique des versions, CHANGELOG, confirmation push/tag.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Tenir CHANGELOG.md comme source unique de vérité.
|
||||||
|
- Demander confirmation avant push et tag.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- À chaque changement significatif, mettre à jour CHANGELOG.md (ajouts, changements, corrections, ruptures).
|
||||||
|
- Proposer un bump semver (major/minor/patch) motivé par l’impact.
|
||||||
|
- Avant tout push ou tag, demander confirmation explicite.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus si modification sans entrée correspondante dans CHANGELOG.md.
|
||||||
|
- Cohérence entre CHANGELOG.md, docs/RELEASE_PLAN.md et docs/ROADMAP.md.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- CHANGELOG.md, docs/RELEASE_PLAN.md, docs/ROADMAP.md.
|
59
.cursor/rules/90-gitea-and-oss.mdc
Normal file
59
.cursor/rules/90-gitea-and-oss.mdc
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Open source et Gitea
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Conformité open source, templates Gitea, CI.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Préparer chaque projet pour un dépôt Gitea (git.4nkweb.com).
|
||||||
|
- Maintenir les fichiers de gouvernance et la CI.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Vérifier la présence et l’actualité de : LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, OPEN_SOURCE_CHECKLIST.md.
|
||||||
|
- Maintenir .gitea/ :
|
||||||
|
- ISSUE_TEMPLATE/bug_report.md, feature_request.md
|
||||||
|
- PULL_REQUEST_TEMPLATE.md
|
||||||
|
- workflows/ci.yml
|
||||||
|
- Documenter dans docs/GITEA_SETUP.md la configuration distante et les permissions.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus si un des fichiers « gouvernance/CI » manque.
|
||||||
|
- Cohérence entre docs/OPEN_SOURCE_CHECKLIST.md et l’état du repo.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- .gitea/**, docs/GITEA_SETUP.md, docs/OPEN_SOURCE_CHECKLIST.md.
|
||||||
|
|
||||||
|
# Open source et Gitea
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Conformité open source, templates Gitea, CI.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Préparer chaque projet pour un dépôt Gitea (git.4nkweb.com).
|
||||||
|
- Maintenir les fichiers de gouvernance et la CI.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Vérifier la présence et l’actualité de : LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, OPEN_SOURCE_CHECKLIST.md.
|
||||||
|
- Maintenir .gitea/ :
|
||||||
|
- ISSUE_TEMPLATE/bug_report.md, feature_request.md
|
||||||
|
- PULL_REQUEST_TEMPLATE.md
|
||||||
|
- workflows/ci.yml
|
||||||
|
- Documenter dans docs/GITEA_SETUP.md la configuration distante et les permissions.
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Refus si un des fichiers « gouvernance/CI » manque.
|
||||||
|
- Cohérence entre docs/OPEN_SOURCE_CHECKLIST.md et l’état du repo.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- .gitea/**, docs/GITEA_SETUP.md, docs/OPEN_SOURCE_CHECKLIST.md.
|
53
.cursor/rules/95-triage-and-problem-solving.mdc
Normal file
53
.cursor/rules/95-triage-and-problem-solving.mdc
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Tri, diagnostic et résolution de problèmes
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Boucle de triage : reproduction, diagnostic, correctif, non-régression.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Exécuter automatiquement les étapes de résolution.
|
||||||
|
- Bloquer l’avancement tant que les erreurs ne sont pas corrigées.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Étapes obligatoires : reproduction minimale, inspection des logs, bissection des changements, formulation d’hypothèses, tests ciblés, correctif, test de non-régression.
|
||||||
|
- Lorsque plusieurs hypothèses ont été testées, produire un REX dans archive/ avec liens vers les commits.
|
||||||
|
- Poser des questions de cohérence fonctionnelle si des ambiguïtés subsistent (contrats d’API, invariants, SLA).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Interdiction de clore une tâche si un test échoue ou si une alerte critique subsiste.
|
||||||
|
- Traçabilité du REX si investigations multiples.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- tests/**, archive/**, docs/TESTING.md, docs/ARCHITECTURE.md.
|
||||||
|
|
||||||
|
# Tri, diagnostic et résolution de problèmes
|
||||||
|
|
||||||
|
[portée]
|
||||||
|
Boucle de triage : reproduction, diagnostic, correctif, non-régression.
|
||||||
|
|
||||||
|
[objectifs]
|
||||||
|
|
||||||
|
- Exécuter automatiquement les étapes de résolution.
|
||||||
|
- Bloquer l’avancement tant que les erreurs ne sont pas corrigées.
|
||||||
|
|
||||||
|
[directives]
|
||||||
|
|
||||||
|
- Étapes obligatoires : reproduction minimale, inspection des logs, bissection des changements, formulation d’hypothèses, tests ciblés, correctif, test de non-régression.
|
||||||
|
- Lorsque plusieurs hypothèses ont été testées, produire un REX dans archive/ avec liens vers les commits.
|
||||||
|
- Poser des questions de cohérence fonctionnelle si des ambiguïtés subsistent (contrats d’API, invariants, SLA).
|
||||||
|
|
||||||
|
[validations]
|
||||||
|
|
||||||
|
- Interdiction de clore une tâche si un test échoue ou si une alerte critique subsiste.
|
||||||
|
- Traçabilité du REX si investigations multiples.
|
||||||
|
|
||||||
|
[artefacts concernés]
|
||||||
|
|
||||||
|
- tests/**, archive/**, docs/TESTING.md, docs/ARCHITECTURE.md.
|
15
.cursor/rules/ruleset-index.md
Normal file
15
.cursor/rules/ruleset-index.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Index des règles .cursor/rules
|
||||||
|
|
||||||
|
- 00-foundations.mdc : règles linguistiques et éditoriales (français, pas d’exemples en base, introduction/conclusion).
|
||||||
|
- 10-project-structure.mdc : arborescence canonique 4NK_node et garde-fous.
|
||||||
|
- 20-documentation.mdc : documentation continue, remplacement de « RESUME », INDEX.md.
|
||||||
|
- 30-testing.mdc : tests (unit, integration, connectivity, performance, external), logs/reports.
|
||||||
|
- 40-dependencies-and-build.mdc : dépendances, compilation, corrections bloquantes.
|
||||||
|
- 50-data-csv-models.mdc : CSV avec en-têtes multi-lignes, définition des colonnes.
|
||||||
|
- 60-office-docs.mdc : lecture .docx via docx2txt + repli.
|
||||||
|
- 70-frontend-architecture.mdc : React.lazy/Suspense, état global, couche de services.
|
||||||
|
- 80-versioning-and-release.mdc : CHANGELOG, semver, confirmation push/tag.
|
||||||
|
- 90-gitea-and-oss.mdc : fichiers open source, .gitea, CI, Gitea remote.
|
||||||
|
- 95-triage-and-problem-solving.mdc : boucle de diagnostic, REX, non-régression.
|
||||||
|
|
||||||
|
Ces règles sont conçues pour être ajoutées au contexte de Cursor depuis l’interface (@Cursor Rules) et s’appuient sur le mécanisme de règles projet stockées dans `.cursor/rules/`. :contentReference[oaicite:3]{index=3}
|
43
.github/workflows/cicd.yml
vendored
43
.github/workflows/cicd.yml
vendored
@ -1,43 +0,0 @@
|
|||||||
name: Build and Push to Registry
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ cicd ]
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: git.4nkweb.com
|
|
||||||
IMAGE_NAME: 4nk/ihm_client
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up SSH agent
|
|
||||||
uses: webfactory/ssh-agent@v0.9.1
|
|
||||||
with:
|
|
||||||
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Login to Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ secrets.USER }}
|
|
||||||
password: ${{ secrets.TOKEN }}
|
|
||||||
|
|
||||||
- name: Build and push
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
push: true
|
|
||||||
ssh: default
|
|
||||||
build-args: |
|
|
||||||
ENV_VARS=${{ secrets.ENV_VARS }}
|
|
||||||
tags: |
|
|
||||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
|
||||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ gitea.sha }}
|
|
258
AGENTS.md
Normal file
258
AGENTS.md
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
|
||||||
|
- [Introduction](#introduction)
|
||||||
|
- [Agents fondamentaux](#agents-fondamentaux)
|
||||||
|
- [Agents spécialisés documentation](#agents-spécialisés-documentation)
|
||||||
|
- [Agents spécialisés tests](#agents-spécialisés-tests)
|
||||||
|
- [Agents techniques](#agents-techniques)
|
||||||
|
- [Agents frontend](#agents-frontend)
|
||||||
|
- [Agents open source et CI](#agents-open-source-et-ci)
|
||||||
|
- [Agents complémentaires](#agents-complémentaires)
|
||||||
|
- [Matrice de coordination](#matrice-de-coordination)
|
||||||
|
- [Conclusion](#conclusion)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Ce document définit les agents, leurs rôles et leurs responsabilités dans le projet `4NK/4NK_node`.
|
||||||
|
Chaque agent est assigné à un périmètre clair (documentation, tests, dépendances, données, CI, gouvernance open source).
|
||||||
|
L’objectif est d’assurer une maintenance cohérente de l’arborescence, une traçabilité complète et une exécution fiable des bonnes pratiques.
|
||||||
|
Les règles détaillées de réalisation et de contrôle sont précisées dans `.cursor/rules/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents fondamentaux
|
||||||
|
|
||||||
|
### Agent Fondation
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Garantir que toute production est en français.
|
||||||
|
- Vérifier l’absence d’exemples de code applicatif dans la base de code.
|
||||||
|
- Imposer l’introduction et/ou conclusion dans chaque contenu.
|
||||||
|
|
||||||
|
**Artefacts :**
|
||||||
|
|
||||||
|
- Tous fichiers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Structure
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Maintenir l’arborescence canonique du projet.
|
||||||
|
- Déplacer les documents obsolètes vers `archive/`.
|
||||||
|
- Bloquer toute suppression non documentée.
|
||||||
|
|
||||||
|
**Artefacts :**
|
||||||
|
|
||||||
|
- `archive/`, `docs/`, `tests/`, `.gitea/`, `CHANGELOG.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents spécialisés documentation
|
||||||
|
|
||||||
|
### Agent Documentation
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Mettre à jour les fichiers de `docs/` selon l’impact des changements.
|
||||||
|
- Maintenir `INDEX.md` comme table des matières centrale.
|
||||||
|
- Produire des REX techniques dans `archive/`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Données CSV
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Considérer les CSV comme source de vérité des modèles de données.
|
||||||
|
- Confirmer la structure et exiger une définition des colonnes.
|
||||||
|
- Corriger automatiquement les incohérences de type documentées.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Documents bureautiques
|
||||||
|
|
||||||
|
**Rôle (Consulté)** :
|
||||||
|
|
||||||
|
- Lire les `.docx` via `docx2txt`.
|
||||||
|
- Proposer des alternatives en cas d’échec.
|
||||||
|
- Documenter les imports dans `INDEX.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents spécialisés tests
|
||||||
|
|
||||||
|
### Agent Tests
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Maintenir la couverture : `unit`, `integration`, `connectivity`, `performance`, `external`.
|
||||||
|
- Gérer `tests/logs` et `tests/reports`.
|
||||||
|
- Exiger des tests verts avant commit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Performance
|
||||||
|
|
||||||
|
**Rôle (Consulté)** :
|
||||||
|
|
||||||
|
- Conduire des benchmarks reproductibles.
|
||||||
|
- Vérifier l’impact performance avant toute fusion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents techniques
|
||||||
|
|
||||||
|
### Agent Dépendances
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Ajouter automatiquement les dépendances manquantes.
|
||||||
|
- Vérifier les dernières versions stables.
|
||||||
|
- Documenter les changements dans `ARCHITECTURE.md`, `CONFIGURATION.md` et `CHANGELOG.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Compilation
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Compiler très régulièrement et à chaque étape critique.
|
||||||
|
- Bloquer toute progression en présence d’erreurs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Résolution
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Exécuter systématiquement la boucle de diagnostic (reproduction, logs, bissection, hypothèses, correctif, non-régression).
|
||||||
|
- Produire un REX en cas d’hypothèses multiples.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents frontend
|
||||||
|
|
||||||
|
### Agent Frontend
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Implémenter le code splitting (`React.lazy`, `Suspense`).
|
||||||
|
- Centraliser l’état via Redux ou Context API.
|
||||||
|
- Créer une couche d’abstraction pour les services de données.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents open source et CI
|
||||||
|
|
||||||
|
### Agent Open Source
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Maintenir à jour : `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `OPEN_SOURCE_CHECKLIST.md`.
|
||||||
|
- Vérifier l’alignement continu avec `4NK_node`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Gitea
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Vérifier la présence et l’actualité de `.gitea/ISSUE_TEMPLATE/*`, `PULL_REQUEST_TEMPLATE.md`, `.gitea/workflows/ci.yml`.
|
||||||
|
- Documenter la configuration dans `docs/GITEA_SETUP.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Versionnage
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Maintenir `CHANGELOG.md` comme source unique de vérité.
|
||||||
|
- Proposer un bump semver justifié.
|
||||||
|
- Demander confirmation avant push et tag.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Agents complémentaires
|
||||||
|
|
||||||
|
### Agent Coordination
|
||||||
|
|
||||||
|
**Rôle (Accountable)** :
|
||||||
|
|
||||||
|
- Vérifier que tous les agents concernés ont bien agi lors d’un changement complexe.
|
||||||
|
- Consolider les validations avant merge.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Qualité / Linting
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Appliquer les règles de style, lint et sécurité statique.
|
||||||
|
- Surveiller la dette technique et l’accessibilité.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Release Manager
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Superviser le passage d’une version à l’autre.
|
||||||
|
- Vérifier la cohérence entre `CHANGELOG.md`, `ROADMAP.md` et les tags Git.
|
||||||
|
- Déclencher les workflows CI/CD de release.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Sécurité proactive
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- Surveiller les dépendances vulnérables (CVE, advisories).
|
||||||
|
- Mettre à jour `SECURITY_AUDIT.md` et notifier l’agent Dépendances.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Contributeurs externes
|
||||||
|
|
||||||
|
**Rôle (Consulté)** :
|
||||||
|
|
||||||
|
- Encadrer la réception de PRs et issues communautaires.
|
||||||
|
- Veiller au respect de `CODE_OF_CONDUCT.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Agent Documentation communautaire
|
||||||
|
|
||||||
|
**Rôle (Responsable)** :
|
||||||
|
|
||||||
|
- S’assurer que `COMMUNITY_GUIDE.md` et `OPEN_SOURCE_CHECKLIST.md` sont accessibles, clairs et alignés avec l’expérience contributeurs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Matrice de coordination
|
||||||
|
|
||||||
|
| Type de changement | Agents impliqués | Artefacts principaux | Validation obligatoire |
|
||||||
|
|--------------------------------|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|------------------------|
|
||||||
|
| Ajout de fonctionnalité | Documentation, Tests, Dépendances, Frontend | API.md, USAGE.md, ARCHITECTURE.md, tests/unit, tests/integration, CHANGELOG.md (*Added*), README.md | Oui |
|
||||||
|
| Correction de bug | Résolution, Tests, Documentation | tests/unit, TESTING.md, archive/, CHANGELOG.md (*Fixed*) | Oui |
|
||||||
|
| Refactorisation / amélioration | Structure, Documentation, Compilation | ARCHITECTURE.md, archive/, CHANGELOG.md (*Changed*) | Oui |
|
||||||
|
| Dépendance ajoutée/mise à jour | Dépendances, Compilation, Documentation | ARCHITECTURE.md, CONFIGURATION.md, CHANGELOG.md (*Dependencies*) | Oui |
|
||||||
|
| Données CSV modifiées | Données CSV, Documentation, Tests | API.md, ARCHITECTURE.md, USAGE.md, tests/unit, CHANGELOG.md (*Data model update*) | Oui |
|
||||||
|
| Migration / breaking change | Documentation, Tests, Résolution, Versionnage | MIGRATION.md, INSTALLATION.md, RELEASE_PLAN.md, ROADMAP.md, tests/integration, CHANGELOG.md (*Breaking*)| Oui |
|
||||||
|
| Sécurité / audit | Documentation, Tests, Open Source, Sécurité proactive | SECURITY_AUDIT.md, tests/external, tests/connectivity, CHANGELOG.md (*Security*) | Oui |
|
||||||
|
| Préparation open source / CI | Open Source, Gitea, Versionnage, Documentation communautaire, Contributeurs externes | .gitea/**, GITEA_SETUP.md, OPEN_SOURCE_CHECKLIST.md, CHANGELOG.md (*CI/CD* / *Governance*) | Oui |
|
||||||
|
| Optimisation performance | Performance, Tests, Documentation | tests/performance, tests/reports, ARCHITECTURE.md, CHANGELOG.md (*Performance*) | Oui |
|
||||||
|
| Évolution frontend | Frontend, Documentation, Tests | ARCHITECTURE.md, USAGE.md, tests/integration, CHANGELOG.md (*Frontend*) | Oui |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Le présent `AGENTS.md` formalise non seulement les rôles et responsabilités, mais également la coordination opérationnelle entre agents pour chaque type de changement.
|
||||||
|
Grâce à la table des matières, aux agents complémentaires et à la matrice structurée, ce fichier constitue une référence vivante garantissant la cohérence entre code, documentation, tests, dépendances, CI/CD et gouvernance open source.
|
53
Dockerfile.4nk-node
Normal file
53
Dockerfile.4nk-node
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# Dockerfile optimisé pour l'intégration dans 4NK_node
|
||||||
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Installation des dépendances système
|
||||||
|
RUN apk update && apk add --no-cache \
|
||||||
|
git \
|
||||||
|
build-base \
|
||||||
|
python3 \
|
||||||
|
make \
|
||||||
|
g++
|
||||||
|
|
||||||
|
# Copie des fichiers de dépendances
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
# Installation des dépendances
|
||||||
|
RUN npm ci --only=production
|
||||||
|
|
||||||
|
# Copie du code source
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Build de l'application
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Image de production
|
||||||
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
# Installation de Node.js pour les scripts de démarrage
|
||||||
|
RUN apk update && apk add --no-cache nodejs npm
|
||||||
|
|
||||||
|
# Copie des fichiers buildés
|
||||||
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||||
|
COPY --from=builder /app/package*.json /app/
|
||||||
|
|
||||||
|
# Copie de la configuration nginx optimisée pour 4NK_node
|
||||||
|
COPY nginx.4nk-node.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Script de démarrage
|
||||||
|
COPY start-4nk-node.sh /start-4nk-node.sh
|
||||||
|
RUN chmod +x /start-4nk-node.sh
|
||||||
|
|
||||||
|
# Exposition des ports
|
||||||
|
EXPOSE 80 3003
|
||||||
|
|
||||||
|
# Variables d'environnement pour 4NK_node
|
||||||
|
ENV SDK_RELAY_WS_URL=ws://sdk_relay_1:8090
|
||||||
|
ENV SDK_RELAY_HTTP_URL=http://sdk_relay_1:8091
|
||||||
|
ENV BITCOIN_RPC_URL=http://bitcoin:18443
|
||||||
|
ENV BLINDBIT_URL=http://blindbit:8000
|
||||||
|
|
||||||
|
# Point d'entrée
|
||||||
|
CMD ["/start-4nk-node.sh"]
|
305
INTEGRATION_4NK_NODE.md
Normal file
305
INTEGRATION_4NK_NODE.md
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
# Intégration de l'Interface Utilisateur dans 4NK_node
|
||||||
|
|
||||||
|
Ce document décrit le processus d'intégration de l'interface utilisateur `ihm_client` dans l'infrastructure `4NK_node`.
|
||||||
|
|
||||||
|
## 🎯 Objectif
|
||||||
|
|
||||||
|
Intégrer l'interface utilisateur web dans le conteneur `4NK_node` pour fournir une interface graphique complète pour :
|
||||||
|
- Gestion des paiements silencieux
|
||||||
|
- Interaction avec les relais sdk_relay
|
||||||
|
- Monitoring de l'infrastructure Bitcoin
|
||||||
|
- Interface utilisateur pour les fonctionnalités 4NK
|
||||||
|
|
||||||
|
## 📁 Fichiers d'Intégration
|
||||||
|
|
||||||
|
### Nouveaux Fichiers Créés
|
||||||
|
|
||||||
|
- `Dockerfile.4nk-node` - Dockerfile optimisé pour l'intégration
|
||||||
|
- `nginx.4nk-node.conf` - Configuration nginx adaptée à 4NK_node
|
||||||
|
- `start-4nk-node.sh` - Script de démarrage avec vérification des services
|
||||||
|
- `docker-compose.4nk-node.yml` - Configuration Docker Compose
|
||||||
|
- `INTEGRATION_4NK_NODE.md` - Cette documentation
|
||||||
|
|
||||||
|
## 🏗️ Architecture d'Intégration
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ ihm_client │ │ sdk_relay_1 │ │ sdk_relay_2 │
|
||||||
|
│ (Port 8080) │◄──►│ (Port 8090) │◄──►│ (Port 8091) │
|
||||||
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
│ │ │
|
||||||
|
│ ▼ ▼
|
||||||
|
│ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ │ sdk_relay_3 │ │ Bitcoin │
|
||||||
|
│ │ (Port 8092) │ │ (Port 18443) │
|
||||||
|
│ └─────────────────┘ └─────────────────┘
|
||||||
|
│ │ │
|
||||||
|
│ ▼ ▼
|
||||||
|
│ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
└─────────────►│ Blindbit │ │ Tor │
|
||||||
|
│ (Port 8000) │ │ (Port 9050) │
|
||||||
|
└─────────────────┘ └─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Démarrage Rapide
|
||||||
|
|
||||||
|
### 1. Prérequis
|
||||||
|
|
||||||
|
- Docker et Docker Compose installés
|
||||||
|
- Réseau `btcnet` créé (via 4NK_node)
|
||||||
|
- Services 4NK_node en cours d'exécution
|
||||||
|
|
||||||
|
### 2. Intégration dans 4NK_node
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Depuis le répertoire 4NK_node
|
||||||
|
cd 4NK_node
|
||||||
|
|
||||||
|
# Ajouter le service ihm_client au docker-compose.yml
|
||||||
|
# Copier les fichiers d'intégration depuis ihm_client
|
||||||
|
cp ../ihm_client/Dockerfile.4nk-node ./ihm_client/
|
||||||
|
cp ../ihm_client/nginx.4nk-node.conf ./ihm_client/
|
||||||
|
cp ../ihm_client/start-4nk-node.sh ./ihm_client/
|
||||||
|
|
||||||
|
# Ajouter le service au docker-compose.yml principal
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Configuration du docker-compose.yml principal
|
||||||
|
|
||||||
|
Ajouter le service suivant au `docker-compose.yml` de 4NK_node :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ihm_client:
|
||||||
|
build:
|
||||||
|
context: ./ihm_client
|
||||||
|
dockerfile: Dockerfile.4nk-node
|
||||||
|
container_name: 4nk-ihm-client
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
environment:
|
||||||
|
- SDK_RELAY_WS_URL=ws://sdk_relay_1:8090
|
||||||
|
- SDK_RELAY_HTTP_URL=http://sdk_relay_1:8091
|
||||||
|
- BITCOIN_RPC_URL=http://bitcoin:18443
|
||||||
|
- BLINDBIT_URL=http://blindbit:8000
|
||||||
|
volumes:
|
||||||
|
- ihm_client_logs:/var/log/nginx
|
||||||
|
networks:
|
||||||
|
- btcnet
|
||||||
|
depends_on:
|
||||||
|
- sdk_relay_1
|
||||||
|
- sdk_relay_2
|
||||||
|
- sdk_relay_3
|
||||||
|
restart: unless-stopped
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Démarrage
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Redémarrer l'infrastructure complète
|
||||||
|
./restart_4nk_node.sh
|
||||||
|
|
||||||
|
# Ou démarrer uniquement l'interface
|
||||||
|
docker-compose up -d ihm_client
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
### Variables d'Environnement
|
||||||
|
|
||||||
|
| Variable | Défaut | Description |
|
||||||
|
|----------|--------|-------------|
|
||||||
|
| `SDK_RELAY_WS_URL` | `ws://sdk_relay_1:8090` | URL WebSocket du relais principal |
|
||||||
|
| `SDK_RELAY_HTTP_URL` | `http://sdk_relay_1:8091` | URL HTTP de l'API du relais |
|
||||||
|
| `BITCOIN_RPC_URL` | `http://bitcoin:18443` | URL RPC de Bitcoin Core |
|
||||||
|
| `BLINDBIT_URL` | `http://blindbit:8000` | URL du service Blindbit |
|
||||||
|
|
||||||
|
### Ports
|
||||||
|
|
||||||
|
| Port | Service | Description |
|
||||||
|
|------|---------|-------------|
|
||||||
|
| 8080 | HTTP | Interface utilisateur principale |
|
||||||
|
| 3003 | Dev | Serveur de développement (optionnel) |
|
||||||
|
|
||||||
|
### Volumes
|
||||||
|
|
||||||
|
| Volume | Description |
|
||||||
|
|--------|-------------|
|
||||||
|
| `ihm_client_logs` | Logs nginx |
|
||||||
|
| `ihm_client_data` | Données persistantes |
|
||||||
|
|
||||||
|
## 🔌 Connectivité
|
||||||
|
|
||||||
|
### Services Intégrés
|
||||||
|
|
||||||
|
1. **sdk_relay WebSocket** (`/ws/`)
|
||||||
|
- Communication temps réel
|
||||||
|
- Synchronisation des données
|
||||||
|
- Notifications
|
||||||
|
|
||||||
|
2. **sdk_relay HTTP API** (`/api/`)
|
||||||
|
- Endpoints REST
|
||||||
|
- Gestion des paiements
|
||||||
|
- Configuration
|
||||||
|
|
||||||
|
3. **Bitcoin Core RPC** (`/bitcoin/`)
|
||||||
|
- Accès aux données blockchain
|
||||||
|
- Gestion des transactions
|
||||||
|
- Monitoring
|
||||||
|
|
||||||
|
4. **Blindbit** (`/blindbit/`)
|
||||||
|
- Filtres de paiements silencieux
|
||||||
|
- Services de validation
|
||||||
|
|
||||||
|
## 🧪 Tests d'Intégration
|
||||||
|
|
||||||
|
### Test de Connectivité
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test de l'interface principale
|
||||||
|
curl -f http://localhost:8080
|
||||||
|
|
||||||
|
# Test de l'API sdk_relay
|
||||||
|
curl -f http://localhost:8080/api/health
|
||||||
|
|
||||||
|
# Test WebSocket
|
||||||
|
wscat -c ws://localhost:8080/ws/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test de Fonctionnalités
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier les logs
|
||||||
|
docker logs 4nk-ihm-client
|
||||||
|
|
||||||
|
# Tester la santé du conteneur
|
||||||
|
docker exec 4nk-ihm-client wget -q -O- http://localhost
|
||||||
|
|
||||||
|
# Vérifier la configuration
|
||||||
|
docker exec 4nk-ihm-client cat /usr/share/nginx/html/config.js
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔍 Monitoring
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Logs en temps réel
|
||||||
|
docker logs -f 4nk-ihm-client
|
||||||
|
|
||||||
|
# Logs nginx
|
||||||
|
docker exec 4nk-ihm-client tail -f /var/log/nginx/ihm_client_access.log
|
||||||
|
docker exec 4nk-ihm-client tail -f /var/log/nginx/ihm_client_error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Métriques
|
||||||
|
|
||||||
|
- **Disponibilité** : Healthcheck automatique
|
||||||
|
- **Performance** : Logs nginx avec métriques
|
||||||
|
- **Erreurs** : Logs d'erreur centralisés
|
||||||
|
|
||||||
|
## 🛠️ Développement
|
||||||
|
|
||||||
|
### Mode Développement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Démarrer en mode développement
|
||||||
|
docker-compose -f docker-compose.4nk-node.yml up -d
|
||||||
|
|
||||||
|
# Rebuild après modifications
|
||||||
|
docker-compose -f docker-compose.4nk-node.yml build --no-cache ihm_client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Debugging
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Accès au conteneur
|
||||||
|
docker exec -it 4nk-ihm-client sh
|
||||||
|
|
||||||
|
# Vérifier la configuration nginx
|
||||||
|
docker exec 4nk-ihm-client nginx -t
|
||||||
|
|
||||||
|
# Tester les services
|
||||||
|
docker exec 4nk-ihm-client wget -q -O- http://sdk_relay_1:8091/health
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔒 Sécurité
|
||||||
|
|
||||||
|
### Headers de Sécurité
|
||||||
|
|
||||||
|
- `X-Frame-Options: SAMEORIGIN`
|
||||||
|
- `X-Content-Type-Options: nosniff`
|
||||||
|
- `X-XSS-Protection: 1; mode=block`
|
||||||
|
- `Referrer-Policy: strict-origin-when-cross-origin`
|
||||||
|
|
||||||
|
### Authentification
|
||||||
|
|
||||||
|
- Bitcoin RPC : Authentification basique
|
||||||
|
- API sdk_relay : CORS configuré
|
||||||
|
- WebSocket : Validation des connexions
|
||||||
|
|
||||||
|
## 📊 Performance
|
||||||
|
|
||||||
|
### Optimisations
|
||||||
|
|
||||||
|
- **Cache statique** : Assets avec expiration 1 an
|
||||||
|
- **Compression** : Nginx gzip activé
|
||||||
|
- **Proxy** : Connexions persistantes
|
||||||
|
- **Healthcheck** : Monitoring automatique
|
||||||
|
|
||||||
|
### Ressources
|
||||||
|
|
||||||
|
- **CPU** : 0.5-1 core
|
||||||
|
- **RAM** : 256-512 MB
|
||||||
|
- **Stockage** : 100-200 MB
|
||||||
|
|
||||||
|
## 🚨 Dépannage
|
||||||
|
|
||||||
|
### Problèmes Courants
|
||||||
|
|
||||||
|
1. **Service non accessible**
|
||||||
|
```bash
|
||||||
|
# Vérifier les logs de démarrage
|
||||||
|
docker logs 4nk-ihm-client
|
||||||
|
|
||||||
|
# Vérifier la connectivité réseau
|
||||||
|
docker exec 4nk-ihm-client ping sdk_relay_1
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Erreurs nginx**
|
||||||
|
```bash
|
||||||
|
# Vérifier la configuration
|
||||||
|
docker exec 4nk-ihm-client nginx -t
|
||||||
|
|
||||||
|
# Redémarrer nginx
|
||||||
|
docker exec 4nk-ihm-client nginx -s reload
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Problèmes de build**
|
||||||
|
```bash
|
||||||
|
# Nettoyer et rebuilder
|
||||||
|
docker-compose down
|
||||||
|
docker system prune -f
|
||||||
|
docker-compose build --no-cache ihm_client
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 Évolution
|
||||||
|
|
||||||
|
### Prochaines Étapes
|
||||||
|
|
||||||
|
1. **Intégration complète** dans 4NK_node
|
||||||
|
2. **Tests automatisés** d'intégration
|
||||||
|
3. **Monitoring avancé** avec métriques
|
||||||
|
4. **Interface d'administration** pour 4NK_node
|
||||||
|
5. **Documentation utilisateur** complète
|
||||||
|
|
||||||
|
### Améliorations Futures
|
||||||
|
|
||||||
|
- **Interface d'administration** pour gérer l'infrastructure
|
||||||
|
- **Dashboard de monitoring** en temps réel
|
||||||
|
- **Gestion des utilisateurs** et permissions
|
||||||
|
- **API REST** pour l'automatisation
|
||||||
|
- **Interface mobile** responsive
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Note** : Cette intégration est conçue pour être transparente et non intrusive dans l'infrastructure 4NK_node existante.
|
43
docker-compose.4nk-node.yml
Normal file
43
docker-compose.4nk-node.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ihm_client:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.4nk-node
|
||||||
|
container_name: 4nk-ihm-client
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
- "3003:3003"
|
||||||
|
environment:
|
||||||
|
- SDK_RELAY_WS_URL=ws://sdk_relay_1:8090
|
||||||
|
- SDK_RELAY_HTTP_URL=http://sdk_relay_1:8091
|
||||||
|
- BITCOIN_RPC_URL=http://bitcoin:18443
|
||||||
|
- BLINDBIT_URL=http://blindbit:8000
|
||||||
|
- NODE_ENV=production
|
||||||
|
volumes:
|
||||||
|
- ihm_client_logs:/var/log/nginx
|
||||||
|
- ihm_client_data:/usr/share/nginx/html/data
|
||||||
|
networks:
|
||||||
|
- btcnet
|
||||||
|
depends_on:
|
||||||
|
- sdk_relay_1
|
||||||
|
- sdk_relay_2
|
||||||
|
- sdk_relay_3
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "wget", "--quiet", "--tries=1", "--timeout=5", "--spider", "http://localhost"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 40s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
ihm_client_logs:
|
||||||
|
driver: local
|
||||||
|
ihm_client_data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
btcnet:
|
||||||
|
external: true
|
96
nginx.4nk-node.conf
Normal file
96
nginx.4nk-node.conf
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
# Gestion des fichiers statiques
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
|
||||||
|
# Headers de sécurité
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Proxy vers sdk_relay WebSocket
|
||||||
|
location /ws/ {
|
||||||
|
proxy_pass http://sdk_relay_1: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_read_timeout 86400;
|
||||||
|
proxy_send_timeout 86400;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Proxy vers sdk_relay HTTP API
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://sdk_relay_1: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;
|
||||||
|
|
||||||
|
# Gestion des requêtes OPTIONS
|
||||||
|
if ($request_method = 'OPTIONS') {
|
||||||
|
add_header Access-Control-Allow-Origin "*";
|
||||||
|
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE";
|
||||||
|
add_header Access-Control-Allow-Headers "Authorization,Content-Type,Accept,X-Requested-With";
|
||||||
|
add_header Content-Length 0;
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
return 204;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Proxy vers Bitcoin Core RPC (si nécessaire)
|
||||||
|
location /bitcoin/ {
|
||||||
|
proxy_pass http://bitcoin:18443/;
|
||||||
|
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;
|
||||||
|
|
||||||
|
# Authentification basique pour Bitcoin RPC
|
||||||
|
auth_basic "Bitcoin RPC";
|
||||||
|
auth_basic_user_file /etc/nginx/.htpasswd;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Proxy vers Blindbit (si nécessaire)
|
||||||
|
location /blindbit/ {
|
||||||
|
proxy_pass http://blindbit:8000/;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cache pour les assets statiques
|
||||||
|
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||||
|
expires 1y;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gestion des erreurs
|
||||||
|
error_page 404 /index.html;
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
access_log /var/log/nginx/ihm_client_access.log;
|
||||||
|
error_log /var/log/nginx/ihm_client_error.log;
|
||||||
|
}
|
348
scripts/integrate-4nk-node.sh
Executable file
348
scripts/integrate-4nk-node.sh
Executable file
@ -0,0 +1,348 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||||||
|
TARGET_DIR="${PROJECT_ROOT}/../4NK_node"
|
||||||
|
|
||||||
|
# Couleurs pour l'affichage
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Fonction d'affichage
|
||||||
|
print_info() {
|
||||||
|
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_success() {
|
||||||
|
echo -e "${GREEN}✅ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_warning() {
|
||||||
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_error() {
|
||||||
|
echo -e "${RED}❌ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction d'aide
|
||||||
|
show_help() {
|
||||||
|
echo "Usage: $0 [options]"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo " --target-dir DIR Répertoire cible 4NK_node (défaut: ../4NK_node)"
|
||||||
|
echo " --dry-run Simulation sans modification"
|
||||||
|
echo " --backup Créer une sauvegarde avant intégration"
|
||||||
|
echo " --help Afficher cette aide"
|
||||||
|
echo ""
|
||||||
|
echo "Exemples:"
|
||||||
|
echo " $0 # Intégration standard"
|
||||||
|
echo " $0 --dry-run # Simulation"
|
||||||
|
echo " $0 --target-dir /path/to/4NK_node"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
DRY_RUN=false
|
||||||
|
BACKUP=false
|
||||||
|
TARGET_DIR="${PROJECT_ROOT}/../4NK_node"
|
||||||
|
|
||||||
|
# Parsing des arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--target-dir)
|
||||||
|
TARGET_DIR="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--dry-run)
|
||||||
|
DRY_RUN=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--backup)
|
||||||
|
BACKUP=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
print_error "Option inconnue: $1"
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Vérification des prérequis
|
||||||
|
check_prerequisites() {
|
||||||
|
print_info "Vérification des prérequis..."
|
||||||
|
|
||||||
|
# Vérifier que nous sommes dans le bon répertoire
|
||||||
|
if [[ ! -f "${PROJECT_ROOT}/package.json" ]]; then
|
||||||
|
print_error "Ce script doit être exécuté depuis le répertoire ihm_client"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier que le répertoire cible existe
|
||||||
|
if [[ ! -d "$TARGET_DIR" ]]; then
|
||||||
|
print_error "Répertoire cible 4NK_node non trouvé: $TARGET_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier que les fichiers d'intégration existent
|
||||||
|
local required_files=(
|
||||||
|
"Dockerfile.4nk-node"
|
||||||
|
"nginx.4nk-node.conf"
|
||||||
|
"start-4nk-node.sh"
|
||||||
|
"docker-compose.4nk-node.yml"
|
||||||
|
)
|
||||||
|
|
||||||
|
for file in "${required_files[@]}"; do
|
||||||
|
if [[ ! -f "${PROJECT_ROOT}/$file" ]]; then
|
||||||
|
print_error "Fichier requis manquant: $file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
print_success "Prérequis vérifiés"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Création de la sauvegarde
|
||||||
|
create_backup() {
|
||||||
|
if [[ "$BACKUP" == "true" ]]; then
|
||||||
|
print_info "Création de la sauvegarde..."
|
||||||
|
|
||||||
|
local backup_dir="${TARGET_DIR}/backup_$(date +%Y%m%d_%H%M%S)"
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
mkdir -p "$backup_dir"
|
||||||
|
cp -r "${TARGET_DIR}/docker-compose.yml" "$backup_dir/" 2>/dev/null || true
|
||||||
|
cp -r "${TARGET_DIR}/ihm_client" "$backup_dir/" 2>/dev/null || true
|
||||||
|
print_success "Sauvegarde créée: $backup_dir"
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Sauvegarde serait créée: $backup_dir"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Création du répertoire ihm_client dans 4NK_node
|
||||||
|
create_ihm_client_directory() {
|
||||||
|
print_info "Création du répertoire ihm_client dans 4NK_node..."
|
||||||
|
|
||||||
|
local ihm_client_dir="${TARGET_DIR}/ihm_client"
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
mkdir -p "$ihm_client_dir"
|
||||||
|
print_success "Répertoire créé: $ihm_client_dir"
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Répertoire serait créé: $ihm_client_dir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copie des fichiers d'intégration
|
||||||
|
copy_integration_files() {
|
||||||
|
print_info "Copie des fichiers d'intégration..."
|
||||||
|
|
||||||
|
local files_to_copy=(
|
||||||
|
"Dockerfile.4nk-node:Dockerfile"
|
||||||
|
"nginx.4nk-node.conf:nginx.conf"
|
||||||
|
"start-4nk-node.sh:start.sh"
|
||||||
|
"package.json:package.json"
|
||||||
|
"tsconfig.json:tsconfig.json"
|
||||||
|
"vite.config.ts:vite.config.ts"
|
||||||
|
"index.html:index.html"
|
||||||
|
)
|
||||||
|
|
||||||
|
for file_mapping in "${files_to_copy[@]}"; do
|
||||||
|
local source_file=$(echo "$file_mapping" | cut -d: -f1)
|
||||||
|
local target_file=$(echo "$file_mapping" | cut -d: -f2)
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
cp "${PROJECT_ROOT}/$source_file" "${TARGET_DIR}/ihm_client/$target_file"
|
||||||
|
print_success "Copié: $source_file -> ihm_client/$target_file"
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Copié: $source_file -> ihm_client/$target_file"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copie du code source
|
||||||
|
copy_source_code() {
|
||||||
|
print_info "Copie du code source..."
|
||||||
|
|
||||||
|
local source_dirs=("src" "public")
|
||||||
|
|
||||||
|
for dir in "${source_dirs[@]}"; do
|
||||||
|
if [[ -d "${PROJECT_ROOT}/$dir" ]]; then
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
cp -r "${PROJECT_ROOT}/$dir" "${TARGET_DIR}/ihm_client/"
|
||||||
|
print_success "Copié: $dir/"
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Copié: $dir/"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Mise à jour du docker-compose.yml
|
||||||
|
update_docker_compose() {
|
||||||
|
print_info "Mise à jour du docker-compose.yml..."
|
||||||
|
|
||||||
|
local docker_compose_file="${TARGET_DIR}/docker-compose.yml"
|
||||||
|
local ihm_client_service="
|
||||||
|
ihm_client:
|
||||||
|
build:
|
||||||
|
context: ./ihm_client
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: 4nk-ihm-client
|
||||||
|
ports:
|
||||||
|
- \"8080:80\"
|
||||||
|
environment:
|
||||||
|
- SDK_RELAY_WS_URL=ws://sdk_relay_1:8090
|
||||||
|
- SDK_RELAY_HTTP_URL=http://sdk_relay_1:8091
|
||||||
|
- BITCOIN_RPC_URL=http://bitcoin:18443
|
||||||
|
- BLINDBIT_URL=http://blindbit:8000
|
||||||
|
volumes:
|
||||||
|
- ihm_client_logs:/var/log/nginx
|
||||||
|
networks:
|
||||||
|
- btcnet
|
||||||
|
depends_on:
|
||||||
|
- sdk_relay_1
|
||||||
|
- sdk_relay_2
|
||||||
|
- sdk_relay_3
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--timeout=5\", \"--spider\", \"http://localhost\"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 40s"
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
# Vérifier si le service existe déjà
|
||||||
|
if grep -q "ihm_client:" "$docker_compose_file" 2>/dev/null; then
|
||||||
|
print_warning "Service ihm_client existe déjà dans docker-compose.yml"
|
||||||
|
else
|
||||||
|
# Ajouter le service avant la section volumes
|
||||||
|
sed -i '/^volumes:/i\'"$ihm_client_service" "$docker_compose_file"
|
||||||
|
|
||||||
|
# Ajouter les volumes ihm_client
|
||||||
|
sed -i '/^volumes:/a\ ihm_client_logs:\n driver: local' "$docker_compose_file"
|
||||||
|
|
||||||
|
print_success "Service ihm_client ajouté au docker-compose.yml"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Service ihm_client serait ajouté au docker-compose.yml"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Création du script de démarrage
|
||||||
|
create_startup_script() {
|
||||||
|
print_info "Création du script de démarrage..."
|
||||||
|
|
||||||
|
local startup_script="${TARGET_DIR}/start-ihm-client.sh"
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
cat > "$startup_script" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 Démarrage de l'interface utilisateur 4NK..."
|
||||||
|
|
||||||
|
# Vérifier que nous sommes dans le bon répertoire
|
||||||
|
if [[ ! -f "docker-compose.yml" ]]; then
|
||||||
|
echo "❌ Ce script doit être exécuté depuis le répertoire 4NK_node"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Démarrer uniquement le service ihm_client
|
||||||
|
echo "📦 Démarrage du service ihm_client..."
|
||||||
|
docker-compose up -d ihm_client
|
||||||
|
|
||||||
|
# Attendre que le service soit prêt
|
||||||
|
echo "⏳ Attente du démarrage..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Vérifier la santé du service
|
||||||
|
if docker-compose ps ihm_client | grep -q "Up"; then
|
||||||
|
echo "✅ Interface utilisateur démarrée avec succès"
|
||||||
|
echo " 📍 URL: http://localhost:8080"
|
||||||
|
echo " 🔍 Logs: docker logs 4nk-ihm-client"
|
||||||
|
else
|
||||||
|
echo "❌ Échec du démarrage de l'interface utilisateur"
|
||||||
|
docker-compose logs ihm_client
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$startup_script"
|
||||||
|
print_success "Script de démarrage créé: $startup_script"
|
||||||
|
else
|
||||||
|
print_info "DRY RUN: Script de démarrage serait créé: $startup_script"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validation de l'intégration
|
||||||
|
validate_integration() {
|
||||||
|
print_info "Validation de l'intégration..."
|
||||||
|
|
||||||
|
local validation_files=(
|
||||||
|
"${TARGET_DIR}/ihm_client/Dockerfile"
|
||||||
|
"${TARGET_DIR}/ihm_client/nginx.conf"
|
||||||
|
"${TARGET_DIR}/ihm_client/start.sh"
|
||||||
|
"${TARGET_DIR}/docker-compose.yml"
|
||||||
|
)
|
||||||
|
|
||||||
|
for file in "${validation_files[@]}"; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
print_success "Validé: $(basename "$file")"
|
||||||
|
else
|
||||||
|
print_error "Fichier manquant: $(basename "$file")"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
print_success "Validation terminée"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction principale
|
||||||
|
main() {
|
||||||
|
echo "🔧 Intégration de ihm_client dans 4NK_node"
|
||||||
|
echo " Source: $PROJECT_ROOT"
|
||||||
|
echo " Cible: $TARGET_DIR"
|
||||||
|
echo " Mode: $([ "$DRY_RUN" == "true" ] && echo "DRY RUN" || echo "EXÉCUTION")"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
check_prerequisites
|
||||||
|
create_backup
|
||||||
|
create_ihm_client_directory
|
||||||
|
copy_integration_files
|
||||||
|
copy_source_code
|
||||||
|
update_docker_compose
|
||||||
|
create_startup_script
|
||||||
|
|
||||||
|
if [[ "$DRY_RUN" == "false" ]]; then
|
||||||
|
validate_integration
|
||||||
|
echo ""
|
||||||
|
print_success "Intégration terminée avec succès !"
|
||||||
|
echo ""
|
||||||
|
echo "📋 Prochaines étapes:"
|
||||||
|
echo " 1. Aller dans le répertoire 4NK_node: cd $TARGET_DIR"
|
||||||
|
echo " 2. Démarrer l'interface: ./start-ihm-client.sh"
|
||||||
|
echo " 3. Ou redémarrer tout: ./restart_4nk_node.sh"
|
||||||
|
echo " 4. Accéder à l'interface: http://localhost:8080"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
print_success "Simulation terminée - Aucune modification effectuée"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Exécution
|
||||||
|
main "$@"
|
124
start-4nk-node.sh
Normal file
124
start-4nk-node.sh
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 Démarrage de l'interface utilisateur 4NK..."
|
||||||
|
|
||||||
|
# Variables d'environnement avec valeurs par défaut
|
||||||
|
SDK_RELAY_WS_URL=${SDK_RELAY_WS_URL:-"ws://sdk_relay_1:8090"}
|
||||||
|
SDK_RELAY_HTTP_URL=${SDK_RELAY_HTTP_URL:-"http://sdk_relay_1:8091"}
|
||||||
|
BITCOIN_RPC_URL=${BITCOIN_RPC_URL:-"http://bitcoin:18443"}
|
||||||
|
BLINDBIT_URL=${BLINDBIT_URL:-"http://blindbit:8000"}
|
||||||
|
|
||||||
|
# Fonction pour attendre qu'un service soit disponible
|
||||||
|
wait_for_service() {
|
||||||
|
local service_name=$1
|
||||||
|
local service_url=$2
|
||||||
|
local max_attempts=30
|
||||||
|
local attempt=1
|
||||||
|
|
||||||
|
echo "⏳ Attente du service $service_name ($service_url)..."
|
||||||
|
|
||||||
|
while [ $attempt -le $max_attempts ]; do
|
||||||
|
if wget --quiet --tries=1 --timeout=5 --spider "$service_url" 2>/dev/null; then
|
||||||
|
echo "✅ Service $service_name disponible"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Tentative $attempt/$max_attempts - Service $service_name non disponible"
|
||||||
|
sleep 2
|
||||||
|
attempt=$((attempt + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "❌ Service $service_name non disponible après $max_attempts tentatives"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fonction pour vérifier la connectivité WebSocket
|
||||||
|
check_websocket() {
|
||||||
|
local service_name=$1
|
||||||
|
local ws_url=$2
|
||||||
|
local max_attempts=10
|
||||||
|
local attempt=1
|
||||||
|
|
||||||
|
echo "🔌 Vérification WebSocket $service_name ($ws_url)..."
|
||||||
|
|
||||||
|
while [ $attempt -le $max_attempts ]; do
|
||||||
|
if nc -z $(echo $ws_url | sed 's|ws://||' | sed 's|wss://||' | cut -d: -f1) $(echo $ws_url | cut -d: -f3) 2>/dev/null; then
|
||||||
|
echo "✅ WebSocket $service_name accessible"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Tentative $attempt/$max_attempts - WebSocket $service_name non accessible"
|
||||||
|
sleep 3
|
||||||
|
attempt=$((attempt + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "⚠️ WebSocket $service_name non accessible (continuera sans)"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Vérification des services critiques
|
||||||
|
echo "🔍 Vérification des services 4NK_node..."
|
||||||
|
|
||||||
|
# Attendre sdk_relay HTTP (critique)
|
||||||
|
if ! wait_for_service "sdk_relay HTTP" "$SDK_RELAY_HTTP_URL/health"; then
|
||||||
|
echo "❌ Service sdk_relay HTTP critique non disponible"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier sdk_relay WebSocket (optionnel)
|
||||||
|
check_websocket "sdk_relay WebSocket" "$SDK_RELAY_WS_URL"
|
||||||
|
|
||||||
|
# Vérifier Bitcoin Core (optionnel)
|
||||||
|
if ! wait_for_service "Bitcoin Core" "$BITCOIN_RPC_URL" 2>/dev/null; then
|
||||||
|
echo "⚠️ Bitcoin Core non disponible (optionnel)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifier Blindbit (optionnel)
|
||||||
|
if ! wait_for_service "Blindbit" "$BLINDBIT_URL" 2>/dev/null; then
|
||||||
|
echo "⚠️ Blindbit non disponible (optionnel)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Génération de la configuration dynamique
|
||||||
|
echo "⚙️ Génération de la configuration dynamique..."
|
||||||
|
|
||||||
|
# Créer un fichier de configuration JavaScript pour l'application
|
||||||
|
cat > /usr/share/nginx/html/config.js << EOF
|
||||||
|
window.ENV_CONFIG = {
|
||||||
|
SDK_RELAY_WS_URL: '$SDK_RELAY_WS_URL',
|
||||||
|
SDK_RELAY_HTTP_URL: '$SDK_RELAY_HTTP_URL',
|
||||||
|
BITCOIN_RPC_URL: '$BITCOIN_RPC_URL',
|
||||||
|
BLINDBIT_URL: '$BLINDBIT_URL',
|
||||||
|
ENVIRONMENT: '4nk-node'
|
||||||
|
};
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Démarrage de nginx
|
||||||
|
echo "🌐 Démarrage de nginx..."
|
||||||
|
nginx -g "daemon off;" &
|
||||||
|
|
||||||
|
# Attendre que nginx soit prêt
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Vérifier que nginx fonctionne
|
||||||
|
if ! wget --quiet --tries=1 --timeout=5 --spider http://localhost 2>/dev/null; then
|
||||||
|
echo "❌ Nginx n'a pas démarré correctement"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Interface utilisateur 4NK démarrée avec succès"
|
||||||
|
echo " 📍 URL: http://localhost"
|
||||||
|
echo " 🔌 WebSocket: $SDK_RELAY_WS_URL"
|
||||||
|
echo " 🌐 API: $SDK_RELAY_HTTP_URL"
|
||||||
|
|
||||||
|
# Maintenir le conteneur en vie
|
||||||
|
while true; do
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
# Vérification périodique de la santé
|
||||||
|
if ! wget --quiet --tries=1 --timeout=5 --spider http://localhost 2>/dev/null; then
|
||||||
|
echo "❌ Nginx ne répond plus, redémarrage..."
|
||||||
|
nginx -s reload
|
||||||
|
fi
|
||||||
|
done
|
Loading…
x
Reference in New Issue
Block a user