anchorage_layer_simple/docs/ENVIRONMENT.md
ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**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
2026-02-04 03:07:57 +01:00

340 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 naccepter 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 naccepter 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 naccepter 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 naccepter 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 naccepter 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` à ladresse 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) nest 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)