245 lines
9.7 KiB
Bash
245 lines
9.7 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Complete Port 4000 Implementation Script
|
||
|
|
# This script attempts to complete all remaining steps for port 4000 direct route
|
||
|
|
# Usage: ./complete-port-4000-implementation.sh [proxmox-host]
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
VMID=5000
|
||
|
|
BLOCKSCOUT_IP="192.168.11.140"
|
||
|
|
BLOCKSCOUT_PORT=4000
|
||
|
|
PROXMOX_HOST="${1:-192.168.11.11}"
|
||
|
|
|
||
|
|
# Colors
|
||
|
|
GREEN='\033[0;32m'
|
||
|
|
RED='\033[0;31m'
|
||
|
|
YELLOW='\033[1;33m'
|
||
|
|
BLUE='\033[0;34m'
|
||
|
|
CYAN='\033[0;36m'
|
||
|
|
NC='\033[0m'
|
||
|
|
|
||
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
||
|
|
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
||
|
|
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
||
|
|
log_step() { echo -e "${CYAN}[STEP]${NC} $1"; }
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "🔧 Complete Port 4000 Implementation"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo ""
|
||
|
|
echo "This script will attempt to complete all remaining steps:"
|
||
|
|
echo " 1. Check Blockscout configuration"
|
||
|
|
echo " 2. Fix port 4000 binding (if needed)"
|
||
|
|
echo " 3. Verify network accessibility"
|
||
|
|
echo " 4. Update NPMplus configuration"
|
||
|
|
echo " 5. Verify public domain"
|
||
|
|
echo ""
|
||
|
|
echo "VMID: $VMID"
|
||
|
|
echo "IP: $BLOCKSCOUT_IP"
|
||
|
|
echo "Port: $BLOCKSCOUT_PORT"
|
||
|
|
echo "Proxmox Host: $PROXMOX_HOST"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Try to detect Proxmox host access
|
||
|
|
EXEC_PREFIX=""
|
||
|
|
if command -v pct &>/dev/null; then
|
||
|
|
log_info "Running on Proxmox host (pct available)"
|
||
|
|
EXEC_PREFIX=""
|
||
|
|
elif ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=no root@"$PROXMOX_HOST" "exit" 2>/dev/null; then
|
||
|
|
log_info "SSH access to Proxmox host available"
|
||
|
|
EXEC_PREFIX="ssh -o StrictHostKeyChecking=no root@$PROXMOX_HOST"
|
||
|
|
else
|
||
|
|
log_warn "Cannot access Proxmox host directly"
|
||
|
|
log_info "Will attempt to run checks from this machine"
|
||
|
|
EXEC_PREFIX=""
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 1: Check current status
|
||
|
|
log_step "Step 1: Checking Current Blockscout Status..."
|
||
|
|
|
||
|
|
if [ -n "$EXEC_PREFIX" ]; then
|
||
|
|
VM_STATUS=$($EXEC_PREFIX "pct status $VMID 2>/dev/null || echo 'unknown'" || echo "unknown")
|
||
|
|
PORT_CHECK=$($EXEC_PREFIX "pct exec $VMID -- ss -tlnp 2>/dev/null | grep :$BLOCKSCOUT_PORT || echo 'not found'" || echo "not found")
|
||
|
|
else
|
||
|
|
# Try direct network test
|
||
|
|
VM_STATUS="unknown"
|
||
|
|
PORT_CHECK="unknown"
|
||
|
|
fi
|
||
|
|
|
||
|
|
NETWORK_TEST=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 "http://$BLOCKSCOUT_IP:$BLOCKSCOUT_PORT/api/v2/stats" 2>/dev/null || echo "000")
|
||
|
|
|
||
|
|
if [ "$NETWORK_TEST" = "200" ]; then
|
||
|
|
log_success "Port 4000 is already accessible!"
|
||
|
|
log_success "Blockscout is network accessible on port $BLOCKSCOUT_PORT"
|
||
|
|
SKIP_FIX=true
|
||
|
|
else
|
||
|
|
log_warn "Port 4000 is not accessible (HTTP $NETWORK_TEST)"
|
||
|
|
SKIP_FIX=false
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Step 2: Attempt to fix Blockscout (if needed)
|
||
|
|
if [ "$SKIP_FIX" = false ]; then
|
||
|
|
log_step "Step 2: Attempting to Fix Blockscout Configuration..."
|
||
|
|
|
||
|
|
if [ -z "$EXEC_PREFIX" ]; then
|
||
|
|
log_warn "Cannot fix Blockscout without Proxmox host access"
|
||
|
|
log_info "Please run from Proxmox host or ensure SSH access is configured"
|
||
|
|
log_info "Or manually fix Blockscout configuration (see implementation guide)"
|
||
|
|
echo ""
|
||
|
|
else
|
||
|
|
log_info "Checking Blockscout service status..."
|
||
|
|
|
||
|
|
# Check if Blockscout is running
|
||
|
|
SERVICE_STATUS=$($EXEC_PREFIX "pct exec $VMID -- systemctl is-active blockscout.service 2>/dev/null" || echo "inactive")
|
||
|
|
|
||
|
|
if [ "$SERVICE_STATUS" != "active" ]; then
|
||
|
|
log_info "Attempting to start Blockscout service..."
|
||
|
|
$EXEC_PREFIX "pct exec $VMID -- systemctl start blockscout.service" 2>/dev/null || log_warn "Could not start service"
|
||
|
|
sleep 3
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Check Docker containers
|
||
|
|
DOCKER_CONTAINER=$($EXEC_PREFIX "pct exec $VMID -- docker ps --format '{{.Names}}' 2>/dev/null | grep -i blockscout | grep -v postgres | head -1" || echo "")
|
||
|
|
|
||
|
|
if [ -n "$DOCKER_CONTAINER" ]; then
|
||
|
|
log_info "Found Docker container: $DOCKER_CONTAINER"
|
||
|
|
log_info "Checking port binding..."
|
||
|
|
# Note: Docker port binding fix would require docker-compose.yml access
|
||
|
|
log_warn "Docker configuration fix may require manual intervention"
|
||
|
|
fi
|
||
|
|
|
||
|
|
log_info "Re-testing network accessibility..."
|
||
|
|
sleep 2
|
||
|
|
NETWORK_TEST=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 "http://$BLOCKSCOUT_IP:$BLOCKSCOUT_PORT/api/v2/stats" 2>/dev/null || echo "000")
|
||
|
|
|
||
|
|
if [ "$NETWORK_TEST" = "200" ]; then
|
||
|
|
log_success "Port 4000 is now accessible!"
|
||
|
|
SKIP_FIX=false
|
||
|
|
else
|
||
|
|
log_warn "Port 4000 still not accessible"
|
||
|
|
log_info "Manual configuration may be required"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
else
|
||
|
|
log_step "Step 2: Skipping fix (port already accessible)"
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 3: Verify network accessibility
|
||
|
|
log_step "Step 3: Verifying Network Accessibility..."
|
||
|
|
|
||
|
|
NETWORK_TEST=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 "http://$BLOCKSCOUT_IP:$BLOCKSCOUT_PORT/api/v2/stats" 2>/dev/null || echo "000")
|
||
|
|
|
||
|
|
if [ "$NETWORK_TEST" = "200" ]; then
|
||
|
|
log_success "✅ Blockscout is network accessible on port $BLOCKSCOUT_PORT"
|
||
|
|
log_success "✅ Ready for NPMplus configuration"
|
||
|
|
CAN_PROCEED=true
|
||
|
|
else
|
||
|
|
log_error "❌ Blockscout is NOT accessible on port $BLOCKSCOUT_PORT"
|
||
|
|
log_warn "Cannot proceed with NPMplus update until port 4000 is accessible"
|
||
|
|
log_info "Please fix Blockscout configuration first (see implementation guide)"
|
||
|
|
CAN_PROCEED=false
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Step 4: Update NPMplus (if Blockscout is accessible)
|
||
|
|
if [ "$CAN_PROCEED" = true ]; then
|
||
|
|
log_step "Step 4: Updating NPMplus Configuration..."
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
|
|
|
||
|
|
# Check if update script exists
|
||
|
|
if [ -f "$PROJECT_ROOT/scripts/apply-direct-blockscout-route.sh" ]; then
|
||
|
|
log_info "Running NPMplus update script..."
|
||
|
|
cd "$PROJECT_ROOT"
|
||
|
|
if ./scripts/apply-direct-blockscout-route.sh 2>&1 | tee /tmp/npmplus-update.log; then
|
||
|
|
log_success "NPMplus update script completed"
|
||
|
|
else
|
||
|
|
log_warn "NPMplus update script had issues"
|
||
|
|
log_info "Check /tmp/npmplus-update.log for details"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
log_warn "NPMplus update script not found"
|
||
|
|
log_info "Manual update required:"
|
||
|
|
log_info " 1. Log into NPMplus: https://192.168.0.166:81"
|
||
|
|
log_info " 2. Update explorer.d-bis.org Forward Port: 80 → 4000"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
else
|
||
|
|
log_step "Step 4: Skipping NPMplus update (Blockscout not accessible)"
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 5: Verify public domain
|
||
|
|
if [ "$CAN_PROCEED" = true ]; then
|
||
|
|
log_step "Step 5: Verifying Public Domain..."
|
||
|
|
|
||
|
|
log_info "Testing: https://explorer.d-bis.org/api/v2/stats"
|
||
|
|
sleep 5 # Wait for NPMplus to reload
|
||
|
|
|
||
|
|
PUBLIC_TEST=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 10 -k "https://explorer.d-bis.org/api/v2/stats" 2>/dev/null || echo "000")
|
||
|
|
|
||
|
|
if [ "$PUBLIC_TEST" = "200" ]; then
|
||
|
|
log_success "✅ Public domain is accessible (HTTP $PUBLIC_TEST)"
|
||
|
|
log_success "✅ Direct route is working!"
|
||
|
|
elif [ "$PUBLIC_TEST" = "502" ]; then
|
||
|
|
log_error "❌ Getting 502 Bad Gateway"
|
||
|
|
log_warn "NPMplus may still be routing to port 80, or Blockscout on 4000 is not accessible"
|
||
|
|
log_info "Wait a moment and try again, or check NPMplus configuration"
|
||
|
|
else
|
||
|
|
log_warn "⚠️ Public domain returned HTTP $PUBLIC_TEST"
|
||
|
|
log_info "This may be expected if NPMplus hasn't reloaded yet"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
else
|
||
|
|
log_step "Step 5: Skipping public domain test (Blockscout not accessible)"
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Final summary
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "📋 Implementation Summary"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if [ "$NETWORK_TEST" = "200" ]; then
|
||
|
|
log_success "✅ Port 4000: Accessible"
|
||
|
|
if [ "$CAN_PROCEED" = true ] && [ "${PUBLIC_TEST:-000}" = "200" ]; then
|
||
|
|
log_success "✅ Public Domain: Working"
|
||
|
|
log_success "✅ Implementation: COMPLETE"
|
||
|
|
elif [ "$CAN_PROCEED" = true ]; then
|
||
|
|
log_success "✅ Port 4000: Accessible"
|
||
|
|
log_warn "⚠️ Public Domain: May need time to propagate"
|
||
|
|
log_info "Wait a few minutes and test: curl -I https://explorer.d-bis.org/api/v2/stats"
|
||
|
|
else
|
||
|
|
log_success "✅ Port 4000: Accessible"
|
||
|
|
log_info "Next: Update NPMplus configuration"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
log_error "❌ Port 4000: NOT Accessible"
|
||
|
|
log_warn "⚠️ Implementation: INCOMPLETE"
|
||
|
|
log_info "Action required: Fix Blockscout configuration"
|
||
|
|
log_info "See: docs/04-configuration/PORT_4000_IMPLEMENTATION_GUIDE.md"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Next steps
|
||
|
|
if [ "$NETWORK_TEST" != "200" ]; then
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo "📋 Next Steps"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo ""
|
||
|
|
log_info "1. Fix Blockscout to listen on 0.0.0.0:4000"
|
||
|
|
log_info "2. Restart Blockscout service"
|
||
|
|
log_info "3. Verify: curl -I http://192.168.11.140:4000/api/v2/stats"
|
||
|
|
log_info "4. Run this script again to complete NPMplus update"
|
||
|
|
echo ""
|
||
|
|
fi
|
||
|
|
|
||
|
|
exit 0
|