# 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 . # 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