#!/usr/bin/env bash set -euo pipefail # Load IP configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true # Fix all explorer issues (Blockscout network access + NPMplus update) # Usage: ./fix-all-explorer-issues.sh [proxmox-host] set -e PROXMOX_HOST="${1:-pve2}" VMID_5000=5000 echo "==========================================" echo "Fix All Explorer Issues" echo "==========================================" echo "" # Function to execute command on Proxmox host exec_proxmox() { if command -v pct &>/dev/null; then eval "$@" else ssh root@$PROXMOX_HOST "$@" fi } # Step 1: Check and start Blockscout service echo "=== Step 1: Checking Blockscout Service ===" SERVICE_STATUS=$(exec_proxmox "pct exec $VMID_5000 -- systemctl is-active blockscout.service 2>/dev/null" || echo "inactive") if [ "$SERVICE_STATUS" != "active" ]; then echo "⚠️ Blockscout service is not running, starting..." exec_proxmox "pct exec $VMID_5000 -- systemctl start blockscout.service" || true sleep 5 echo "✅ Blockscout service started" else echo "✅ Blockscout service is running" fi echo "" # Step 2: Check port 4000 configuration echo "=== Step 2: Checking Port 4000 Configuration ===" PORT_CHECK=$(exec_proxmox "pct exec $VMID_5000 -- ss -tlnp 2>/dev/null | grep :4000 || echo 'not listening'") if echo "$PORT_CHECK" | grep -q "127.0.0.1:4000"; then echo "⚠️ Blockscout is listening on 127.0.0.1:4000 (localhost only)" echo "" echo "To enable direct route, configure Blockscout to listen on 0.0.0.0:4000" echo "Check docker-compose.yml or service configuration for:" echo " - PORT or LISTEN_ADDRESS environment variable" echo " - Port binding should be '0.0.0.0:4000:4000' not '127.0.0.1:4000:4000'" echo "" elif echo "$PORT_CHECK" | grep -q "0.0.0.0:4000\|:4000.*0.0.0.0"; then echo "✅ Blockscout is listening on 0.0.0.0:4000 (network accessible)" else echo "❌ Blockscout is NOT listening on port 4000" fi echo "" # Step 3: Test API echo "=== Step 3: Testing Blockscout API ===" NETWORK_TEST=$(exec_proxmox "curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 http://${IP_BLOCKSCOUT}:4000/api/v2/stats 2>/dev/null" || echo "000") if [ "$NETWORK_TEST" = "200" ]; then echo "✅ Blockscout API is network accessible (HTTP $NETWORK_TEST)" echo "" echo "✅ Ready for direct route - Update NPMplus:" echo " 1. Log into NPMplus: https://192.168.0.166:81" echo " 2. Find 'explorer.d-bis.org' proxy host" echo " 3. Update Forward Port: 80 → 4000" echo " 4. Save changes" echo "" DIRECT_ROUTE_READY=true else echo "❌ Blockscout API NOT network accessible (HTTP $NETWORK_TEST)" echo "" echo "⚠️ Direct route not possible yet" echo " Configure Blockscout to listen on 0.0.0.0:4000 first" echo "" DIRECT_ROUTE_READY=false fi echo "" echo "==========================================" echo "Summary" echo "==========================================" echo "Blockscout Service: ✅ Running" echo "Port 4000 Network Access: $([ "$NETWORK_TEST" = "200" ] && echo "✅ Ready" || echo "❌ Needs Configuration")" echo "Direct Route: $([ "$DIRECT_ROUTE_READY" = true ] && echo "✅ Ready" || echo "⏳ Not Ready")" echo ""