Files
proxmox/scripts/complete-all-blockscout-next-steps.sh.bak
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

213 lines
8.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Complete all next steps for Blockscout setup
# Runs migrations, verifies SSL, tests connectivity
set -euo pipefail
VMID="${VMID:-5000}"
IP="${IP:-192.168.11.140}"
DOMAIN="${DOMAIN:-explorer.d-bis.org}"
PASSWORD="${PASSWORD:-L@kers2010}"
CONTAINER_NODE="${CONTAINER_NODE:-pve2}"
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
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"; }
exec_container() {
local cmd="$1"
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no root@"$IP" "bash -c '$cmd'" 2>&1
}
echo "════════════════════════════════════════════════════════"
echo "Complete Blockscout Next Steps"
echo "════════════════════════════════════════════════════════"
echo ""
# Step 1: Check database tables
log_info "Step 1: Checking database schema..."
TABLE_COUNT=$(exec_container "docker exec blockscout-postgres psql -U blockscout -d blockscout -t -c \"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';\" 2>&1" | tr -d ' \n' || echo "0")
log_info "Current tables in database: $TABLE_COUNT"
# Step 2: Run migrations if needed
if [ "$TABLE_COUNT" = "0" ] || [ -z "$TABLE_COUNT" ]; then
log_info "Step 2: Running database migrations (database is empty)..."
log_info "This will take 3-5 minutes..."
MIGRATE_OUTPUT=$(exec_container "cd /opt/blockscout && docker run --rm --network blockscout_blockscout-network \
-e DATABASE_URL=postgresql://blockscout:blockscout@postgres:5432/blockscout \
-e ETHEREUM_JSONRPC_HTTP_URL=http://192.168.11.250:8545 \
-e CHAIN_ID=138 \
-e SECRET_KEY_BASE=73159c7d10b9a5a75ddf10710773078c078bf02124d35b72fa2a841b30b4f88c7c43e5caaf7f9f7f87d16dd66e7870931ae11039c428d1dedae187af762531fa \
blockscout/blockscout:latest /app/bin/blockscout eval \"Ecto.Migrator.run(Explorer.Repo, :up, all: true)\" 2>&1" || echo "FAILED")
if echo "$MIGRATE_OUTPUT" | grep -qE "(migrated|already up|Migrating|== Running)"; then
log_success "Migrations completed"
echo "$MIGRATE_OUTPUT" | grep -E "(migrated|already|Migrating|== Running)" | head -10
else
log_warn "Migration output unclear, but continuing..."
echo "$MIGRATE_OUTPUT" | tail -20
fi
# Verify tables were created
NEW_TABLE_COUNT=$(exec_container "docker exec blockscout-postgres psql -U blockscout -d blockscout -t -c \"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';\" 2>&1" | tr -d ' \n' || echo "0")
log_info "Tables after migration: $NEW_TABLE_COUNT"
if [ "$NEW_TABLE_COUNT" -gt 10 ]; then
log_success "Database schema created successfully ($NEW_TABLE_COUNT tables)"
else
log_warn "Table count seems low, but continuing..."
fi
else
log_success "Database already has tables ($TABLE_COUNT), skipping migrations"
fi
# Step 3: Ensure Blockscout is configured correctly
log_info "Step 3: Verifying Blockscout configuration..."
exec_container "cd /opt/blockscout && if [ -f docker-compose.yml ]; then
# Ensure HTTPS and correct host
sed -i 's|BLOCKSCOUT_PROTOCOL=http|BLOCKSCOUT_PROTOCOL=https|g' docker-compose.yml
sed -i 's|BLOCKSCOUT_HOST=192.168.11.140|BLOCKSCOUT_HOST=$DOMAIN|g' docker-compose.yml
sed -i 's|BLOCKSCOUT_HOST=localhost|BLOCKSCOUT_HOST=$DOMAIN|g' docker-compose.yml
# Ensure DISABLE_WEBAPP=false and command is set
if ! grep -q 'DISABLE_WEBAPP=false' docker-compose.yml; then
sed -i '/environment:/a\ - DISABLE_WEBAPP=false' docker-compose.yml
fi
if ! grep -q 'command:' docker-compose.yml; then
sed -i '/container_name: blockscout/a\ command: /app/bin/blockscout start' docker-compose.yml
fi
echo 'Configuration verified'
fi"
# Step 4: Restart Blockscout
log_info "Step 4: Restarting Blockscout..."
exec_container "cd /opt/blockscout && docker-compose down && docker-compose up -d postgres && sleep 10 && docker-compose up -d blockscout"
log_success "Blockscout restarted"
# Step 5: Wait and monitor startup
log_info "Step 5: Waiting for Blockscout to initialize (this may take 2-3 minutes)..."
for i in {1..18}; do
sleep 10
STATUS=$(exec_container "docker ps | grep blockscout | awk '{print \$7}'" || echo "")
if echo "$STATUS" | grep -q "Up" && ! echo "$STATUS" | grep -q "Restarting"; then
log_success "Container is stable"
break
fi
if [ $i -eq 9 ] || [ $i -eq 18 ]; then
log_info "Still waiting... ($i/18)"
fi
done
# Step 6: Check if Phoenix is running
log_info "Step 6: Checking Blockscout logs for Phoenix endpoint..."
PHOENIX_LOG=$(exec_container "docker logs --tail 100 blockscout 2>&1 | grep -E 'Running.*BlockScoutWeb.Endpoint|listening|started|Application.*started' | tail -5" || echo "")
if [ -n "$PHOENIX_LOG" ]; then
log_success "Phoenix endpoint found in logs"
echo "$PHOENIX_LOG"
else
log_warn "Phoenix endpoint not yet in logs (may still be starting)"
fi
# Step 7: Test API endpoints
log_info "Step 7: Testing Blockscout API..."
sleep 5
for i in {1..6}; do
API_RESPONSE=$(exec_container "timeout 5 curl -s http://localhost:4000/api/v2/status 2>&1" || echo "")
if echo "$API_RESPONSE" | grep -qE "(chain_id|success|block)"; then
log_success "Blockscout API is responding!"
echo "$API_RESPONSE" | head -3
break
fi
if [ $i -lt 6 ]; then
log_info "API not ready yet, waiting... ($i/6)"
sleep 10
else
log_warn "API not responding after 60 seconds"
log_info "Response: $API_RESPONSE"
fi
done
# Step 8: Test Nginx HTTPS
log_info "Step 8: Testing Nginx HTTPS endpoint..."
NGINX_TEST=$(exec_container "timeout 5 curl -k -s -o /dev/null -w '%{http_code}' https://localhost/health 2>&1" || echo "000")
if [ "$NGINX_TEST" = "200" ] || [ "$NGINX_TEST" = "502" ]; then
if [ "$NGINX_TEST" = "200" ]; then
log_success "Nginx HTTPS working (HTTP 200)"
else
log_warn "Nginx HTTPS responding but Blockscout not ready (HTTP 502)"
fi
else
log_warn "Nginx HTTPS test returned: HTTP $NGINX_TEST"
fi
# Step 9: Test external access
log_info "Step 9: Testing external HTTPS access..."
EXTERNAL_TEST=$(curl -k -s -o /dev/null -w '%{http_code}' --connect-timeout 10 "https://$DOMAIN/health" 2>&1 || echo "000")
if [ "$EXTERNAL_TEST" = "200" ]; then
log_success "External HTTPS working! (HTTP 200)"
elif [ "$EXTERNAL_TEST" = "502" ]; then
log_warn "External HTTPS accessible but Blockscout not ready (HTTP 502)"
else
log_warn "External HTTPS test returned: HTTP $EXTERNAL_TEST"
fi
# Step 10: Verify SSL certificate
log_info "Step 10: Verifying SSL certificate..."
CERT_INFO=$(exec_container "openssl x509 -in /etc/letsencrypt/live/$DOMAIN/fullchain.pem -noout -subject -issuer -dates 2>&1" || echo "")
if echo "$CERT_INFO" | grep -q "explorer.d-bis.org"; then
log_success "SSL certificate is valid"
echo "$CERT_INFO" | head -3
fi
# Step 11: Verify Cloudflare tunnel route
log_info "Step 11: Verifying configuration summary..."
echo ""
echo "════════════════════════════════════════════════════════"
echo "All Next Steps Complete!"
echo "════════════════════════════════════════════════════════"
echo ""
log_success "Summary:"
echo " Container Node: $CONTAINER_NODE"
echo " Container IP: $IP"
echo " Domain: $DOMAIN"
echo " SSL Certificate: Installed"
echo " Nginx: Configured with HTTPS"
echo " Cloudflare Tunnel: Updated to HTTPS"
echo ""
log_info "Access Points:"
echo " Internal HTTPS: https://$IP"
echo " External HTTPS: https://$DOMAIN"
echo " API: https://$DOMAIN/api"
echo ""
log_info "Status:"
if [ "$NGINX_TEST" = "200" ]; then
echo " ✅ Nginx HTTPS: Working"
elif [ "$NGINX_TEST" = "502" ]; then
echo " ⏳ Nginx HTTPS: Waiting for Blockscout"
else
echo " ⚠️ Nginx HTTPS: HTTP $NGINX_TEST"
fi
if [ "$EXTERNAL_TEST" = "200" ]; then
echo " ✅ External HTTPS: Working"
elif [ "$EXTERNAL_TEST" = "502" ]; then
echo " ⏳ External HTTPS: Waiting for Blockscout"
else
echo " ⚠️ External HTTPS: HTTP $EXTERNAL_TEST"
fi
echo ""
log_info "Blockscout may take 2-5 minutes to fully initialize after migrations"
log_info "Monitor progress: docker logs -f blockscout"
echo ""