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

243 lines
6.4 KiB
Markdown

# Système de Templates 4NK Vault
## 🎯 Vue d'ensemble
Le répertoire `templates/` contient tous les fichiers sources avec variables d'environnement qui sont utilisés pour générer automatiquement les configurations finales dans `storage/`.
## 📁 Structure
```
templates/
├── dev/ # Templates pour l'environnement de développement
│ ├── generate.sh # Script principal d'orchestration
│ ├── generate_variables.sh # Génération des variables d'environnement
│ ├── generate_grafana_dashboards.sh # Génération des dashboards Grafana
│ ├── generate_promtail_config.sh # Génération de la config Promtail
│ ├── generate_logrotate_configs.sh # Génération des configs logrotate
│ ├── generate_nginx_configs.sh # Génération des configs nginx
│ ├── replace_variables_and_copy.sh # Résolution des variables + copie
│ ├── .env.secrets # Variables sensibles
│ ├── .env # Variables principales
│ ├── .env.post # Variables finales/composites
│ ├── _4NK_modules/ # Modules avec configurations
│ ├── 4NK_modules/ # Modules générés (Grafana, Promtail)
│ ├── logrotade/ # Configurations logrotate
│ └── nginx/ # Configurations nginx
└── prod/ # Templates pour l'environnement de production
```
## 🚀 Utilisation Rapide
### Génération Complète
```bash
# Générer toutes les configurations
cd templates/dev
./generate.sh
```
### Génération Étape par Étape
```bash
# 1. Générer les variables d'environnement
./generate_variables.sh
# 2. Générer les dashboards Grafana
./generate_grafana_dashboards.sh
# 3. Générer la configuration Promtail
./generate_promtail_config.sh
# 4. Générer les configurations logrotate
./generate_logrotate_configs.sh
# 5. Générer les configurations nginx
./generate_nginx_configs.sh
# 6. Résoudre les variables et copier vers storage/
./replace_variables_and_copy.sh
```
## 🔧 Configuration
### Variables d'Environnement
#### `.env.secrets`
Variables sensibles (ne sont jamais copiées dans storage/)
```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
```
### Templates de Fichiers
Les fichiers dans les sous-répertoires utilisent la syntaxe de variables :
- `$VARIABLE` - Variable simple
- `${VARIABLE}` - Variable avec accolades
- `$VARIABLE_SUFFIX` - Variable avec suffixe
**Exemple :**
```bash
# Dans bitcoin.conf
datadir=$BITCOIN_DATAS_DIR
rpcuser=$BITCOIN_RPC_USER
rpcpassword=$BITCOIN_RPC_PASSWORD
```
## 📋 Scripts Disponibles
### `generate.sh`
Script principal qui orchestre tous les autres scripts.
**Fonctionnalités :**
- Exécution séquentielle de tous les scripts de génération
- Gestion des erreurs et rollback
- Logs détaillés du processus
- Validation des prérequis
### `generate_variables.sh`
Génère les variables d'environnement et le fichier Docker Compose.
**Génère :**
- `.env.auto` - Variables générées avec références
- `docker-compose.yml.auto` - Docker Compose avec variables
### `generate_grafana_dashboards.sh`
Génère automatiquement les dashboards Grafana.
**Types de dashboards :**
- Services Overview
- Bitcoin Services
- Frontend Services
- SDK Services
### `generate_promtail_config.sh`
Génère la configuration Promtail pour la collecte de logs.
### `generate_logrotate_configs.sh`
Génère les configurations logrotate pour tous les services.
### `generate_nginx_configs.sh`
Génère les configurations nginx (upstreams, HTTPS, etc.).
### `replace_variables_and_copy.sh`
Résout toutes les variables et copie les fichiers vers `storage/`.
**Fonctionnalités :**
- Chargement séquentiel des fichiers `.env`
- Résolution multi-passes (jusqu'à 5 passes)
- Copie sélective (exclusion des fichiers sensibles)
- Validation des variables résolues
## 🔒 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
### 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 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>/` après génération.
### Avec CI/CD
Les scripts de génération peuvent être intégrés dans des pipelines CI/CD pour automatiser le déploiement.
## 📚 Documentation
- **`docs/templates-system.md`** - Documentation complète du système
- **`../README.md`** - Documentation principale du projet
- **`../CHANGELOG.md`** - Historique des modifications