**Motivations:** - Export Signet and mining wallet backups to git with only 2 versions kept - Document and add backup/restore scripts for signet and mining wallet **Correctifs:** - Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo **Evolutions:** - data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup - save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh - features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section - .gitignore: data/backup-to-git.log **Pages affectées:** - .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md - save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh - Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
340 lines
10 KiB
Markdown
340 lines
10 KiB
Markdown
# 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> # Clé privée du signer (générée si vide)
|
||
MINETO=<adresse> # Adresse de mining (optionnel)
|
||
SIGNETCHALLENGE=<challenge> # 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=<ip> # Nœuds à ajouter (optionnel)
|
||
EXTERNAL_IP=<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 <service-name>`
|
||
4. **Vérifier les logs** : `sudo journalctl -u <service-name> -f`
|
||
|
||
## Références
|
||
|
||
- [Documentation Domaines et Ports](./DOMAINS_AND_PORTS.md)
|
||
- [Documentation Maintenance](./MAINTENANCE.md)
|
||
- [Documentation Dashboard](./DASHBOARD.md)
|