795 lines
17 KiB
Markdown
795 lines
17 KiB
Markdown
# ⚙️ Guide de Configuration - 4NK Node
|
||
|
||
Guide complet pour configurer l'infrastructure 4NK Node selon vos besoins.
|
||
|
||
## 📋 Configuration Générale
|
||
|
||
### 1. Variables d'Environnement
|
||
|
||
Créer un fichier `.env` à la racine du projet :
|
||
|
||
```bash
|
||
# Configuration 4NK Node
|
||
PROJECT_NAME=4NK Node
|
||
NETWORK_NAME=4nk_node_btcnet
|
||
|
||
# Logs
|
||
RUST_LOG=debug,bitcoincore_rpc=trace
|
||
|
||
# Bitcoin
|
||
BITCOIN_COOKIE_PATH=/home/bitcoin/.bitcoin/signet/.cookie
|
||
|
||
# Synchronisation
|
||
ENABLE_SYNC_TEST=1
|
||
|
||
# Ports
|
||
TOR_PORTS=9050:9050,9051:9051
|
||
BITCOIN_PORTS=38333:38333,18443:18443,29000:29000
|
||
BLINDBIT_PORTS=8000:8000
|
||
RELAY_1_PORTS=8090:8090,8091:8091
|
||
RELAY_2_PORTS=8092:8090,8093:8091
|
||
RELAY_3_PORTS=8094:8090,8095:8091
|
||
```
|
||
|
||
### 2. Configuration Réseau
|
||
|
||
#### Réseau Docker Personnalisé
|
||
|
||
```bash
|
||
# Créer un réseau personnalisé
|
||
docker network create 4nk-network --subnet=172.20.0.0/16 --gateway=172.20.0.1
|
||
|
||
# Modifier docker-compose.yml
|
||
sed -i 's/4nk_default/4nk-network/g' docker-compose.yml
|
||
```
|
||
|
||
#### Configuration de Pare-feu
|
||
|
||
```bash
|
||
# Exposition publique centralisée via reverse proxy uniquement
|
||
sudo ufw allow 80/tcp # HTTP (redirection)
|
||
sudo ufw allow 443/tcp # HTTPS (UI + API + WS)
|
||
sudo ufw enable
|
||
sudo ufw enable
|
||
|
||
# Vérifier les règles
|
||
sudo ufw status numbered
|
||
```
|
||
|
||
## 🔧 Configuration Bitcoin Core
|
||
|
||
### 1. Configuration de Base
|
||
|
||
Fichier : `bitcoin/bitcoin.conf`
|
||
|
||
```ini
|
||
# Configuration Bitcoin Core Signet
|
||
signet=1
|
||
rpcuser=bitcoin
|
||
rpcpassword=your_secure_password
|
||
rpcbind=0.0.0.0
|
||
rpcallowip=172.19.0.0/16
|
||
zmqpubrawblock=tcp://0.0.0.0:29000
|
||
zmqpubrawtx=tcp://0.0.0.0:29000
|
||
txindex=1
|
||
server=1
|
||
listen=1
|
||
|
||
# Configuration Signet
|
||
[signet]
|
||
listen=1
|
||
bind=0.0.0.0:38333
|
||
rpcbind=0.0.0.0:18443
|
||
rpcport=18443
|
||
fallbackfee=0.0001
|
||
blockfilterindex=1
|
||
datacarriersize=205
|
||
acceptnonstdtxn=1
|
||
dustrelayfee=0.00000001
|
||
minrelaytxfee=0.00000001
|
||
prune=0
|
||
signetchallenge=0020341c43803863c252df326e73574a27d7e19322992061017b0dc893e2eab90821
|
||
walletdir=/home/bitcoin/.bitcoin/wallets
|
||
wallet=mining
|
||
wallet=watchonly
|
||
maxtxfee=1
|
||
addnode=tlv2yqamflv22vfdzy2hha2nwmt6zrwrhjjzz4lx7qyq7lyc6wfhabyd.onion
|
||
```
|
||
|
||
### 2. Configuration Avancée
|
||
|
||
#### Performance
|
||
|
||
```ini
|
||
# Optimisation mémoire
|
||
dbcache=450
|
||
maxmempool=300
|
||
maxconnections=125
|
||
|
||
# Optimisation disque
|
||
txindex=1
|
||
blockfilterindex=1
|
||
coinstatsindex=1
|
||
|
||
# Optimisation réseau
|
||
listenonion=1
|
||
onion=tor:9050
|
||
proxy=tor:9050
|
||
```
|
||
|
||
#### Sécurité
|
||
|
||
```ini
|
||
# Authentification
|
||
rpcauth=bitcoin:c8ea921c7357bd6a5a8a7c43a12350a7$955e25b17672987b17c5a12f12cd8b9c1d38f0f86201c8cd47fc431f2e1c7956
|
||
rpcallowip=172.19.0.0/16
|
||
rpcworkqueue=32
|
||
rpcthreads=4
|
||
rpcdoccheck=1
|
||
|
||
# Limites
|
||
maxuploadtarget=5000
|
||
maxconnections=125
|
||
```
|
||
|
||
### 3. Configuration des Wallets
|
||
|
||
```bash
|
||
# Créer un wallet pour les relais
|
||
docker exec bitcoin-signet bitcoin-cli -signet createwallet "relay_wallet"
|
||
|
||
# Créer un wallet pour le mining
|
||
docker exec bitcoin-signet bitcoin-cli -signet createwallet "mining_wallet"
|
||
|
||
# Créer un wallet watch-only
|
||
docker exec bitcoin-signet bitcoin-cli -signet createwallet "watchonly_wallet" true
|
||
```
|
||
|
||
## 🔧 Configuration Blindbit
|
||
|
||
### 1. Configuration de Base
|
||
|
||
Fichier : `blindbit/blindbit.toml`
|
||
|
||
```toml
|
||
# Configuration Blindbit Oracle
|
||
host = "0.0.0.0:8000"
|
||
chain = "signet"
|
||
rpc_endpoint = "http://bitcoin:18443"
|
||
cookie_path = "/home/bitcoin/.bitcoin/signet/.cookie"
|
||
rpc_user = ""
|
||
rpc_pass = ""
|
||
sync_start_height = 1
|
||
|
||
# Performance
|
||
max_parallel_tweak_computations = 4
|
||
max_parallel_requests = 4
|
||
|
||
# Index
|
||
tweaks_only = 0
|
||
tweaks_full_basic = 1
|
||
tweaks_full_with_dust_filter = 1
|
||
tweaks_cut_through_with_dust_filter = 1
|
||
```
|
||
|
||
### 2. Configuration Avancée
|
||
|
||
#### Performance
|
||
|
||
```toml
|
||
# Optimisation des calculs
|
||
max_parallel_tweak_computations = 8
|
||
max_parallel_requests = 8
|
||
|
||
# Cache
|
||
cache_size = 1000
|
||
cache_ttl = 3600
|
||
|
||
# Logs
|
||
log_level = "info"
|
||
log_file = "/data/blindbit.log"
|
||
```
|
||
|
||
#### Sécurité
|
||
|
||
```toml
|
||
# Authentification
|
||
rpc_user = "blindbit_user"
|
||
rpc_pass = "secure_password"
|
||
|
||
# Limites
|
||
max_request_size = 1048576
|
||
rate_limit = 100
|
||
```
|
||
|
||
## 🔧 Configuration des Relais
|
||
|
||
### 1. Configuration de Base
|
||
|
||
#### Relay 1 - `sdk_relay/.conf.docker.relay1`
|
||
|
||
```ini
|
||
core_url=http://bitcoin:18443
|
||
core_wallet=relay_wallet
|
||
ws_url=0.0.0.0:8090
|
||
wallet_name=relay_wallet.json
|
||
network=signet
|
||
blindbit_url=http://blindbit:8000
|
||
zmq_url=tcp://bitcoin:29000
|
||
data_dir=.4nk
|
||
cookie_path=/home/bitcoin/.4nk/bitcoin.cookie
|
||
dev_mode=true
|
||
standalone=false
|
||
relay_id=relay-1
|
||
```
|
||
|
||
#### Relay 2 - `sdk_relay/.conf.docker.relay2`
|
||
|
||
```ini
|
||
core_url=http://bitcoin:18443
|
||
core_wallet=relay_wallet
|
||
ws_url=0.0.0.0:8090
|
||
wallet_name=relay_wallet.json
|
||
network=signet
|
||
blindbit_url=http://blindbit:8000
|
||
zmq_url=tcp://bitcoin:29000
|
||
data_dir=.4nk
|
||
cookie_path=/home/bitcoin/.4nk/bitcoin.cookie
|
||
dev_mode=true
|
||
standalone=false
|
||
relay_id=relay-2
|
||
```
|
||
|
||
#### Relay 3 - `sdk_relay/.conf.docker.relay3`
|
||
|
||
```ini
|
||
core_url=http://bitcoin:18443
|
||
core_wallet=relay_wallet
|
||
ws_url=0.0.0.0:8090
|
||
wallet_name=relay_wallet.json
|
||
network=signet
|
||
blindbit_url=http://blindbit:8000
|
||
zmq_url=tcp://bitcoin:29000
|
||
data_dir=.4nk
|
||
cookie_path=/home/bitcoin/.4nk/bitcoin.cookie
|
||
dev_mode=true
|
||
standalone=false
|
||
relay_id=relay-3
|
||
```
|
||
|
||
### 2. Configuration Avancée
|
||
|
||
#### Performance
|
||
|
||
```ini
|
||
# Optimisation mémoire
|
||
max_connections=100
|
||
connection_timeout=30
|
||
read_timeout=60
|
||
|
||
# Cache
|
||
cache_size=1000
|
||
cache_ttl=3600
|
||
|
||
# Logs
|
||
log_level=info
|
||
log_file=/home/bitcoin/.4nk/relay.log
|
||
```
|
||
|
||
#### Sécurité
|
||
|
||
```ini
|
||
# Authentification
|
||
auth_required=true
|
||
auth_token=your_secure_token
|
||
|
||
# Limites
|
||
max_message_size=1048576
|
||
rate_limit=1000
|
||
```
|
||
|
||
### 3. Configuration de Synchronisation
|
||
|
||
```ini
|
||
# Synchronisation
|
||
sync_enabled=true
|
||
sync_interval=30
|
||
sync_timeout=10
|
||
|
||
# Découverte
|
||
discovery_enabled=true
|
||
discovery_interval=60
|
||
discovery_timeout=5
|
||
|
||
# Cache de déduplication
|
||
dedup_enabled=true
|
||
dedup_ttl=300
|
||
dedup_max_size=10000
|
||
```
|
||
|
||
## 🌐 Configuration des Nœuds Externes
|
||
|
||
### 1. Configuration de Base
|
||
|
||
Fichier : `sdk_relay/external_nodes.conf`
|
||
|
||
```toml
|
||
# Configuration des nœuds externes
|
||
[relays]
|
||
external-relay-1 = "external-relay-1.example.com:8090"
|
||
external-relay-2 = "192.168.1.100:8090"
|
||
dev3-relay = "dev3.4nkweb.com:443"
|
||
|
||
[discovery]
|
||
auto_discover = true
|
||
bootstrap_nodes = [
|
||
"bootstrap-1.4nk.net:8090",
|
||
"bootstrap-2.4nk.net:8090"
|
||
]
|
||
|
||
[security]
|
||
allowed_domains = [
|
||
"*.4nk.net",
|
||
"*.example.com",
|
||
"localhost",
|
||
"127.0.0.1"
|
||
]
|
||
|
||
[validation]
|
||
max_connection_timeout = 10
|
||
health_check_interval = 300
|
||
blacklist_threshold = 5
|
||
```
|
||
|
||
### 2. Configuration Avancée
|
||
|
||
#### Découverte Automatique
|
||
|
||
```toml
|
||
[discovery]
|
||
auto_discover = true
|
||
bootstrap_nodes = [
|
||
"bootstrap-1.4nk.net:8090",
|
||
"bootstrap-2.4nk.net:8090"
|
||
]
|
||
discovery_interval = 300
|
||
discovery_timeout = 10
|
||
max_discovered_nodes = 50
|
||
```
|
||
|
||
#### Sécurité
|
||
|
||
```toml
|
||
[security]
|
||
allowed_domains = [
|
||
"*.4nk.net",
|
||
"*.example.com",
|
||
"localhost",
|
||
"127.0.0.1"
|
||
]
|
||
blocked_domains = [
|
||
"malicious.example.com"
|
||
]
|
||
allowed_ips = [
|
||
"192.168.1.0/24",
|
||
"10.0.0.0/8"
|
||
]
|
||
```
|
||
|
||
#### Validation
|
||
|
||
```toml
|
||
[validation]
|
||
max_connection_timeout = 10
|
||
health_check_interval = 300
|
||
blacklist_threshold = 5
|
||
whitelist_enabled = false
|
||
certificate_verification = true
|
||
```
|
||
|
||
## 🔧 Configuration Tor
|
||
|
||
### 1. Image et service Tor
|
||
|
||
- Le service Tor est désormais construit localement depuis `tor/Dockerfile` et monté avec `tor/torrc`.
|
||
- Le conteneur tourne en utilisateur `debian-tor` et expose uniquement le SOCKS (9050) et, en interne, un ControlPort local (127.0.0.1:9051).
|
||
|
||
Extrait `docker-compose.yml` (service `tor`):
|
||
|
||
```yaml
|
||
services:
|
||
tor:
|
||
build: ./tor
|
||
image: 4nk_node-tor
|
||
container_name: tor-proxy
|
||
ports:
|
||
- "9050:9050"
|
||
- "9051:9051"
|
||
volumes:
|
||
- ./tor/torrc:/etc/tor/torrc:ro
|
||
command: ["tor", "-f", "/etc/tor/torrc"]
|
||
healthcheck:
|
||
test: ["CMD-SHELL", "nc -z 127.0.0.1 9050"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
networks:
|
||
- btcnet
|
||
```
|
||
|
||
### 2. Fichier `tor/torrc`
|
||
|
||
Configuration de base (extrait) :
|
||
|
||
```ini
|
||
SocksPort 0.0.0.0:9050
|
||
ControlPort 127.0.0.1:9051
|
||
DataDirectory /var/lib/tor
|
||
Log notice stdout
|
||
ClientUseIPv6 1
|
||
SafeLogging 1
|
||
ReducedConnectionPadding 1
|
||
SocksPolicy accept 0.0.0.0/0
|
||
AutomapHostsOnResolve 1
|
||
```
|
||
|
||
### 3. Bridges obfs4 (optionnels)
|
||
|
||
Pour contourner des filtrages réseaux, activer les bridges obfs4 dans `tor/torrc` :
|
||
|
||
```ini
|
||
UseBridges 1
|
||
ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
|
||
Bridge obfs4 81.64.0.218:6697 53E6469DC06BED50543AED0311D66082F4B66676 cert=zOKy+MnZ4wWbKcENcyaElPu62PEaXdE/c802ssuzCIDa2aIC1+J4LyfPhAwSiLaAo/I/bg iat-mode=0
|
||
Bridge obfs4 198.98.53.149:443 886CA31F71272FC8B3808C601FA3ABB8A2905DB4 cert=D+zypuFdMpP8riBUbInxIguzqClR0JKkP1DbkKz5es1+OP2Fao8jiXyM+B/+DYA2ZFy6UA iat-mode=0
|
||
```
|
||
|
||
L’image Tor installe `obfs4proxy`. Après modification :
|
||
|
||
```bash
|
||
sudo docker compose build tor
|
||
sudo docker compose up -d tor
|
||
```
|
||
|
||
Vérifications :
|
||
|
||
```bash
|
||
sudo docker compose ps tor
|
||
sudo docker logs tor-proxy --tail=40
|
||
sudo docker exec tor-proxy nc -z 127.0.0.1 9050 && echo SOCKS:OK
|
||
```
|
||
|
||
#### Notes et recommandations (Tor/bridges)
|
||
|
||
- Le `ControlPort 127.0.0.1:9051` est utilisé pour le diagnostic interne. Ne pas l’exposer publiquement. Une authentification peut être activée si un contrôle à distance est requis.
|
||
- Les bridges obfs4 ci‑dessus proviennent de la page de référence du Tor Project. En cas d’échec répété (messages « general SOCKS server failure » côté Tor), ajouter 2–3 bridges supplémentaires depuis la même source et redémarrer le service Tor.
|
||
- Pour faciliter l’ajout à chaud de bridges, un fichier `tor/bridges.extra` est monté en lecture seule dans le conteneur et inclus via `%include /etc/tor/bridges.extra`. Vous pouvez y coller de nouveaux bridges sans modifier `tor/torrc`, puis redémarrer Tor.
|
||
- Les tests de connectivité doivent distinguer :
|
||
- Accès SOCKS vers des services onion « publics » (ex. DuckDuckGo) pour valider le proxy Tor.
|
||
- Accès SOCKS vers l’onion cible du signet pour valider la reachability du pair.
|
||
- À la date d’édition, le proxy SOCKS fonctionne (onion publics accessibles), mais le pair signet `.onion:38333` est injoignable (host unreachable). La configuration du signet (signetchallenge et addnode) doit rester inchangée, conformément à la contrainte fonctionnelle.
|
||
|
||
#### Outils de diagnostic réseau
|
||
|
||
- Installer `netcat-openbsd` sur l’hôte et dans les conteneurs pertinents pour faciliter les vérifications :
|
||
- Hôte : `sudo apt-get install -y netcat-openbsd`
|
||
- Conteneur Bitcoin (root) : `apt-get update && apt-get install -y --no-install-recommends netcat-openbsd`
|
||
- Exemples de vérifications :
|
||
- `nc -vz -w 10 -x 127.0.0.1:9050 -X 5 <onion> 80`
|
||
- `nc -vz -w 10 -x 127.0.0.1:9050 -X 5 <onion_signet> 38333`
|
||
|
||
#### DNS externes (ex. dev.4nkweb.com)
|
||
|
||
- Si un nom de domaine (ex. `dev.4nkweb.com`) doit pointer vers un service, s’assurer qu’un enregistrement DNS A/AAAA existe. En l’absence de résolution, les tests échoueront côté HTTP/HTTPS et TCP.
|
||
- En phase de test, une entrée temporaire peut être ajoutée dans `/etc/hosts` si l’IP est connue.
|
||
|
||
## 🔧 Configuration Docker Compose
|
||
|
||
### 1. Configuration de Base
|
||
|
||
Fichier : `docker-compose.yml`
|
||
|
||
```yaml
|
||
# Compose modernisé (sans clé version), publication unique via reverse proxy
|
||
services:
|
||
reverse_proxy:
|
||
image: nginx:alpine
|
||
depends_on:
|
||
- sdk_relay_1
|
||
volumes:
|
||
- ./proxy/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||
- ./certs:/etc/nginx/certs:ro
|
||
- ./ihm_client/dist:/usr/share/nginx/html:ro
|
||
ports:
|
||
- "80:80"
|
||
- "443:443"
|
||
networks:
|
||
btcnet:
|
||
aliases:
|
||
- reverse_proxy
|
||
|
||
# Tous les autres services sont internes (pas de ports exposés)
|
||
bitcoin:
|
||
networks:
|
||
- btcnet
|
||
blindbit:
|
||
networks:
|
||
- btcnet
|
||
sdk_relay_1:
|
||
networks:
|
||
- btcnet
|
||
```
|
||
|
||
### 2. Configuration Avancée
|
||
|
||
#### Ressources
|
||
|
||
```yaml
|
||
services:
|
||
bitcoin:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 2G
|
||
cpus: '1.0'
|
||
reservations:
|
||
memory: 1G
|
||
cpus: '0.5'
|
||
|
||
sdk_relay_1:
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 512M
|
||
cpus: '0.5'
|
||
reservations:
|
||
memory: 256M
|
||
cpus: '0.25'
|
||
```
|
||
|
||
#### Sécurité
|
||
|
||
```yaml
|
||
services:
|
||
bitcoin:
|
||
security_opt:
|
||
- no-new-privileges:true
|
||
read_only: false
|
||
tmpfs:
|
||
- /tmp:noexec,nosuid,size=100m
|
||
|
||
sdk_relay_1:
|
||
security_opt:
|
||
- no-new-privileges:true
|
||
read_only: false
|
||
tmpfs:
|
||
- /tmp:noexec,nosuid,size=50m
|
||
```
|
||
|
||
## 🔧 Configuration SSL/TLS
|
||
|
||
### 1. Certificat Auto-Signé
|
||
|
||
```bash
|
||
# Générer et protéger des certificats auto-signés
|
||
./scripts/generate_certs.sh
|
||
|
||
# Les certificats sont montés par le reverse proxy :
|
||
# - certs/server.crt -> /etc/nginx/certs/server.crt
|
||
# - certs/server.key -> /etc/nginx/certs/server.key
|
||
```
|
||
|
||
### 2. Certificat Let's Encrypt
|
||
|
||
```bash
|
||
# Installer certbot
|
||
sudo apt install certbot python3-certbot-nginx
|
||
|
||
# Obtenir un certificat
|
||
sudo certbot --nginx -d your-domain.com
|
||
|
||
# Configuration automatique
|
||
sudo certbot renew --dry-run
|
||
```
|
||
|
||
## 🔧 Configuration de Monitoring
|
||
|
||
### 1. Prometheus
|
||
|
||
```yaml
|
||
# docker-compose.yml addition
|
||
services:
|
||
prometheus:
|
||
image: prom/prometheus:latest
|
||
container_name: prometheus
|
||
ports:
|
||
- "9090:9090"
|
||
volumes:
|
||
- ./prometheus.yml:/etc/prometheus/prometheus.yml
|
||
- prometheus_data:/prometheus
|
||
command:
|
||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||
- '--storage.tsdb.path=/prometheus'
|
||
- '--web.console.libraries=/etc/prometheus/console_libraries'
|
||
- '--web.console.templates=/etc/prometheus/consoles'
|
||
- '--storage.tsdb.retention.time=200h'
|
||
- '--web.enable-lifecycle'
|
||
|
||
grafana:
|
||
image: grafana/grafana:latest
|
||
container_name: grafana
|
||
ports:
|
||
- "3000:3000"
|
||
volumes:
|
||
- grafana_data:/var/lib/grafana
|
||
environment:
|
||
- GF_SECURITY_ADMIN_PASSWORD=admin
|
||
|
||
volumes:
|
||
prometheus_data:
|
||
grafana_data:
|
||
```
|
||
|
||
### 2. Configuration Prometheus
|
||
|
||
Fichier : `prometheus.yml`
|
||
|
||
```yaml
|
||
global:
|
||
scrape_interval: 15s
|
||
evaluation_interval: 15s
|
||
|
||
rule_files:
|
||
# - "first_rules.yml"
|
||
# - "second_rules.yml"
|
||
|
||
scrape_configs:
|
||
- job_name: 'bitcoin'
|
||
static_configs:
|
||
- targets: ['bitcoin:18443']
|
||
|
||
- job_name: 'blindbit'
|
||
static_configs:
|
||
- targets: ['blindbit:8000']
|
||
|
||
- job_name: 'sdk_relay'
|
||
static_configs:
|
||
- targets: ['sdk_relay_1:8091']
|
||
```
|
||
|
||
## 🔧 Configuration de Sauvegarde
|
||
|
||
### 1. Script de Sauvegarde
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# backup_4nk.sh
|
||
|
||
DATE=$(date +%Y%m%d_%H%M%S)
|
||
BACKUP_DIR="/backup/4nk_node_$DATE"
|
||
|
||
mkdir -p $BACKUP_DIR
|
||
|
||
# Sauvegarder les configurations
|
||
cp -r sdk_relay/.conf* $BACKUP_DIR/
|
||
cp external_nodes.conf $BACKUP_DIR/
|
||
cp bitcoin/bitcoin.conf $BACKUP_DIR/
|
||
cp blindbit/blindbit.toml $BACKUP_DIR/
|
||
|
||
# Sauvegarder les données Bitcoin
|
||
docker exec bitcoin-signet tar czf /tmp/bitcoin-backup.tar.gz /home/bitcoin/.bitcoin
|
||
docker cp bitcoin-signet:/tmp/bitcoin-backup.tar.gz $BACKUP_DIR/
|
||
|
||
# Sauvegarder les données Blindbit
|
||
docker exec blindbit-oracle tar czf /tmp/blindbit-backup.tar.gz /data
|
||
docker cp blindbit-oracle:/tmp/blindbit-backup.tar.gz $BACKUP_DIR/
|
||
|
||
# Sauvegarder les données des relais
|
||
for i in {1..3}; do
|
||
docker exec sdk_relay_$i tar czf /tmp/relay_$i-backup.tar.gz /home/bitcoin/.4nk
|
||
docker cp sdk_relay_$i:/tmp/relay_$i-backup.tar.gz $BACKUP_DIR/
|
||
done
|
||
|
||
# Nettoyer les anciennes sauvegardes (garder 7 jours)
|
||
find /backup -name "4nk_node_*" -type d -mtime +7 -exec rm -rf {} \;
|
||
|
||
echo "Sauvegarde terminée: $BACKUP_DIR"
|
||
```
|
||
|
||
### 2. Configuration Cron
|
||
|
||
```bash
|
||
# Ajouter au cron pour sauvegarde automatique
|
||
echo "0 2 * * * /path/to/backup_4nk.sh" | crontab -
|
||
```
|
||
|
||
## 🔧 Configuration de Logs
|
||
|
||
### 1. Rotation des Logs
|
||
|
||
```bash
|
||
# Configuration logrotate
|
||
cat > /etc/logrotate.d/4nk-node << EOF
|
||
/var/lib/docker/containers/*/*.log {
|
||
daily
|
||
rotate 7
|
||
compress
|
||
delaycompress
|
||
missingok
|
||
notifempty
|
||
copytruncate
|
||
size 100M
|
||
}
|
||
EOF
|
||
```
|
||
|
||
### 2. Centralisation des Logs
|
||
|
||
```yaml
|
||
# docker-compose.yml addition
|
||
services:
|
||
elasticsearch:
|
||
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
|
||
container_name: elasticsearch
|
||
environment:
|
||
- discovery.type=single-node
|
||
ports:
|
||
- "9200:9200"
|
||
volumes:
|
||
- elasticsearch_data:/usr/share/elasticsearch/data
|
||
|
||
kibana:
|
||
image: docker.elastic.co/kibana/kibana:7.17.0
|
||
container_name: kibana
|
||
ports:
|
||
- "5601:5601"
|
||
depends_on:
|
||
- elasticsearch
|
||
|
||
filebeat:
|
||
image: docker.elastic.co/beats/filebeat:7.17.0
|
||
container_name: filebeat
|
||
volumes:
|
||
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
||
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
|
||
depends_on:
|
||
- elasticsearch
|
||
|
||
volumes:
|
||
elasticsearch_data:
|
||
```
|
||
|
||
## 📝 Checklist de Configuration
|
||
|
||
- [ ] Variables d'environnement configurées
|
||
- [ ] Configuration Bitcoin Core vérifiée
|
||
- [ ] Configuration Blindbit vérifiée
|
||
- [ ] Configurations des relais vérifiées
|
||
- [ ] Configuration des nœuds externes vérifiée
|
||
- [ ] Configuration Tor vérifiée
|
||
- [ ] Configuration Docker Compose vérifiée
|
||
- [ ] SSL/TLS configuré (si nécessaire)
|
||
- [ ] Monitoring configuré (si nécessaire)
|
||
- [ ] Sauvegarde configurée
|
||
- [ ] Logs configurés
|
||
- [ ] Pare-feu configuré
|
||
- [ ] Tests de configuration passés
|
||
|
||
## 🎯 Commandes de Configuration
|
||
|
||
```bash
|
||
# Vérifier la configuration
|
||
docker-compose config
|
||
|
||
# Tester la configuration
|
||
./test_final_sync.sh
|
||
|
||
# Appliquer la configuration
|
||
./restart_4nk_node.sh
|
||
|
||
# Vérifier les logs
|
||
docker-compose logs --tail=50
|
||
```
|
||
|
||
---
|