#!/bin/bash # Script de diagnostic pour l'API d'Ancrage # Vérifie l'état du service, la connectivité et les logs set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo "=== Diagnostic API d'Ancrage ===" echo "" # Configuration BITCOIN_SERVER="192.168.1.105" # Machine bitcoin avec API d'ancrage PROD_SERVER="192.168.1.103" # Machine prod (pour référence) PROD_USER="ncantu" PROXY_SERVER="4nk.myftp.biz" API_URL="https://anchorage.certificator.4nkweb.com" # Domaine externe de l'API d'ancrage Bitcoin SERVICE_NAME="anchorage-api" PORT=3010 # Fonction pour exécuter une commande sur le serveur bitcoin (API d'ancrage) run_on_bitcoin() { ssh -J "${PROD_USER}@${PROXY_SERVER}" "${PROD_USER}@${BITCOIN_SERVER}" "$@" } echo "📡 Test de connectivité externe..." echo "" # Test 1: Vérifier que l'API répond depuis l'extérieur echo "1. Test de l'endpoint /health depuis l'extérieur..." HEALTH_RESPONSE=$(curl -s --max-time 10 "${API_URL}/health" || echo "FAILED") if [ "$HEALTH_RESPONSE" = "FAILED" ]; then echo "❌ L'API ne répond pas depuis l'extérieur" echo "" else echo "✅ L'API répond depuis l'extérieur" echo " Réponse: $HEALTH_RESPONSE" echo "" # Vérifier si la connexion Bitcoin fonctionne if echo "$HEALTH_RESPONSE" | grep -q '"connected":true'; then echo "✅ Connexion Bitcoin: OK" BLOCKS=$(echo "$HEALTH_RESPONSE" | grep -o '"blocks":[0-9]*' | grep -o '[0-9]*' || echo "0") echo " Blocs: $BLOCKS" else echo "⚠️ Connexion Bitcoin: PROBLÈME" echo " L'API répond mais ne peut pas se connecter à Bitcoin Core" fi echo "" fi # Test 2: Vérifier l'endpoint racine echo "2. Test de l'endpoint racine..." ROOT_RESPONSE=$(curl -s --max-time 10 "${API_URL}/" || echo "FAILED") if [ "$ROOT_RESPONSE" = "FAILED" ]; then echo "❌ L'endpoint racine ne répond pas" else echo "✅ L'endpoint racine répond" echo " Réponse: $ROOT_RESPONSE" fi echo "" # Test 3: Vérifier l'état du service sur le serveur bitcoin echo "3. État du service systemd sur le serveur bitcoin (192.168.1.105)..." echo " (Connexion via SSH via proxy...)" echo "" SERVICE_STATUS=$(run_on_bitcoin "sudo systemctl status ${SERVICE_NAME} --no-pager" 2>&1 || echo "FAILED") if echo "$SERVICE_STATUS" | grep -q "Active: active (running)"; then echo "✅ Service actif et en cours d'exécution" elif echo "$SERVICE_STATUS" | grep -q "Active: inactive"; then echo "❌ Service inactif" elif echo "$SERVICE_STATUS" | grep -q "Active: failed"; then echo "❌ Service en échec" else echo "⚠️ État du service indéterminé" fi echo "" # Test 4: Vérifier que le port est en écoute echo "4. Vérification du port ${PORT}..." PORT_CHECK=$(run_on_bitcoin "sudo ss -tlnp | grep :${PORT}" 2>&1 || echo "NOT_LISTENING") if [ "$PORT_CHECK" = "NOT_LISTENING" ] || [ -z "$PORT_CHECK" ]; then echo "❌ Le port ${PORT} n'est pas en écoute" else echo "✅ Le port ${PORT} est en écoute" echo " $PORT_CHECK" fi echo "" # Test 5: Vérifier les logs récents (dernières 50 lignes) echo "5. Logs récents du service (dernières 50 lignes)..." echo "" run_on_bitcoin "sudo journalctl -u ${SERVICE_NAME} -n 50 --no-pager" 2>&1 | tail -50 echo "" # Test 6: Vérifier les logs d'erreur récents echo "6. Logs d'erreur récents (dernières 20 lignes)..." echo "" run_on_bitcoin "sudo journalctl -u ${SERVICE_NAME} -p err -n 20 --no-pager" 2>&1 | tail -20 echo "" # Test 7: Vérifier la connexion Bitcoin RPC depuis le serveur bitcoin echo "7. Test de connexion Bitcoin RPC depuis le serveur bitcoin..." echo "" BITCOIN_RPC_TEST=$(run_on_bitcoin "curl -s --user bitcoin:bitcoin --data-binary '{\"jsonrpc\":\"1.0\",\"id\":\"test\",\"method\":\"getblockchaininfo\",\"params\":[]}' -H 'content-type: text/plain;' http://localhost:38332/" 2>&1 || echo "FAILED") if echo "$BITCOIN_RPC_TEST" | grep -q '"result"'; then echo "✅ Bitcoin RPC répond" BLOCKS_RPC=$(echo "$BITCOIN_RPC_TEST" | grep -o '"blocks":[0-9]*' | grep -o '[0-9]*' || echo "0") echo " Blocs: $BLOCKS_RPC" else echo "❌ Bitcoin RPC ne répond pas" echo " Réponse: $BITCOIN_RPC_TEST" fi echo "" # Test 8: Vérifier l'état du conteneur Docker Bitcoin (si applicable) echo "8. État du conteneur Docker Bitcoin..." echo "" DOCKER_STATUS=$(run_on_bitcoin "sudo docker ps --filter 'name=bitcoin' --format '{{.Names}} {{.Status}}'" 2>&1 || echo "NO_DOCKER") if [ "$DOCKER_STATUS" = "NO_DOCKER" ] || [ -z "$DOCKER_STATUS" ]; then echo "⚠️ Aucun conteneur Bitcoin trouvé ou Docker non disponible" else echo "✅ Conteneur Bitcoin:" echo "$DOCKER_STATUS" | while read -r line; do echo " $line" done fi echo "" # Résumé echo "=== Résumé ===" echo "" echo "Pour redémarrer le service:" echo " ssh -J ${PROD_USER}@${PROXY_SERVER} ${PROD_USER}@${BITCOIN_SERVER} 'sudo systemctl restart ${SERVICE_NAME}'" echo "" echo "Pour voir les logs en temps réel:" echo " ssh -J ${PROD_USER}@${PROXY_SERVER} ${PROD_USER}@${BITCOIN_SERVER} 'sudo journalctl -u ${SERVICE_NAME} -f'" echo "" echo "Note: L'API d'ancrage Bitcoin est sur la machine 192.168.1.105 (bitcoin), pas sur 192.168.1.103 (prod)" echo ""