Files
explorer-monorepo/scripts/blockscout-quick-fix.sh

129 lines
4.3 KiB
Bash
Raw Normal View History

#!/bin/bash
# Quick fix script for Blockscout initialization issues
# Run from Proxmox host: ./scripts/blockscout-quick-fix.sh
set -euo pipefail
VMID=5000
echo "=========================================="
echo "Blockscout Quick Fix for VMID 5000"
echo "=========================================="
echo ""
# Execute fix commands in VMID 5000
pct exec $VMID -- bash << 'FIX_SCRIPT'
set -euo pipefail
echo "Finding Blockscout container..."
BLOCKSCOUT_CONTAINER=$(docker ps -a | grep blockscout | grep -v postgres | awk '{print $1}' | head -1)
if [ -z "$BLOCKSCOUT_CONTAINER" ]; then
echo "❌ ERROR: Blockscout container not found"
exit 1
fi
echo "✅ Found container: $BLOCKSCOUT_CONTAINER"
echo ""
# Step 1: Verify database connectivity
echo "=== Step 1: Verifying database connectivity ==="
echo "Blockscout database credentials:"
echo " User: blockscout"
echo " Database: blockscout"
echo " Password: blockscout"
docker exec -it blockscout-postgres psql -U blockscout -d blockscout -c "SELECT 1;" >/dev/null 2>&1 && \
echo "✅ Database connection successful" || \
echo "⚠️ Database connection check failed (may still work)"
echo ""
# Step 2: Run migrations
echo "=== Step 2: Running database migrations ==="
docker exec -it $BLOCKSCOUT_CONTAINER bin/blockscout eval "Explorer.Release.migrate()" || {
echo "⚠️ Release.migrate() failed, trying mix ecto.migrate..."
docker exec -it $BLOCKSCOUT_CONTAINER mix ecto.migrate
}
echo ""
# Step 3: Build assets
echo "=== Step 3: Building static assets ==="
docker exec -it $BLOCKSCOUT_CONTAINER mix phx.digest || {
echo "⚠️ mix phx.digest failed, trying npm deploy..."
docker exec -it $BLOCKSCOUT_CONTAINER npm run deploy || true
}
echo ""
# Step 4: Update docker-compose if needed
echo "=== Step 4: Updating docker-compose configuration ==="
BLOCKSCOUT_DIR="/opt/blockscout"
if [ -f "$BLOCKSCOUT_DIR/docker-compose.yml" ]; then
# Check if command is already set
if ! grep -q "command:.*blockscout start" "$BLOCKSCOUT_DIR/docker-compose.yml"; then
echo "Adding startup command to docker-compose.yml..."
sed -i '/blockscout:/a\ command: bin/blockscout start' "$BLOCKSCOUT_DIR/docker-compose.yml"
echo "✅ Updated docker-compose.yml"
else
echo "✅ docker-compose.yml already has startup command"
fi
else
echo "⚠️ docker-compose.yml not found at $BLOCKSCOUT_DIR"
fi
echo ""
# Step 5: Restart Blockscout
echo "=== Step 5: Restarting Blockscout ==="
if [ -f "$BLOCKSCOUT_DIR/docker-compose.yml" ]; then
cd "$BLOCKSCOUT_DIR"
docker compose restart blockscout || docker compose up -d blockscout
else
echo "Restarting container manually..."
docker restart $BLOCKSCOUT_CONTAINER || {
docker stop $BLOCKSCOUT_CONTAINER
docker start $BLOCKSCOUT_CONTAINER
}
fi
echo ""
echo "Waiting for Blockscout to start..."
sleep 10
# Step 6: Verify
echo "=== Step 6: Verification ==="
if docker ps | grep -q blockscout; then
echo "✅ Blockscout container is running"
# Check logs for errors
echo ""
echo "Recent logs:"
docker logs blockscout 2>&1 | tail -10
# Check if tables exist in Blockscout database
echo ""
echo "Checking Blockscout database tables..."
docker exec -it blockscout-postgres psql -U blockscout -d blockscout -c "
SELECT
CASE WHEN EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'blocks')
THEN '✅ blocks' ELSE '❌ blocks' END as blocks,
CASE WHEN EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'transactions')
THEN '✅ transactions' ELSE '❌ transactions' END as transactions,
CASE WHEN EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'migrations_status')
THEN '✅ migrations_status' ELSE '❌ migrations_status' END as migrations_status;
" 2>/dev/null || echo "⚠️ Could not verify tables (container may still be starting)"
else
echo "❌ Blockscout container is not running"
echo "Check logs: docker logs blockscout"
exit 1
fi
echo ""
echo "=========================================="
echo "✅ Blockscout fix complete!"
echo "=========================================="
FIX_SCRIPT
echo ""
echo "Fix completed. Check status with:"
echo " pct exec $VMID -- docker logs blockscout"