**Motivations:** - Add API services for anchorage and faucet functionality - Add dashboard interface for signet monitoring - Improve documentation and maintenance guides - Enhance existing scripts for better functionality **Root causes:** - Need for API services to interact with Bitcoin Signet - Need for user-friendly dashboard interface - Need for comprehensive documentation - Scripts required improvements for better reliability **Correctifs:** - Updated Dockerfile with better configuration - Improved gen-bitcoind-conf.sh and gen-signet-keys.sh scripts - Enhanced mine.sh, miner, run.sh, and setup-signet.sh scripts - Updated env.example with new configuration options **Evolutions:** - Added api-anchorage service with anchor functionality - Added api-faucet service for testnet coin distribution - Added signet-dashboard for monitoring and management - Added comprehensive documentation in docs/ directory - Added configure-nginx-proxy.sh for proxy configuration - Added update-signet.sh for signet updates - Added ETAT_SYSTEME.md and START_DASHBOARD_AND_FAUCET.md guides - Added .bitcoin-version file for version tracking **Pages affectées:** - Dockerfile - env.example - gen-bitcoind-conf.sh - gen-signet-keys.sh - mine.sh - miner - run.sh - setup-signet.sh - api-anchorage/ (new) - api-faucet/ (new) - signet-dashboard/ (new) - docs/ (new) - configure-nginx-proxy.sh (new) - update-signet.sh (new) - ETAT_SYSTEME.md (new) - START_DASHBOARD_AND_FAUCET.md (new) - .bitcoin-version (new) - .env (modified) - mempool/ (added)
400 lines
8.1 KiB
Markdown
400 lines
8.1 KiB
Markdown
# Guide de Déploiement - API d'Ancrage Bitcoin Signet
|
|
|
|
**Auteur** : Équipe 4NK
|
|
**Date** : 2026-01-23
|
|
**Version** : 1.0
|
|
|
|
## Vue d'Ensemble
|
|
|
|
Ce guide explique comment déployer l'API d'ancrage Bitcoin Signet sur le serveur de production (192.168.1.103) et la configurer pour être accessible via nginx sur le proxy (192.168.1.100) au domaine `certificator.4nkweb.com`.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
Internet
|
|
↓ HTTPS
|
|
certificator.4nkweb.com (DNS → 4nk.myftp.biz)
|
|
↓
|
|
Nginx Proxy (192.168.1.100:443)
|
|
↓ HTTP
|
|
API Anchor (192.168.1.103:3010)
|
|
↓ RPC
|
|
Bitcoin Signet Node (192.168.1.103:38332)
|
|
```
|
|
|
|
## Prérequis
|
|
|
|
- Serveur de production (192.168.1.103) accessible
|
|
- Nginx configuré sur le proxy (192.168.1.100)
|
|
- Nœud Bitcoin Signet fonctionnel sur 192.168.1.103:38332
|
|
- Node.js >= 18.0.0 installé sur le serveur de production
|
|
- Accès SSH au serveur de production
|
|
|
|
## Déploiement sur le Serveur de Production
|
|
|
|
### 1. Préparation du Serveur
|
|
|
|
```bash
|
|
# Se connecter au serveur de production
|
|
ssh prod
|
|
|
|
# Vérifier Node.js
|
|
node --version # Doit être >= 18.0.0
|
|
|
|
# Installer Node.js si nécessaire
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
```
|
|
|
|
### 2. Cloner et Installer l'API
|
|
|
|
```bash
|
|
# Créer le répertoire de déploiement
|
|
sudo mkdir -p /srv/4NK/certificator.4nkweb.com
|
|
sudo chown ncantu:ncantu /srv/4NK/certificator.4nkweb.com
|
|
cd /srv/4NK/certificator.4nkweb.com
|
|
|
|
# Cloner le dépôt (ou copier les fichiers)
|
|
# Si le code est dans un dépôt git :
|
|
# git clone <repository-url> .
|
|
|
|
# Ou copier les fichiers depuis votre machine locale
|
|
# scp -r api-anchorage/* ncantu@192.168.1.103:/srv/4NK/certificator.4nkweb.com/
|
|
```
|
|
|
|
### 3. Installation des Dépendances
|
|
|
|
```bash
|
|
cd /srv/4NK/certificator.4nkweb.com
|
|
npm install --production
|
|
```
|
|
|
|
### 4. Configuration
|
|
|
|
```bash
|
|
# Créer le fichier .env
|
|
cp .env.example .env
|
|
nano .env
|
|
```
|
|
|
|
Configuration recommandée pour la production :
|
|
|
|
```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
|
|
API_HOST=0.0.0.0
|
|
|
|
# API Keys (séparées par des virgules)
|
|
# IMPORTANT: Générer des clés sécurisées pour la production
|
|
API_KEYS=prod-api-key-1,prod-api-key-2
|
|
|
|
# Logging
|
|
LOG_LEVEL=info
|
|
|
|
# Mining Configuration
|
|
MINING_ENABLED=true
|
|
MINING_FEE_RATE=0.00001
|
|
```
|
|
|
|
**Sécurité** :
|
|
- Générer des clés API fortes (ex: `openssl rand -hex 32`)
|
|
- Ne jamais commiter le fichier `.env`
|
|
- Utiliser des mots de passe RPC différents de ceux par défaut en production
|
|
|
|
### 5. Test Local
|
|
|
|
```bash
|
|
# Tester que l'API démarre
|
|
npm start
|
|
|
|
# Dans un autre terminal, tester
|
|
curl http://localhost:3010/health
|
|
```
|
|
|
|
### 6. Déploiement avec PM2 (Recommandé)
|
|
|
|
```bash
|
|
# Installer PM2 globalement
|
|
sudo npm install -g pm2
|
|
|
|
# Démarrer l'API avec PM2
|
|
pm2 start src/server.js --name anchor-api
|
|
|
|
# Sauvegarder la configuration PM2
|
|
pm2 save
|
|
|
|
# Configurer PM2 pour démarrer au boot
|
|
pm2 startup
|
|
# Suivre les instructions affichées
|
|
```
|
|
|
|
### 7. Vérification
|
|
|
|
```bash
|
|
# Vérifier que l'API fonctionne
|
|
curl http://localhost:3010/health
|
|
|
|
# Vérifier les logs PM2
|
|
pm2 logs anchor-api
|
|
|
|
# Vérifier le statut
|
|
pm2 status
|
|
```
|
|
|
|
## Configuration Nginx sur le Proxy
|
|
|
|
### 1. Se Connecter au Proxy
|
|
|
|
```bash
|
|
ssh proxy
|
|
```
|
|
|
|
### 2. Créer la Configuration Nginx
|
|
|
|
```bash
|
|
sudo nano /etc/nginx/sites-available/certificator.4nkweb.com
|
|
```
|
|
|
|
Contenu :
|
|
|
|
```nginx
|
|
# API Anchor sur certificator.4nkweb.com
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name certificator.4nkweb.com;
|
|
|
|
# Certificats SSL (Let's Encrypt)
|
|
ssl_certificate /etc/letsencrypt/live/certificator.4nkweb.com/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/certificator.4nkweb.com/privkey.pem;
|
|
|
|
# Configuration SSL
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
|
ssl_prefer_server_ciphers on;
|
|
|
|
# Logs
|
|
access_log /var/log/nginx/certificator.4nkweb.com.access.log;
|
|
error_log /var/log/nginx/certificator.4nkweb.com.error.log;
|
|
|
|
# Proxy vers l'API
|
|
location / {
|
|
proxy_pass http://192.168.1.103:3010;
|
|
proxy_http_version 1.1;
|
|
|
|
# Headers
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
|
|
# Timeouts
|
|
proxy_connect_timeout 60s;
|
|
proxy_send_timeout 60s;
|
|
proxy_read_timeout 60s;
|
|
|
|
# Cache
|
|
proxy_cache_bypass $http_upgrade;
|
|
}
|
|
}
|
|
|
|
# Redirection HTTP vers HTTPS
|
|
server {
|
|
listen 80;
|
|
server_name certificator.4nkweb.com;
|
|
return 301 https://$server_name$request_uri;
|
|
}
|
|
```
|
|
|
|
### 3. Activer la Configuration
|
|
|
|
```bash
|
|
# Créer le lien symbolique
|
|
sudo ln -s /etc/nginx/sites-available/certificator.4nkweb.com /etc/nginx/sites-enabled/
|
|
|
|
# Tester la configuration
|
|
sudo nginx -t
|
|
|
|
# Recharger nginx
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### 4. Obtenir le Certificat SSL
|
|
|
|
```bash
|
|
# Obtenir le certificat Let's Encrypt
|
|
sudo certbot --nginx -d certificator.4nkweb.com
|
|
|
|
# Vérifier le renouvellement automatique
|
|
sudo certbot renew --dry-run
|
|
```
|
|
|
|
## Vérification Post-Déploiement
|
|
|
|
### 1. Vérifier l'API Localement
|
|
|
|
```bash
|
|
# Sur le serveur de production
|
|
curl http://localhost:3010/health
|
|
```
|
|
|
|
### 2. Vérifier via le Proxy
|
|
|
|
```bash
|
|
# Depuis n'importe quelle machine
|
|
curl https://certificator.4nkweb.com/health
|
|
```
|
|
|
|
### 3. Tester l'Ancrage
|
|
|
|
```bash
|
|
# Utiliser le client de test
|
|
cd /srv/4NK/certificator.4nkweb.com
|
|
export API_KEY=prod-api-key-1
|
|
export API_URL=https://certificator.4nkweb.com
|
|
npm test
|
|
```
|
|
|
|
## Maintenance
|
|
|
|
### Redémarrage de l'API
|
|
|
|
```bash
|
|
# Via PM2
|
|
pm2 restart anchor-api
|
|
|
|
# Ou arrêter/démarrer
|
|
pm2 stop anchor-api
|
|
pm2 start anchor-api
|
|
```
|
|
|
|
### Mise à Jour
|
|
|
|
```bash
|
|
# Arrêter l'API
|
|
pm2 stop anchor-api
|
|
|
|
# Mettre à jour le code
|
|
cd /srv/4NK/certificator.4nkweb.com
|
|
git pull # ou copier les nouveaux fichiers
|
|
|
|
# Mettre à jour les dépendances si nécessaire
|
|
npm install --production
|
|
|
|
# Redémarrer
|
|
pm2 start anchor-api
|
|
```
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# Voir les logs en temps réel
|
|
pm2 logs anchor-api
|
|
|
|
# Voir les logs nginx
|
|
sudo tail -f /var/log/nginx/certificator.4nkweb.com.access.log
|
|
sudo tail -f /var/log/nginx/certificator.4nkweb.com.error.log
|
|
```
|
|
|
|
### Monitoring
|
|
|
|
```bash
|
|
# Statut PM2
|
|
pm2 status
|
|
|
|
# Informations détaillées
|
|
pm2 info anchor-api
|
|
|
|
# Monitoring en temps réel
|
|
pm2 monit
|
|
```
|
|
|
|
## Dépannage
|
|
|
|
### L'API ne répond pas
|
|
|
|
1. **Vérifier que l'API est démarrée** :
|
|
```bash
|
|
pm2 status
|
|
```
|
|
|
|
2. **Vérifier les logs** :
|
|
```bash
|
|
pm2 logs anchor-api --lines 50
|
|
```
|
|
|
|
3. **Vérifier le port** :
|
|
```bash
|
|
sudo netstat -tlnp | grep 3010
|
|
```
|
|
|
|
### Erreur de connexion Bitcoin RPC
|
|
|
|
1. **Vérifier que le nœud Bitcoin est accessible** :
|
|
```bash
|
|
curl -u bitcoin:bitcoin http://localhost:38332
|
|
```
|
|
|
|
2. **Vérifier les variables d'environnement** :
|
|
```bash
|
|
grep BITCOIN_RPC .env
|
|
```
|
|
|
|
### Erreur 502 Bad Gateway (Nginx)
|
|
|
|
1. **Vérifier que l'API est accessible depuis le proxy** :
|
|
```bash
|
|
# Depuis le proxy
|
|
curl http://192.168.1.103:3010/health
|
|
```
|
|
|
|
2. **Vérifier les logs nginx** :
|
|
```bash
|
|
sudo tail -f /var/log/nginx/certificator.4nkweb.com.error.log
|
|
```
|
|
|
|
3. **Vérifier le firewall** :
|
|
```bash
|
|
# Sur le serveur de production
|
|
sudo ufw status
|
|
# Le port 3010 doit être ouvert pour le réseau interne
|
|
```
|
|
|
|
## Sécurité
|
|
|
|
### Recommandations
|
|
|
|
1. **Clés API** :
|
|
- Générer des clés fortes (32+ caractères aléatoires)
|
|
- Rotater régulièrement
|
|
- Ne jamais les exposer publiquement
|
|
|
|
2. **RPC Bitcoin** :
|
|
- Utiliser des credentials différents en production
|
|
- Restreindre `RPCALLOWIP` dans bitcoin.conf
|
|
- Utiliser `rpcauth` au lieu de `rpcuser`/`rpcpassword`
|
|
|
|
3. **HTTPS** :
|
|
- Toujours utiliser HTTPS en production
|
|
- Renouveler automatiquement les certificats Let's Encrypt
|
|
|
|
4. **Firewall** :
|
|
- Ne pas exposer le port 3010 publiquement
|
|
- Utiliser nginx comme reverse proxy uniquement
|
|
|
|
5. **Logs** :
|
|
- Ne pas logger les clés API
|
|
- Surveiller les tentatives d'accès non autorisées
|
|
|
|
---
|
|
|
|
**Dernière mise à jour** : 2026-01-23
|