4NK_vault/docs/templates-system.md
4NK Dev 5ff468bc84 feat: Système de templates automatisé v2.0.0
- Introduction du système de templates avec séparation templates/storage
- Scripts de génération automatisée pour toutes les configurations
- Résolution multi-passes des variables imbriquées
- API simplifiée qui lit uniquement storage/ (plus de traitement de variables)
- Documentation complète du nouveau système
- Support des services externes (BOOTSTRAP, LECOFFRE_BACK_MINI)
- Protection des templates sources et isolation des environnements
2025-10-05 13:53:38 +00:00

304 lines
8.2 KiB
Markdown

# Système de Templates et Génération Automatisée
## 🎯 Vue d'ensemble
Le système de templates de 4NK Vault permet de générer automatiquement toutes les configurations nécessaires à partir de templates sources avec variables d'environnement. Cette approche garantit la cohérence, la maintenabilité et la sécurité des configurations.
## 🏗️ Architecture du Système
### Workflow de Génération
```
templates/<env>/ → Génération → storage/<env>/
├── .env.secrets → Scripts → ├── .env.auto
├── .env → de génération → ├── docker-compose.yml.auto
├── .env.post → → ├── _4NK_modules/
├── _4NK_modules/ → → ├── 4NK_modules/
├── 4NK_modules/ → → ├── logrotade/
└── nginx/ → → └── nginx/
```
### Séparation des Responsabilités
- **`templates/`** : Fichiers sources avec variables (`$VARIABLE`)
- **`storage/`** : Fichiers finaux avec variables résolues (lecture seule par API)
- **Scripts de génération** : Orchestrent la création et la résolution des variables
## 📋 Scripts de Génération
### 1. Script Principal : `generate.sh`
Orchestrateur principal qui exécute tous les scripts de génération dans l'ordre correct.
```bash
cd templates/dev
./generate.sh
```
**Étapes d'exécution :**
1. Génération des variables d'environnement
2. Génération des dashboards Grafana
3. Génération de la configuration Promtail
4. Génération des configurations logrotate
5. Génération des configurations nginx
6. Résolution des variables et copie vers storage/
### 2. Génération des Variables : `generate_variables.sh`
Génère les variables d'environnement et le fichier Docker Compose à partir des services définis.
**Fonctionnalités :**
- Génération des variables internes pour chaque service
- Génération des variables externes (URLs, ports)
- Création du fichier `docker-compose.yml.auto`
- Support des services externes (BOOTSTRAP, LECOFFRE_BACK_MINI)
**Variables générées par service :**
```bash
${SERVICE}_DOCKER_NAME=$SERVICE
${SERVICE}_CONFS_DIR=$DOCKER_GLOBAL/confs/$SERVICE
${SERVICE}_LOGS_DIR=$DOCKER_GLOBAL/logs/$SERVICE
${SERVICE}_DATAS_DIR=$DOCKER_GLOBAL/datas/$SERVICE
${SERVICE}_URL_ROUTE=/$SERVICE
${SERVICE}_URL=http://$SERVICE_DOCKER_NAME:$SERVICE_DOCKER_PORT
${SERVICE}_URL_EXTERNAL=https://$HOST$SERVICE_URL_ROUTE
```
### 3. Génération Grafana : `generate_grafana_dashboards.sh`
Génère automatiquement les dashboards Grafana pour tous les services.
**Types de dashboards :**
- **Services Overview** : Vue d'ensemble de tous les services
- **Bitcoin Services** : Dashboards spécialisés Bitcoin
- **Frontend Services** : Dashboards pour les interfaces utilisateur
- **SDK Services** : Dashboards pour les services SDK
### 4. Génération Promtail : `generate_promtail_config.sh`
Génère la configuration Promtail pour la collecte de logs.
**Fonctionnalités :**
- Configuration automatique des jobs de collecte
- Support des logs Docker et fichiers locaux
- Variables dynamiques pour les chemins de logs
### 5. Génération Logrotate : `generate_logrotate_configs.sh`
Génère les configurations logrotate pour tous les services.
**Fonctionnalités :**
- Rotation automatique des logs
- Compression et archivage
- Redémarrage des services après rotation
### 6. Génération Nginx : `generate_nginx_configs.sh`
Génère les configurations nginx pour tous les services.
**Types de configurations :**
- Upstreams pour les services
- Configurations HTTPS
- Headers proxy
- Ports internes
### 7. Résolution des Variables : `replace_variables_and_copy.sh`
**Fonctionnalités principales :**
- Chargement séquentiel des fichiers `.env`
- Résolution multi-passes des variables imbriquées
- Copie des fichiers traités vers `storage/`
**Ordre de chargement :**
1. `.env.secrets` - Variables sensibles
2. `.env` - Variables principales
3. `.env.auto` - Variables générées (avec résolution)
4. `.env.post` - Variables finales (avec résolution)
**Résolution multi-passes :**
- Jusqu'à 5 passes pour résoudre les variables imbriquées
- Protection contre les dépendances circulaires
- Export explicite de toutes les variables
## 🔧 Configuration des Variables
### Structure des Fichiers d'Environnement
#### `.env.secrets`
Variables sensibles (clés API, mots de passe, etc.)
```bash
# Variables sensibles
API_SECRET_KEY=secret_value
DATABASE_PASSWORD=password
```
#### `.env`
Variables principales du système
```bash
# Configuration de base
ROOT_DIR=/home/debian/_4NK_env
DOMAIN=_4NKweb.com
HOST=dev4.$DOMAIN
# Services
export SERVICES=(
"REDIS"
"POSTGRESQL"
"BITCOIN"
# ...
)
# Services externes
export SERVICES_EXTERNAL=(
"BOOTSTRAP"
"LECOFFRE_BACK_MINI"
)
```
#### `.env.post`
Variables composites et finales
```bash
# URLs composites
SDK_RELAY_BOOSTRAP_URL=$BOOTSTRAP_URL_WS_EXTERNAL
RELAY_URLS=$SDK_RELAY_URL,$SDK_RELAY_BOOSTRAP_URL
BITCOIN_RPC_URL=http://$BITCOIN_DOCKER_NAME:$BITCOIN_SIGNET_RPC_PORT
```
### Résolution des Variables
#### Exemple de Résolution Complexe
**Variables de base :**
```bash
ROOT_DIR=/home/debian/_4NK_env
DOCKER_GLOBAL_NAME=projects/lecoffre/lecoffre_node
BITCOIN=bitcoin
```
**Variables intermédiaires :**
```bash
DOCKER_GLOBAL=$ROOT_DIR/$DOCKER_GLOBAL_NAME
```
**Variables finales :**
```bash
BITCOIN_DATAS_DIR=$DOCKER_GLOBAL/datas/$BITCOIN
```
**Résultat final :**
```bash
BITCOIN_DATAS_DIR=/home/debian/_4NK_env/projects/lecoffre/lecoffre_node/datas/bitcoin
```
## 🚀 Utilisation
### Génération Complète
```bash
# Générer toutes les configurations
cd templates/dev
./generate.sh
```
### Génération Partielle
```bash
# Générer seulement les variables
./generate_variables.sh
# Générer seulement les dashboards Grafana
./generate_grafana_dashboards.sh
# Résoudre les variables et copier
./replace_variables_and_copy.sh
```
### Vérification
```bash
# Vérifier les variables résolues
cd storage/dev
grep "datadir" _4NK_modules/bitcoin/bitcoin.conf
# Résultat: datadir=/home/debian/_4NK_env/projects/lecoffre/lecoffre_node/datas/bitcoin
# Vérifier les URLs externes
grep "BOOTSTRAP_URL_WS_EXTERNAL" .env.auto
# Résultat: BOOTSTRAP_URL_WS_EXTERNAL=wss://dev3._4NKweb.com:3006/ws
```
## 🔒 Sécurité
### Protection des Templates
- Les fichiers dans `templates/` ne sont jamais modifiés par l'API
- Seuls les fichiers dans `storage/` sont accessibles via l'API
- Les fichiers `.env.secrets` ne sont jamais copiés dans `storage/`
### Isolation des Environnements
- Chaque environnement (`dev`, `prod`) a ses propres templates
- Variables d'environnement isolées par environnement
- Pas de fuite de données entre environnements
## 🛠️ Maintenance
### Ajout d'un Nouveau Service
1. **Ajouter le service dans `.env` :**
```bash
export SERVICES=(
"REDIS"
"POSTGRESQL"
"NOUVEAU_SERVICE" # Ajouter ici
# ...
)
```
2. **Définir les variables du service :**
```bash
NOUVEAU_SERVICE=nouveau_service
NOUVEAU_SERVICE_IMAGE=image:tag
NOUVEAU_SERVICE_PORT=8080:8080
```
3. **Régénérer les configurations :**
```bash
cd templates/dev
./generate.sh
```
### Modification des Variables
1. **Modifier les fichiers appropriés** dans `templates/dev/`
2. **Régénérer les configurations :**
```bash
cd templates/dev
./generate.sh
```
3. **Vérifier les résultats** dans `storage/dev/`
## 📊 Monitoring
### Logs de Génération
Les scripts de génération fournissent des logs détaillés :
- Nombre de variables chargées
- Fichiers traités et copiés
- Erreurs de résolution des variables
### Validation
- Vérification automatique des variables non résolues
- Protection contre les dépendances circulaires
- Validation des chemins et permissions
## 🔄 Intégration avec l'API
L'API 4NK Vault lit uniquement les fichiers dans `storage/<env>/` et ne traite plus les variables d'environnement. Cette séparation garantit :
- **Performance** : Pas de traitement de variables en temps réel
- **Fiabilité** : Variables pré-résolues et validées
- **Sécurité** : Isolation entre templates et fichiers finaux
- **Maintenabilité** : Workflow de génération automatisé et reproductible