# Fichiers d'Environnement - Configuration **Auteur** : Équipe 4NK **Date** : 2026-01-24 **Version** : 1.0 ## Vue d'Ensemble Ce document décrit tous les fichiers d'environnement utilisés dans le projet et leurs variables. ## Fichiers d'Environnement ### 1. Fichier `.env` à la racine du projet **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/.env` **Utilisé par :** - Docker (Bitcoin Core) - Scripts de configuration - Génération de `bitcoin.conf` **Variables principales :** ```bash # Mining Configuration BLOCKPRODUCTIONDELAY=600 # Délai entre blocs (secondes) MINERENABLED=1 # Activer le mining (1 = oui, 0 = non) NBITS=1e0377ae # Difficulté minimale (hex) PRIVKEY= # Clé privée du signer (générée si vide) MINETO= # Adresse de mining (optionnel) SIGNETCHALLENGE= # Challenge du signet # RPC Configuration RPCUSER=bitcoin # Utilisateur RPC RPCPASSWORD=bitcoin # Mot de passe RPC # User Agent UACOMMENT=CustomSignet # Commentaire User Agent # ZMQ Configuration ZMQPUBRAWBLOCK=tcp://0.0.0.0:28332 ZMQPUBRAWTX=tcp://0.0.0.0:28333 ZMQPUBHASHBLOCK=tcp://0.0.0.0:28334 # Network Configuration RPCBIND=0.0.0.0:38332 # Port RPC RPCALLOWIP=0.0.0.0/0 # IPs autorisées pour RPC WHITELIST=0.0.0.0/0 # IPs whitelistées ADDNODE= # Nœuds à ajouter (optionnel) EXTERNAL_IP= # IP externe (optionnel) ``` **Fichier d'exemple :** `env.example` ### 2. Fichier `.env` de l'API Anchorage **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/api-anchorage/.env` **Variables :** ```bash # Bitcoin RPC Configuration BITCOIN_RPC_HOST=localhost BITCOIN_RPC_PORT=38332 BITCOIN_RPC_USER=bitcoin BITCOIN_RPC_PASSWORD=bitcoin BITCOIN_RPC_TIMEOUT=30000 # API Configuration API_PORT=3010 # Port fixe (défini aussi dans systemd) API_HOST=0.0.0.0 # API Keys (séparées par des virgules) API_KEYS=your-api-key-here,another-api-key # Logging LOG_LEVEL=info # error, warn, info, debug NODE_ENV=production ``` **Note :** Le port est fixe (3010) et défini aussi dans le service systemd. En production, `API_HOST=192.168.1.105` (machine bitcoin) et `ALLOWED_SOURCE_IP=192.168.1.100` pour n’accepter que le proxy en IPv4. ### 3. Fichier `.env` de l'API Faucet **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/api-faucet/.env` **Variables :** ```bash # Bitcoin RPC Configuration BITCOIN_RPC_HOST=localhost BITCOIN_RPC_PORT=38332 BITCOIN_RPC_USER=bitcoin BITCOIN_RPC_PASSWORD=bitcoin BITCOIN_RPC_TIMEOUT=30000 # API Configuration FAUCET_API_PORT=3021 # Port fixe (défini aussi dans systemd) FAUCET_API_HOST=0.0.0.0 # API Keys (séparées par des virgules) API_KEYS=your-api-key-here,another-api-key # Faucet Configuration FAUCET_AMOUNT=50000 # Montant en sats (0.0005 BTC) FAUCET_WALLET_NAME=faucet # Nom du wallet (optionnel) # Logging LOG_LEVEL=info NODE_ENV=production ``` **Note :** Le port est fixe (3021) et défini aussi dans le service systemd. En production, `FAUCET_API_HOST=192.168.1.103` (machine prod) et `ALLOWED_SOURCE_IP=192.168.1.100` pour n’accepter que le proxy en IPv4. ### 4. Fichier `.env` de l'API Filigrane **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/api-filigrane/.env` **Variables :** ```bash # API Configuration WATERMARK_API_PORT=3022 # Port fixe (défini aussi dans systemd) WATERMARK_API_HOST=0.0.0.0 # API Anchorage (pour ancrer les documents) ANCHOR_API_URL=http://localhost:3010 # Ou en production : # ANCHOR_API_URL=https://certificator.4nkweb.com # API Blockchain (pour récupérer les infos de bloc) BLOCKCHAIN_API_URL=http://localhost:3020 # Ou en production : # BLOCKCHAIN_API_URL=https://dashboard.certificator.4nkweb.com # API ClamAV (pour scanner les fichiers) CLAMAV_API_URL=http://localhost:3023 # Ou en production : # CLAMAV_API_URL=https://antivir.certificator.4nkweb.com # Logging LOG_LEVEL=info NODE_ENV=production ``` **Note :** Le port est fixe (3022) et défini aussi dans le service systemd. En production, `WATERMARK_API_HOST=192.168.1.103` (machine prod) et `ALLOWED_SOURCE_IP=192.168.1.100` pour n’accepter que le proxy en IPv4. ### 5. Fichier `.env` de l'API ClamAV **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/api-clamav/.env` **Variables :** ```bash # API Configuration CLAMAV_API_PORT=3023 # Port fixe (défini dans le code) CLAMAV_API_HOST=0.0.0.0 # ClamAV Daemon Configuration CLAMAV_HOST=localhost # Host du daemon ClamAV CLAMAV_PORT=3310 # Port du daemon ClamAV CLAMAV_TIMEOUT=30000 # Timeout en millisecondes # Logging LOG_LEVEL=info NODE_ENV=production ``` **Note :** Le port est fixe (3023) et défini directement dans le code (`src/server.js`). En production, `CLAMAV_API_HOST=192.168.1.103` (machine prod) et `ALLOWED_SOURCE_IP=192.168.1.100` pour n’accepter que le proxy en IPv4. ### 6. Fichier `.env` du Dashboard **Emplacement :** `/home/ncantu/Bureau/code/bitcoin/signet-dashboard/.env` **Variables :** ```bash # Dashboard Configuration DASHBOARD_PORT=3020 # Port fixe (défini aussi dans systemd) DASHBOARD_HOST=0.0.0.0 # Bitcoin RPC Configuration (sur la machine bitcoin : 127.0.0.1 = même nœud que Mempool) BITCOIN_RPC_HOST=127.0.0.1 BITCOIN_RPC_PORT=38332 BITCOIN_RPC_USER=bitcoin BITCOIN_RPC_PASSWORD=bitcoin BITCOIN_RPC_TIMEOUT=30000 # API Anchorage Configuration ANCHOR_API_URL=http://localhost:3010 # Ou en production : # ANCHOR_API_URL=https://certificator.4nkweb.com ANCHOR_API_KEY=your-api-key-here # API Faucet Configuration FAUCET_API_URL=http://localhost:3021 # Ou en production : # FAUCET_API_URL=https://faucet.certificator.4nkweb.com # API Filigrane Configuration WATERMARK_API_URL=http://localhost:3022 # Ou en production : # WATERMARK_API_URL=https://watermark.certificator.4nkweb.com # Logging LOG_LEVEL=info NODE_ENV=production ``` **Note :** Le port est fixe (3020) et défini aussi dans le service systemd. En production, `DASHBOARD_HOST=192.168.1.105` (machine bitcoin) et `ALLOWED_SOURCE_IP=192.168.1.100` pour n’accepter que le proxy en IPv4. ## Variables d'Environnement dans les Services Systemd Les services systemd définissent aussi des variables d'environnement pour garantir que les ports sont fixes : ### API Anchorage (`api-anchorage/anchorage-api.service`) ```ini Environment=API_PORT=3010 Environment=API_HOST=192.168.1.105 Environment=ALLOWED_SOURCE_IP=192.168.1.100 ``` ### API Faucet (`api-faucet/faucet-api.service`) ```ini Environment=FAUCET_API_PORT=3021 Environment=FAUCET_API_HOST=192.168.1.103 Environment=ALLOWED_SOURCE_IP=192.168.1.100 ``` ### API Filigrane (`api-filigrane/filigrane-api.service`) ```ini Environment=WATERMARK_API_PORT=3022 Environment=WATERMARK_API_HOST=192.168.1.103 Environment=ALLOWED_SOURCE_IP=192.168.1.100 ``` ### API ClamAV (`api-clamav/clamav-api.service`) ```ini Environment=CLAMAV_API_PORT=3023 Environment=CLAMAV_API_HOST=192.168.1.103 Environment=ALLOWED_SOURCE_IP=192.168.1.100 Environment=CLAMAV_HOST=localhost Environment=CLAMAV_PORT=3310 ``` ### Dashboard (`signet-dashboard/signet-dashboard.service`) ```ini Environment=DASHBOARD_PORT=3020 Environment=DASHBOARD_HOST=192.168.1.105 Environment=ALLOWED_SOURCE_IP=192.168.1.100 ``` ## Écoute réseau : IPv4 uniquement, flux reçus du proxy (192.168.1.100) Les services backend doivent : 1. **Écouter en IPv4 uniquement** : pas d’écoute sur `[::]`. En fixant `*_HOST` à l’adresse IPv4 de la machine (ex. `192.168.1.105` pour la machine bitcoin), le service n’écoute que sur cette interface (IPv4). 2. **Accepter les flux reçus du proxy uniquement** : si `ALLOWED_SOURCE_IP=192.168.1.100` est défini, le service rejette (403) toute requête dont la source (après normalisation IPv6-mapped → IPv4) n’est pas 192.168.1.100. - **Machine bitcoin (192.168.1.105)** : `DASHBOARD_HOST=192.168.1.105`, `API_HOST=192.168.1.105` (anchorage), `ALLOWED_SOURCE_IP=192.168.1.100`. - **Machine prod (192.168.1.103)** : `FAUCET_API_HOST=192.168.1.103`, `WATERMARK_API_HOST=192.168.1.103`, `CLAMAV_API_HOST=192.168.1.103`, `ALLOWED_SOURCE_IP=192.168.1.100`. Voir `features/services-ecoute-ipv4-proxy.md` pour le détail. ## Ordre de Priorité Les variables d'environnement sont chargées dans cet ordre : 1. **Variables du service systemd** (priorité la plus haute) 2. **Fichier `.env`** dans le répertoire de l'API 3. **Variables d'environnement système** (`process.env`) 4. **Valeurs par défaut** dans le code ## Création des Fichiers `.env` ### Depuis les exemples ```bash # À la racine du projet cp env.example .env # Pour chaque API cd api-anchorage && cp .env.example .env cd ../api-faucet && cp .env.example .env cd ../api-filigrane && cp .env.example .env cd ../api-clamav && cp .env.example .env cd ../signet-dashboard && cp .env.example .env ``` ### Variables Sensibles **⚠️ Important :** Les fichiers `.env` contiennent des informations sensibles : - Clés API - Mots de passe RPC - Clés privées Bitcoin **Sécurité :** - Ne jamais commiter les fichiers `.env` dans Git - Utiliser `.gitignore` pour exclure les fichiers `.env` - Changer les valeurs par défaut en production - Utiliser des clés API fortes et uniques ## Vérification des Variables ### Vérifier qu'un fichier `.env` est chargé ```bash # Dans le code Node.js, les variables sont loggées au démarrage # Vérifier les logs du service sudo journalctl -u anchorage-api | grep ENV ``` ### Tester les variables ```bash # Charger et afficher les variables (sans exposer les secrets) cd api-anchorage node -e "require('dotenv').config(); console.log('API_PORT:', process.env.API_PORT);" ``` ## Migration et Mise à Jour Lors de la mise à jour des variables : 1. **Mettre à jour le fichier `.env`** 2. **Mettre à jour le service systemd** si nécessaire 3. **Redémarrer le service** : `sudo systemctl restart ` 4. **Vérifier les logs** : `sudo journalctl -u -f` ## Références - [Documentation Domaines et Ports](./DOMAINS_AND_PORTS.md) - [Documentation Maintenance](./MAINTENANCE.md) - [Documentation Dashboard](./DASHBOARD.md)