# Centralisation des Variables d'Environnement - LeCoffre Node ## 📋 Vue d'ensemble **Date de mise en œuvre** : 2024-09-21 **Statut** : ✅ Terminé et opérationnel **Impact** : Architecture simplifiée et sécurisée --- ## 🎯 Objectifs atteints ### ✅ Centralisation complète - **Fichier unique** : `lecoffre_node/.env.master` contient toutes les variables - **Suppression des .env** : Plus de fichiers .env dispersés dans les projets - **Configuration centralisée** : Docker Compose utilise `.env.master` - **Applications adaptées** : Code modifié pour lire les variables d'environnement ### ✅ Sécurité renforcée - **Protection Git** : `.env.master` exclu du .gitignore - **Variables sensibles** : Centralisées et protégées - **Configuration unique** : Plus de duplication de secrets ### ✅ Déploiement simplifié - **Commande unique** : `docker compose --env-file .env.master up` - **Tests automatisés** : `./scripts/test-env-config.sh` - **Validation** : Configuration testée et validée --- ## 📦 Contenu du .env.master ### 🔧 Variables d'environnement générales ```bash NODE_OPTIONS=--max-old-space-size=2048 NODE_ENV=production ``` ### 🌐 Configuration IDNOT (APIs notaires) ```bash IDNOT_ANNUARY_BASE_URL=https://qual-api.notaires.fr/annuaire IDNOT_REDIRECT_URI=http://local.4nkweb.com:3000/authorized-client IDNOT_TOKEN_URL=https://qual-connexion.idnot.fr/user/IdPOAuth2/token/idnot_idp_v1 IDNOT_API_BASE_URL=https://qual-api.notaires.fr ``` ### 🖥️ Configuration serveur ```bash APP_HOST=dev4.4nkweb.com API_BASE_URL=https://dev4.4nkweb.com/back DEFAULT_STORAGE=https://dev4.4nkweb.com/storage ``` ### 🎨 Configuration frontend ```bash NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com NEXT_PUBLIC_FRONT_APP_HOST=https://dev4.4nkweb.com/lecoffre NEXT_PUBLIC_IDNOT_BASE_URL=https://qual-connexion.idnot.fr NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT=/IdPOAuth2/authorize/idnot_idp_v1 NEXT_PUBLIC_BACK_API_PROTOCOL=https NEXT_PUBLIC_BACK_API_HOST=dev4.4nkweb.com NEXT_PUBLIC_BACK_API_PORT=443 NEXT_PUBLIC_BACK_API_ROOT_URL=/api NEXT_PUBLIC_BACK_API_VERSION=v1 ``` ### 🔄 Variables SDK_RELAY ```bash SDK_RELAY_CORE_URL=http://bitcoin:38332 SDK_RELAY_WS_URL=0.0.0.0:8090 SDK_RELAY_WALLET_NAME=default SDK_RELAY_NETWORK=signet SDK_RELAY_BLINDBIT_URL=http://blindbit-proxy:8000 SDK_RELAY_ZMQ_URL=tcp://bitcoin:29000 SDK_RELAY_STORAGE=https://dev4.4nkweb.com/storage SDK_RELAY_DATA_DIR=/home/bitcoin/.4nk SDK_RELAY_BITCOIN_DATA_DIR=/home/bitcoin/.bitcoin SDK_RELAY_BOOTSTRAP_URL=ws://dev3.4nkweb.com:8090 SDK_RELAY_BOOTSTRAP_FAUCET=true SDK_RELAY_RUST_LOG=DEBUG,reqwest=DEBUG,tokio_tungstenite=DEBUG ``` ### ✍️ Variables SDK_SIGNER ```bash SIGNER_API_KEY=your-api-key-change-this SIGNER_PORT=9090 SIGNER_DATABASE_PATH=./data/server.db SIGNER_RELAY_URLS=http://localhost:8090 SIGNER_AUTO_RESTART=true SIGNER_MAX_RESTARTS=3 SIGNER_LOG_LEVEL=info ``` ### 🎯 Variables IHM_CLIENT ```bash VITE_JWT_SECRET_KEY=52b3d77617bb00982dfee15b08effd52cfe5b2e69b2f61cc4848cfe1e98c0bc9 VITE_API_BASE_URL=https://dev4.4nkweb.com/back/api/v1 VITE_WS_URL=wss://dev4.4nkweb.com/ws/ VITE_STORAGE_URL=https://dev4.4nkweb.com/storage VITE_SIGNER_URL=https://dev4.4nkweb.com/signer ``` ### 💳 Variables STRIPE (paiements) ```bash STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_key STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret ``` ### 📧 Variables MAILCHIMP (emails) ```bash MAILCHIMP_API_KEY=your_mailchimp_api_key MAILCHIMP_SERVER_PREFIX=us1 MAILCHIMP_LIST_ID=your_list_id ``` ### 📱 Variables OVH SMS ```bash OVH_APPLICATION_KEY=your_ovh_app_key OVH_APPLICATION_SECRET=your_ovh_app_secret OVH_CONSUMER_KEY=your_ovh_consumer_key OVH_SERVICE_NAME=your_ovh_service ``` ### 📊 Variables monitoring ```bash GRAFANA_ADMIN_USER=admin GRAFANA_ADMIN_PASSWORD=admin123 LOKI_URL=http://loki:3100 PROMTAIL_CONFIG_FILE=/etc/promtail/config.yml ``` --- ## 🔧 Modifications apportées ### 📁 Fichiers supprimés - ✅ `sdk_relay/.env` - ✅ `sdk_signer/.env` - ✅ `ihm_client/.env` - ✅ `lecoffre-back-mini/.env` - ✅ `lecoffre-front/.env` ### 🔄 Fichiers modifiés #### `sdk_relay/src/config.rs` ```rust // Lecture prioritaire des variables d'environnement let env_vars = [ ("core_url", "CORE_URL"), ("ws_url", "WS_URL"), ("wallet_name", "WALLET_NAME"), // ... autres variables ]; for (config_key, env_key) in env_vars.iter() { if let Ok(env_value) = env::var(env_key) { file_content.insert(config_key.to_string(), env_value); } } ``` #### `sdk_signer/src/config.ts` ```typescript // Configuration via variables d'environnement (centralisées dans lecoffre_node/.env.master) export function loadConfig(): AppConfig { return { port: parseInt(process.env.PORT || '9090'), apiKey: process.env.API_KEY || 'your-api-key-change-this', // ... autres variables }; } ``` #### `lecoffre_node/docker-compose.yml` ```yaml services: sdk_relay: environment: - NODE_OPTIONS=${NODE_OPTIONS} - CORE_URL=${SDK_RELAY_CORE_URL} - WS_URL=${SDK_RELAY_WS_URL} # ... toutes les variables SDK_RELAY_* sdk_signer: environment: - PORT=${SIGNER_PORT} - API_KEY=${SIGNER_API_KEY} # ... toutes les variables SIGNER_* ``` #### `lecoffre_node/.gitignore` ```bash .env !.env.master # Autoriser le fichier centralisé miner/.env ``` --- ## 🧪 Tests et validation ### ✅ Tests automatisés ```bash # Test de la configuration centralisée ./scripts/test-env-config.sh # Résultats : # ✅ Fichier .env.master existe (113 lignes) # ✅ Syntaxe docker-compose.yml valide # ✅ Tous les fichiers .env supprimés (6/6) # ✅ Fichiers de configuration modifiés (2/2) # ✅ Variables critiques chargées correctement ``` ### ✅ Validation Docker Compose ```bash # Test de syntaxe docker compose --env-file .env.master config --quiet # ✅ Syntaxe valide ``` ### ✅ Variables critiques validées - **SDK_RELAY_CORE_URL** : Référencée dans docker-compose.yml - **SIGNER_API_KEY** : Référencée dans docker-compose.yml - **VITE_JWT_SECRET_KEY** : Référencée dans docker-compose.yml --- ## 🚀 Utilisation ### Déploiement standard ```bash cd lecoffre_node docker compose --env-file .env.master up -d ``` ### Test de configuration ```bash cd lecoffre_node ./scripts/test-env-config.sh ``` ### Cloner l'environnement complet ```bash git clone --recursive https://git.4nkweb.com/4nk/4NK_env.git cd 4NK_env/lecoffre_node docker compose --env-file .env.master up -d ``` --- ## 📊 Avantages de la centralisation ### 🔒 Sécurité - **Configuration unique** : Plus de duplication de secrets - **Protection centralisée** : Un seul fichier à sécuriser - **Audit simplifié** : Toutes les variables au même endroit ### 🛠️ Maintenance - **Modification unique** : Changer une variable une seule fois - **Cohérence garantie** : Même valeur partout - **Déploiement simplifié** : Une seule commande ### 📈 Évolutivité - **Nouveaux services** : Ajout facile de nouvelles variables - **Environnements multiples** : Facile de créer .env.prod, .env.dev - **Documentation** : Toutes les variables documentées --- ## 🎯 Impact sur l'architecture ### ✅ Avant (problématique) ``` sdk_relay/.env sdk_signer/.env ihm_client/.env lecoffre-back-mini/.env lecoffre-front/.env ├── Variables dupliquées ├── Incohérences possibles ├── Maintenance complexe └── Sécurité dispersée ``` ### ✅ Après (solution) ``` lecoffre_node/.env.master ├── Variables centralisées ├── Configuration unique ├── Maintenance simplifiée └── Sécurité renforcée ``` --- ## 🔄 Prochaines étapes ### 🎯 Court terme 1. **Déploiement** : Utiliser la configuration centralisée en production 2. **Formation** : Former l'équipe sur la nouvelle architecture 3. **Documentation** : Mettre à jour les guides utilisateur ### 🎯 Moyen terme 1. **Environnements multiples** : Créer .env.prod, .env.dev 2. **Validation** : Ajouter des scripts de validation des variables 3. **Monitoring** : Surveiller l'utilisation des variables ### 🎯 Long terme 1. **Secrets management** : Intégrer avec HashiCorp Vault ou similaire 2. **Chiffrement** : Chiffrer les variables sensibles 3. **Rotation** : Automatiser la rotation des secrets --- **Note** : Cette centralisation des variables d'environnement représente une amélioration majeure de l'architecture LeCoffre Node, offrant une meilleure sécurité, une maintenance simplifiée et une évolutivité renforcée.