Files
proxmox/scripts/fix-all-blockscout-issues.sh
defiQUG cb47cce074 Complete markdown files cleanup and organization
- Organized 252 files across project
- Root directory: 187 → 2 files (98.9% reduction)
- Moved configuration guides to docs/04-configuration/
- Moved troubleshooting guides to docs/09-troubleshooting/
- Moved quick start guides to docs/01-getting-started/
- Moved reports to reports/ directory
- Archived temporary files
- Generated comprehensive reports and documentation
- Created maintenance scripts and guides

All files organized according to established standards.
2026-01-06 01:46:25 -08:00

218 lines
9.1 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Fix All Blockscout Issues - Comprehensive Update and Optimization
# Addresses: Docker image update, Nginx upgrade, configuration improvements
set -euo pipefail
VMID="${VMID:-5000}"
IP="${IP:-192.168.11.140}"
DOMAIN="${DOMAIN:-explorer.d-bis.org}"
PASSWORD="${PASSWORD:-L@kers2010}"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
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}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_step() { echo -e "${CYAN}[STEP]${NC} $1"; }
exec_container() {
local cmd="$1"
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no root@"$IP" "bash -c '$cmd'" 2>&1
}
echo "════════════════════════════════════════════════════════"
echo "Fix All Blockscout Issues - Comprehensive Update"
echo "════════════════════════════════════════════════════════"
echo ""
# Step 1: Backup current state
log_step "Step 1: Creating backup of current configuration..."
BACKUP_DIR="/tmp/blockscout-backup-$(date +%Y%m%d-%H%M%S)"
exec_container "mkdir -p $BACKUP_DIR && cd /opt/blockscout && cp docker-compose.yml $BACKUP_DIR/ && echo 'Backup created: $BACKUP_DIR'"
log_success "Backup created"
# Step 2: Check current versions
log_step "Step 2: Checking current versions..."
CURRENT_IMAGE=$(exec_container "docker images blockscout/blockscout:latest --format '{{.ID}}' | head -1")
CURRENT_NGINX=$(exec_container "nginx -v 2>&1 | grep -oP 'nginx/\K[0-9.]+'")
CURRENT_OPENSSL=$(exec_container "openssl version | grep -oP 'OpenSSL \K[0-9.]+'")
log_info "Current Blockscout Image ID: $CURRENT_IMAGE"
log_info "Current Nginx Version: $CURRENT_NGINX"
log_info "Current OpenSSL Version: $CURRENT_OPENSSL"
# Step 3: Update Blockscout Docker Image
log_step "Step 3: Updating Blockscout Docker Image..."
log_info "Pulling latest Blockscout image..."
exec_container "cd /opt/blockscout && docker-compose pull blockscout 2>&1 | tail -10"
NEW_IMAGE=$(exec_container "docker images blockscout/blockscout:latest --format '{{.ID}}' | head -1")
if [ "$CURRENT_IMAGE" != "$NEW_IMAGE" ]; then
log_success "New Blockscout image available: $NEW_IMAGE"
log_info "Restarting Blockscout with new image..."
exec_container "cd /opt/blockscout && docker-compose up -d blockscout 2>&1"
log_success "Blockscout restarted with new image"
else
log_info "Blockscout image is already up to date"
fi
# Step 4: Upgrade Nginx
log_step "Step 4: Upgrading Nginx..."
log_info "Adding Nginx official repository..."
exec_container "apt-get update -qq && apt-get install -y -qq software-properties-common lsb-release 2>&1 | tail -5" || true
# Add Nginx stable repository
exec_container "if ! grep -q 'nginx' /etc/apt/sources.list.d/nginx.list 2>/dev/null; then
add-apt-repository -y 'ppa:nginx/stable' 2>&1 ||
(echo 'deb http://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx' > /etc/apt/sources.list.d/nginx.list &&
echo 'deb-src http://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx' >> /etc/apt/sources.list.d/nginx.list)
fi" 2>&1 | tail -5
log_info "Updating package lists..."
exec_container "apt-get update -qq 2>&1 | tail -5"
log_info "Upgrading Nginx..."
exec_container "apt-get install -y nginx 2>&1 | grep -E '(Setting up|Unpacking|nginx)' | tail -10" || {
log_warn "Nginx upgrade may require manual intervention or is already latest"
exec_container "nginx -v 2>&1"
}
NEW_NGINX=$(exec_container "nginx -v 2>&1 | grep -oP 'nginx/\K[0-9.]+'")
if [ "$CURRENT_NGINX" != "$NEW_NGINX" ]; then
log_success "Nginx upgraded: $CURRENT_NGINX$NEW_NGINX"
log_info "Testing Nginx configuration..."
exec_container "nginx -t 2>&1"
log_info "Reloading Nginx..."
exec_container "systemctl reload nginx 2>&1"
log_success "Nginx reloaded successfully"
else
log_info "Nginx is already at latest version or upgrade requires manual steps"
fi
# Step 5: Check and optimize configuration
log_step "Step 5: Optimizing Blockscout configuration..."
# Check current configuration values
CURRENT_POOL_SIZE=$(exec_container "cd /opt/blockscout && grep POOL_SIZE docker-compose.yml | grep -oP 'POOL_SIZE=\K[0-9]+' || echo '10'")
log_info "Current database pool size: $CURRENT_POOL_SIZE"
# Check if we should increase pool size based on available memory
MEMORY_GB=$(exec_container "free -g | awk '/^Mem:/ {print \$2}'")
if [ "$MEMORY_GB" -gt 8 ] && [ "$CURRENT_POOL_SIZE" -lt 20 ]; then
log_info "Increasing database pool size for better performance..."
exec_container "cd /opt/blockscout && sed -i 's/POOL_SIZE=$CURRENT_POOL_SIZE/POOL_SIZE=20/' docker-compose.yml && grep POOL_SIZE docker-compose.yml"
log_success "Pool size increased to 20"
fi
# Step 6: Verify services
log_step "Step 6: Verifying all services..."
sleep 5
CONTAINER_STATUS=$(exec_container "docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E '(blockscout|postgres)'")
echo "$CONTAINER_STATUS"
NGINX_STATUS=$(exec_container "systemctl is-active nginx 2>&1")
if [ "$NGINX_STATUS" = "active" ]; then
log_success "Nginx is running"
else
log_error "Nginx is not running: $NGINX_STATUS"
fi
# Step 7: Test connectivity
log_step "Step 7: Testing connectivity..."
sleep 10
BLOCKSCOUT_API=$(exec_container "timeout 10 curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:4000/api/v2/status 2>&1" || echo "000")
if [ "$BLOCKSCOUT_API" != "000" ]; then
log_success "Blockscout API responding (HTTP $BLOCKSCOUT_API)"
else
log_warn "Blockscout API not responding yet (may need more time)"
fi
NGINX_HTTPS=$(exec_container "timeout 10 curl -k -s -o /dev/null -w '%{http_code}' -H 'Host: $DOMAIN' https://127.0.0.1/ 2>&1" || echo "000")
if [ "$NGINX_HTTPS" != "000" ]; then
log_success "Nginx HTTPS responding (HTTP $NGINX_HTTPS)"
else
log_warn "Nginx HTTPS not responding"
fi
# Step 8: Check indexing status
log_step "Step 8: Checking indexing status..."
INDEXING_STATUS=$(exec_container "docker exec blockscout-postgres psql -U blockscout -d blockscout -t -c \"SELECT 'Blocks: ' || count(*)::text || ', Latest: ' || COALESCE(max(number)::text, '0') || ', Transactions: ' || (SELECT count(*)::text FROM transactions) FROM blocks;\" 2>&1" | tr -d ' ')
log_info "Indexing Status: $INDEXING_STATUS"
# Step 9: Provide RPC configuration recommendations
log_step "Step 9: RPC Configuration Analysis..."
log_info "Reviewing RPC connection and method availability..."
RPC_TEST=$(exec_container "timeout 5 curl -s -X POST -H 'Content-Type: application/json' --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' http://192.168.11.250:8545 2>&1" | head -3 || echo "RPC not accessible")
if echo "$RPC_TEST" | grep -q "result"; then
log_success "RPC endpoint is accessible"
else
log_warn "RPC endpoint may not be accessible or may need configuration"
fi
echo ""
log_info "RPC Method Recommendations:"
echo " - Internal transaction tracing: Requires trace_* RPC methods"
echo " - Block rewards: Requires debug_* or eth_getBlockReward RPC methods"
echo " - These are optional features - basic explorer works without them"
echo " - To enable: Configure Besu RPC node with --rpc-ws-api=TRACE,DEBUG"
# Step 10: Summary
log_step "Step 10: Final Status Summary..."
echo ""
echo "════════════════════════════════════════════════════════"
echo "Fix Summary"
echo "════════════════════════════════════════════════════════"
echo ""
echo "Blockscout Image:"
echo " Before: $CURRENT_IMAGE"
echo " After: $NEW_IMAGE"
if [ "$CURRENT_IMAGE" != "$NEW_IMAGE" ]; then
echo " Status: ✅ UPDATED"
else
echo " Status: Already latest"
fi
echo ""
echo "Nginx Version:"
echo " Before: $CURRENT_NGINX"
echo " After: $NEW_NGINX"
if [ "$CURRENT_NGINX" != "$NEW_NGINX" ]; then
echo " Status: ✅ UPGRADED"
else
echo " Status: Already latest or manual upgrade needed"
fi
echo ""
echo "Services Status:"
echo " Blockscout Container: $(exec_container "docker ps --format '{{.Status}}' --filter 'name=blockscout' | head -1")"
echo " PostgreSQL Container: $(exec_container "docker ps --format '{{.Status}}' --filter 'name=blockscout-postgres' | head -1")"
echo " Nginx Service: $NGINX_STATUS"
echo ""
echo "Connectivity:"
echo " Blockscout API: HTTP $BLOCKSCOUT_API"
echo " Nginx HTTPS: HTTP $NGINX_HTTPS"
echo ""
echo "Indexing: $INDEXING_STATUS"
echo ""
echo "Backup Location: $BACKUP_DIR"
echo ""
log_success "All fixes completed!"
echo ""
log_info "Next steps:"
echo " 1. Monitor Blockscout logs: docker logs -f blockscout"
echo " 2. Monitor indexing progress for 24-48 hours"
echo " 3. Test web interface: https://$DOMAIN"
echo " 4. Review RPC configuration if internal transactions are needed"
echo ""