
Séparation des scripts de génération et amélioration de l'architecture - Séparé generate_grafana_dashboards.sh en 3 scripts distincts : * generate_grafana_dashboards.sh (dashboards uniquement) * generate_promtail_config.sh (configuration Promtail) * generate_logrotate_configs.sh (configurations Logrotate) - Supprimé generate_docker_compose.sh et generate_docker_variables.sh - Centralisé la génération des variables dans generate_variables.sh - Mis à jour generate.sh pour une architecture en 5 étapes - Corrigé les chemins de sortie et les références de variables - Ajouté la gestion d'erreurs pour les fichiers .env problématiques - Généré toutes les configurations Nginx, Grafana, Promtail et Logrotate - Amélioré la modularité et la maintenabilité du code
234 lines
9.2 KiB
Markdown
234 lines
9.2 KiB
Markdown
# _4NK Vault - Générateur de Configurations
|
|
|
|
Ce répertoire contient les scripts de génération automatique des configurations pour l'écosystème _4NK Vault.
|
|
|
|
## 🚀 Script Principal
|
|
|
|
### `generate.sh`
|
|
Script principal qui orchestre la génération de toutes les configurations nécessaires.
|
|
|
|
**Scripts exécutés dans l'ordre :**
|
|
1. `generate_docker_variables.sh` - Génère `.env.auto` avec les variables Docker
|
|
2. `generate_docker_compose.sh` - Génère `docker-compose.yml.auto`
|
|
3. `generate_grafana_dashboards.sh` - Génère les dashboards Grafana et config Promtail
|
|
4. `generate_nginx_configs.sh` - Génère les configurations Nginx
|
|
|
|
## 📋 Scripts Individuels
|
|
|
|
### 1. Génération des Variables Docker
|
|
**`generate_docker_variables.sh`**
|
|
- Génère le fichier `.env.auto` avec toutes les variables Docker calculées
|
|
- Variables globales : `DOCKER_GLOBAL_NAME`, `DOCKER_NETWORK_NAME`, `DOCKER_VOLUME_PREFIX`
|
|
- Variables par service : `{SERVICE}_DOCKER_NAME`, `{SERVICE}_DOCKER_IMAGE`, etc.
|
|
|
|
### 2. Génération du Docker Compose
|
|
**`generate_docker_compose.sh`**
|
|
- Génère le fichier `docker-compose.yml.auto` basé sur les services définis
|
|
- Configuration complète : services, réseaux, volumes
|
|
- Ports et variables d'environnement par service
|
|
|
|
### 3. Génération des Dashboards Grafana
|
|
**`generate_grafana_dashboards.sh`**
|
|
- Génère les dashboards Grafana pour tous les services
|
|
- Configuration Promtail pour la collecte de logs
|
|
- Configurations logrotate pour la gestion des logs
|
|
- Dashboard overview avec vue d'ensemble
|
|
|
|
### 4. Génération des Configurations Nginx
|
|
**`generate_nginx_configs.sh`**
|
|
- Génère `nginx/upstreams.conf` avec les upstreams et format de log JSON
|
|
- Génère `nginx/app-internal-ports.conf` pour le proxy interne
|
|
- Génère `nginx/proxy_headers.conf` avec les headers de proxy
|
|
- Génère `nginx/{SERVICE}_https.conf` avec les vhosts HTTPS individuels
|
|
- Génère `nginx/nginx_{HOST}-https.conf` avec la configuration HTTPS consolidée
|
|
- Génère `nginx/validate_templates.sh` pour la validation
|
|
|
|
## 🔧 Utilisation
|
|
|
|
### Prérequis
|
|
```bash
|
|
# Variables d'environnement requises dans .env
|
|
export HOST="dev4._4NKweb.com"
|
|
export SERVICES=(REDIS POSTGRESQL LOKI PROMTAIL GRAFANA NGNIX TOR _4NK_VAULT BITCOIN BLINDBIT_ORACLE SDK_RELAY SDK_STORAGE IHM_CLIENT _4NK_CERTIFICATOR _4NK_MINER LECOFFRE_FRONT _4NK_WEB_STATUS)
|
|
```
|
|
|
|
### Exécution
|
|
```bash
|
|
# Charger les variables d'environnement
|
|
source .env
|
|
|
|
# Exécuter la génération complète
|
|
./generate.sh
|
|
|
|
# Ou exécuter un script individuel
|
|
./generate_docker_variables.sh
|
|
./generate_docker_compose.sh
|
|
./generate_grafana_dashboards.sh
|
|
./generate_nginx_configs.sh
|
|
```
|
|
|
|
## 📁 Structure des Fichiers Générés
|
|
|
|
```
|
|
storage/dev/
|
|
├── .env.auto # Variables Docker calculées
|
|
├── docker-compose.yml.auto # Configuration Docker Compose
|
|
├── _4NK_modules/
|
|
│ ├── grafana/dashboards/ # Dashboards Grafana (.json)
|
|
│ └── promtail/promtail.yml # Configuration Promtail
|
|
├── nginx/
|
|
│ ├── upstreams.conf # Upstreams et format de log
|
|
│ ├── app-internal-ports.conf # Proxy interne
|
|
│ ├── proxy_headers.conf # Headers de proxy
|
|
│ ├── {SERVICE}_https.conf # Configurations HTTPS individuelles
|
|
│ ├── nginx_{HOST}-https.conf # Configuration HTTPS consolidée
|
|
│ └── validate_templates.sh # Validation des templates
|
|
└── logrotade/ # Configurations logrotate (.conf)
|
|
```
|
|
|
|
## 🛡️ Politique de Déploiement
|
|
|
|
### Principes de Sécurité
|
|
1. **Chiffrement des Flux** : Toutes les communications utilisent HTTPS avec TLS 1.2+
|
|
2. **Authentification** : Authentification par clé utilisateur (`X-User-ID`)
|
|
3. **Rotation des Clés** : Rotation automatique des clés de chiffrement
|
|
4. **Isolation des Services** : Chaque service dans son propre réseau Docker
|
|
5. **Logs Sécurisés** : Collecte centralisée avec format JSON structuré
|
|
|
|
### 🚀 Politique NGINX
|
|
|
|
#### Configuration des Templates
|
|
- **Proxy Redirect Off** : Les applications gèrent leurs propres URLs
|
|
- **Headers de Debug** : `X-Debug-Scheme` et `X-Debug-XFP` pour le débogage
|
|
- **HSTS** : Strict-Transport-Security activé pour forcer HTTPS
|
|
- **WebSocket Support** : Support natif des WebSockets avec upgrade HTTP/1.1
|
|
- **Logs JSON** : Format structuré pour l'analyse des logs
|
|
|
|
#### Architecture des Templates
|
|
```
|
|
nginx/
|
|
├── upstreams.conf # Upstreams et format de log JSON
|
|
├── app-internal-ports.conf # Proxy interne (ports dédiés)
|
|
├── proxy_headers.conf # Headers de proxy communs
|
|
├── {SERVICE}_https.conf # Configurations HTTPS individuelles
|
|
├── nginx_{HOST}-https.conf # Configuration HTTPS consolidée
|
|
└── validate_templates.sh # Validation des templates générés
|
|
```
|
|
|
|
#### Directives Proxy Standardisées
|
|
```nginx
|
|
# Dans proxy_headers.conf
|
|
proxy_redirect off; # Les apps gèrent leurs URLs
|
|
add_header X-Debug-Scheme $scheme always;
|
|
add_header X-Debug-XFP $http_x_forwarded_proto always;
|
|
|
|
# Headers de base
|
|
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;
|
|
```
|
|
|
|
#### Gestion des Upstreams
|
|
- **Keepalive** : 64 connexions persistantes par upstream
|
|
- **Load Balancing** : Répartition automatique des requêtes
|
|
- **Health Checks** : Vérification automatique de la disponibilité
|
|
|
|
#### Configuration HTTPS
|
|
- **TLS 1.2+** : Protocoles sécurisés uniquement
|
|
- **Certificats Dynamiques** : Chemins configurables via variables
|
|
- **Redirection HTTP→HTTPS** : Redirection automatique du port 80 vers 443
|
|
- **HSTS** : Headers de sécurité stricts pour forcer HTTPS
|
|
|
|
#### Support WebSocket
|
|
```nginx
|
|
location /ws/ {
|
|
proxy_pass http://$upstream;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_read_timeout 3600s;
|
|
}
|
|
```
|
|
|
|
#### Format de Logs JSON
|
|
```nginx
|
|
log_format app_json escape=json
|
|
'{ "time":"$time_iso8601",'
|
|
' "client":"$remote_addr",'
|
|
' "xff":"$http_x_forwarded_for",'
|
|
' "method":"$request_method",'
|
|
' "host":"$host",'
|
|
' "uri":"$request_uri",'
|
|
' "status":$status,'
|
|
' "bytes":$body_bytes_sent,'
|
|
' "ua":"$http_user_agent",'
|
|
' "upstream":"$upstream_addr",'
|
|
' "rt":$request_time,'
|
|
' "urt":$upstream_response_time }';
|
|
```
|
|
|
|
### Gestion des Variables
|
|
1. **Ordre de Chargement** : `.env.secrets` → `.env` → `.env.auto` → `.env.post`
|
|
2. **Résolution Récursive** : Support des variables imbriquées (`$VAR`, `${VAR}`)
|
|
3. **Protection** : Les fichiers `.env` et `.env.secrets` ne sont jamais modifiés
|
|
4. **Remplacement** : Les fichiers de sortie sont toujours remplacés complètement
|
|
|
|
### Monitoring et Observabilité
|
|
- **Dashboards Grafana** : Vue d'ensemble et métriques par service
|
|
- **Collecte de Logs** : Promtail + Loki pour l'agrégation des logs
|
|
- **Rotation des Logs** : Configuration logrotate automatique
|
|
- **Métriques Docker** : Monitoring des containers et ressources
|
|
|
|
### Génération de Templates
|
|
- **Templates Automatiques** : Génération automatique de tous les templates
|
|
- **Docker Compose** : Template d'orchestration des services avec volumes persistants
|
|
- **Réseaux Isolés** : Configuration de réseaux Docker par environnement
|
|
- **Volumes Nommés** : Configuration de persistance des données avec volumes nommés
|
|
- **Validation** : Script de validation des templates générés
|
|
|
|
## 🔍 Dépannage
|
|
|
|
### Erreurs Communes
|
|
1. **Variable SERVICES non définie** : Vérifiez que `SERVICES` est défini dans `.env`
|
|
2. **Variable HOST non définie** : Utilise la valeur par défaut `dev4._4NKweb.com`
|
|
3. **Fichiers manquants** : Vérifiez que tous les scripts sont présents et exécutables
|
|
|
|
### Logs et Debug
|
|
- Les scripts affichent des messages détaillés en mode verbeux
|
|
- Les configurations Nginx incluent des headers de debug
|
|
- Les logs sont collectés au format JSON pour l'analyse
|
|
|
|
## 📚 Documentation des Scripts
|
|
|
|
Chaque script inclut :
|
|
- Documentation complète en en-tête
|
|
- Messages d'erreur explicites
|
|
- Validation des prérequis
|
|
- Gestion des erreurs robuste
|
|
- Support des options d'aide (`--help`)
|
|
|
|
## 🔄 Maintenance
|
|
|
|
### Mise à Jour des Configurations
|
|
Les scripts sont conçus pour être **idempotents** :
|
|
- Les fichiers de sortie sont toujours remplacés complètement
|
|
- Aucune modification des fichiers sources (`.env`, `.env.secrets`)
|
|
- Régénération possible à tout moment sans conflit
|
|
|
|
### Ajout de Nouveaux Services
|
|
1. Ajouter le service à la variable `SERVICES` dans `.env`
|
|
2. Définir les variables spécifiques au service (ports, base de données, etc.)
|
|
3. Relancer `./generate.sh` pour régénérer toutes les configurations
|
|
|
|
### Utilisation des Templates
|
|
Les templates générés sont prêts à être utilisés dans votre infrastructure :
|
|
|
|
1. **Validation** : Utilisez `nginx/validate_templates.sh` pour vérifier la cohérence
|
|
2. **Adaptation** : Modifiez les chemins et configurations selon vos besoins spécifiques
|
|
3. **Déploiement** : Intégrez les templates dans votre processus de déploiement
|
|
4. **Rotation des Certificats** : Les templates utilisent des variables pour les chemins :
|
|
- `$CERT_PATH/certs/fullchain.pem`
|
|
- `$CERT_PATH/private/privkey.pem`
|
|
- Mise à jour automatique lors de la régénération des templates
|