Séparation de la génération du docker-compose et empêcher la copie dans storage/ - Créé generate_docker_compose.sh pour générer uniquement docker-compose.yml.auto - Refactorisé generate_variables.sh pour générer uniquement .env.auto - Mis à jour replace_variables_and_copy.sh pour ne pas copier docker-compose.yml.auto dans storage/ - Mis à jour generate.sh pour orchestrer 7 étapes au lieu de 6 - Mis à jour la documentation README.md pour refléter les changements - docker-compose.yml.auto et .env.auto restent dans templates/dev/ pour le traitement mais ne sont plus déployés dans storage/
_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_variables.sh- Génère.env.autoavec les variables d'environnementgenerate_docker_compose.sh- Génèredocker-compose.yml.autogenerate_grafana_dashboards.sh- Génère les dashboards Grafanagenerate_promtail_config.sh- Génère la configuration Promtailgenerate_logrotate_configs.sh- Génère les configurations Logrotategenerate_nginx_configs.sh- Génère les configurations Nginxreplace_variables_and_copy.sh- Remplace les variables et copie vers storage/
📋 Scripts Individuels
1. Génération des Variables d'Environnement
generate_variables.sh
- Génère le fichier
.env.autoavec toutes les variables d'environnement calculées - Variables globales :
HOST, etc. - Variables par service :
{SERVICE}_DOCKER_NAME,{SERVICE}_PORT,{SERVICE}_LOGS_DIR, etc.
2. Génération du Docker Compose
generate_docker_compose.sh
- Génère le fichier
docker-compose.yml.autobasé 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.confavec les upstreams et format de log JSON - Génère
nginx/app-internal-ports.confpour le proxy interne - Génère
nginx/proxy_headers.confavec les headers de proxy - Génère
nginx/{SERVICE}_https.confavec les vhosts HTTPS individuels - Génère
nginx/nginx_{HOST}-https.confavec la configuration HTTPS consolidée - Génère
nginx/validate_templates.shpour 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/
# Note: docker-compose.yml.auto et .env.auto ne sont PAS copiés dans storage/
├── _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-SchemeetX-Debug-XFPpour 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
.envet.env.secretsne 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
SERVICESest 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
SERVICESdans.env - Définir les variables spécifiques au service (ports, base de données, etc.)
- Relancer
./generate.shpour 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.shpour 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