
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
9.2 KiB
9.2 KiB
_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 :
generate_docker_variables.sh
- Génère.env.auto
avec les variables Dockergenerate_docker_compose.sh
- Génèredocker-compose.yml.auto
generate_grafana_dashboards.sh
- Génère les dashboards Grafana et config Promtailgenerate_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
# 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
# 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é
- Chiffrement des Flux : Toutes les communications utilisent HTTPS avec TLS 1.2+
- Authentification : Authentification par clé utilisateur (
X-User-ID
) - Rotation des Clés : Rotation automatique des clés de chiffrement
- Isolation des Services : Chaque service dans son propre réseau Docker
- 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
etX-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
# 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
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
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
- Ordre de Chargement :
.env.secrets
→.env
→.env.auto
→.env.post
- Résolution Récursive : Support des variables imbriquées (
$VAR
,${VAR}
) - Protection : Les fichiers
.env
et.env.secrets
ne sont jamais modifiés - 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
- Variable SERVICES non définie : Vérifiez que
SERVICES
est défini dans.env
- Variable HOST non définie : Utilise la valeur par défaut
dev4._4NKweb.com
- 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
- Ajouter le service à la variable
SERVICES
dans.env
- Définir les variables spécifiques au service (ports, base de données, etc.)
- 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 :
- Validation : Utilisez
nginx/validate_templates.sh
pour vérifier la cohérence - Adaptation : Modifiez les chemins et configurations selon vos besoins spécifiques
- Déploiement : Intégrez les templates dans votre processus de déploiement
- 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