**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)
8.1 KiB
8.1 KiB
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
# 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
# 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
cd /srv/4NK/certificator.4nkweb.com
npm install --production
4. Configuration
# Créer le fichier .env
cp .env.example .env
nano .env
Configuration recommandée pour la production :
# 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
# Tester que l'API démarre
npm start
# Dans un autre terminal, tester
curl http://localhost:3010/health
6. Déploiement avec PM2 (Recommandé)
# 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
# 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
ssh proxy
2. Créer la Configuration Nginx
sudo nano /etc/nginx/sites-available/certificator.4nkweb.com
Contenu :
# 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
# 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
# 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
# Sur le serveur de production
curl http://localhost:3010/health
2. Vérifier via le Proxy
# Depuis n'importe quelle machine
curl https://certificator.4nkweb.com/health
3. Tester l'Ancrage
# 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
# Via PM2
pm2 restart anchor-api
# Ou arrêter/démarrer
pm2 stop anchor-api
pm2 start anchor-api
Mise à Jour
# 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
# 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
# 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
-
Vérifier que l'API est démarrée :
pm2 status -
Vérifier les logs :
pm2 logs anchor-api --lines 50 -
Vérifier le port :
sudo netstat -tlnp | grep 3010
Erreur de connexion Bitcoin RPC
-
Vérifier que le nœud Bitcoin est accessible :
curl -u bitcoin:bitcoin http://localhost:38332 -
Vérifier les variables d'environnement :
grep BITCOIN_RPC .env
Erreur 502 Bad Gateway (Nginx)
-
Vérifier que l'API est accessible depuis le proxy :
# Depuis le proxy curl http://192.168.1.103:3010/health -
Vérifier les logs nginx :
sudo tail -f /var/log/nginx/certificator.4nkweb.com.error.log -
Vérifier le firewall :
# Sur le serveur de production sudo ufw status # Le port 3010 doit être ouvert pour le réseau interne
Sécurité
Recommandations
-
Clés API :
- Générer des clés fortes (32+ caractères aléatoires)
- Rotater régulièrement
- Ne jamais les exposer publiquement
-
RPC Bitcoin :
- Utiliser des credentials différents en production
- Restreindre
RPCALLOWIPdans bitcoin.conf - Utiliser
rpcauthau lieu derpcuser/rpcpassword
-
HTTPS :
- Toujours utiliser HTTPS en production
- Renouveler automatiquement les certificats Let's Encrypt
-
Firewall :
- Ne pas exposer le port 3010 publiquement
- Utiliser nginx comme reverse proxy uniquement
-
Logs :
- Ne pas logger les clés API
- Surveiller les tentatives d'accès non autorisées
Dernière mise à jour : 2026-01-23