Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
267 lines
8.3 KiB
Bash
267 lines
8.3 KiB
Bash
#!/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
|
|
|
|
|
|
# Blockscout Configuration - Run these commands directly in the container
|
|
# Copy and paste this entire script into your SSH session to container
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
CHAIN_ID=138
|
|
# Public-facing: VMID 2201 (8545 HTTP, 8546 WS)
|
|
RPC_URL="http://${RPC_PUBLIC_1:-192.168.11.221}:8545"
|
|
WS_URL="ws://${RPC_PUBLIC_1:-192.168.11.221}:8546"
|
|
BLOCKSCOUT_HOST="${IP_BLOCKSCOUT}"
|
|
|
|
echo "════════════════════════════════════════════════════════"
|
|
echo "Configuring Blockscout with correct settings..."
|
|
echo "════════════════════════════════════════════════════════"
|
|
echo ""
|
|
|
|
# Step 1: Ensure Docker is running
|
|
echo "Step 1: Checking Docker..."
|
|
systemctl start docker 2>/dev/null || true
|
|
systemctl enable docker 2>/dev/null || true
|
|
echo "✓ Docker checked"
|
|
echo ""
|
|
|
|
# Step 2: Navigate to Blockscout directory
|
|
echo "Step 2: Setting up Blockscout directory..."
|
|
if [ -d /opt/blockscout ]; then
|
|
cd /opt/blockscout
|
|
elif [ -d /root/blockscout ]; then
|
|
cd /root/blockscout
|
|
else
|
|
mkdir -p /opt/blockscout
|
|
cd /opt/blockscout
|
|
fi
|
|
echo "✓ Working directory: $(pwd)"
|
|
echo ""
|
|
|
|
# Step 3: Create docker-compose.yml
|
|
echo "Step 3: Creating docker-compose.yml..."
|
|
cat > docker-compose.yml <<'EOF'
|
|
version: '3.8'
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
container_name: blockscout-postgres
|
|
environment:
|
|
POSTGRES_USER: blockscout
|
|
POSTGRES_PASSWORD: blockscout
|
|
POSTGRES_DB: blockscout
|
|
volumes:
|
|
- postgres-data:/var/lib/postgresql/data
|
|
restart: unless-stopped
|
|
networks:
|
|
- blockscout-network
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U blockscout"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
blockscout:
|
|
image: blockscout/blockscout:latest
|
|
container_name: blockscout
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
environment:
|
|
- DATABASE_URL=postgresql://blockscout:blockscout@postgres:5432/blockscout
|
|
- ETHEREUM_JSONRPC_HTTP_URL=http://${RPC_PUBLIC_1:-192.168.11.221}:8545
|
|
- ETHEREUM_JSONRPC_WS_URL=ws://${RPC_PUBLIC_1:-192.168.11.221}:8546
|
|
- ETHEREUM_JSONRPC_TRACE_URL=http://${RPC_PUBLIC_1:-192.168.11.221}:8545
|
|
- ETHEREUM_JSONRPC_VARIANT=besu
|
|
- CHAIN_ID=138
|
|
- COIN=ETH
|
|
- BLOCKSCOUT_HOST=${IP_BLOCKSCOUT:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-192.168.11.14}}}}}0}
|
|
- BLOCKSCOUT_PROTOCOL=http
|
|
- SECRET_KEY_BASE=PLACEHOLDER_SECRET_KEY
|
|
- POOL_SIZE=10
|
|
- ECTO_USE_SSL=false
|
|
ports:
|
|
- "4000:4000"
|
|
volumes:
|
|
- blockscout-data:/app/apps/explorer/priv/static
|
|
restart: unless-stopped
|
|
networks:
|
|
- blockscout-network
|
|
|
|
volumes:
|
|
postgres-data:
|
|
blockscout-data:
|
|
|
|
networks:
|
|
blockscout-network:
|
|
driver: bridge
|
|
EOF
|
|
|
|
# Generate secret key
|
|
SECRET_KEY=$(openssl rand -hex 64)
|
|
sed -i "s|SECRET_KEY_BASE=PLACEHOLDER_SECRET_KEY|SECRET_KEY_BASE=${SECRET_KEY}|" docker-compose.yml
|
|
echo "✓ docker-compose.yml created"
|
|
echo ""
|
|
|
|
# Step 4: Stop existing containers
|
|
echo "Step 4: Stopping existing containers..."
|
|
docker-compose down 2>/dev/null || docker compose down 2>/dev/null || true
|
|
echo "✓ Existing containers stopped"
|
|
echo ""
|
|
|
|
# Step 5: Start PostgreSQL
|
|
echo "Step 5: Starting PostgreSQL..."
|
|
docker-compose up -d postgres || docker compose up -d postgres
|
|
echo "Waiting for PostgreSQL to be ready..."
|
|
for i in {1..30}; do
|
|
if docker exec blockscout-postgres pg_isready -U blockscout >/dev/null 2>&1; then
|
|
echo "✓ PostgreSQL is ready"
|
|
break
|
|
fi
|
|
echo -n "."
|
|
sleep 2
|
|
done
|
|
echo ""
|
|
echo ""
|
|
|
|
# Step 6: Start Blockscout
|
|
echo "Step 6: Starting Blockscout..."
|
|
docker-compose up -d blockscout || docker compose up -d blockscout
|
|
echo "✓ Blockscout started (may take 1-2 minutes to initialize)"
|
|
echo ""
|
|
|
|
# Step 7: Configure Nginx
|
|
echo "Step 7: Configuring Nginx..."
|
|
apt-get update -qq
|
|
apt-get install -y -qq nginx >/dev/null 2>&1
|
|
|
|
cat > /etc/nginx/sites-available/blockscout <<'EOF'
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name ${IP_BLOCKSCOUT:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-192.168.11.14}}}}}0} explorer.d-bis.org;
|
|
|
|
client_max_body_size 100M;
|
|
|
|
location / {
|
|
proxy_pass http://localhost:4000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection 'upgrade';
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_cache_bypass $http_upgrade;
|
|
proxy_read_timeout 300s;
|
|
proxy_connect_timeout 75s;
|
|
}
|
|
|
|
location /api {
|
|
proxy_pass http://localhost:4000/api;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 300s;
|
|
}
|
|
|
|
location /health {
|
|
proxy_pass http://localhost:4000/api/health;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Host $host;
|
|
access_log off;
|
|
}
|
|
}
|
|
EOF
|
|
|
|
ln -sf /etc/nginx/sites-available/blockscout /etc/nginx/sites-enabled/blockscout
|
|
rm -f /etc/nginx/sites-enabled/default
|
|
nginx -t >/dev/null 2>&1 && systemctl reload nginx
|
|
systemctl enable nginx >/dev/null 2>&1
|
|
systemctl start nginx >/dev/null 2>&1
|
|
echo "✓ Nginx configured and started"
|
|
echo ""
|
|
|
|
# Step 8: Check status
|
|
echo "Step 8: Checking service status..."
|
|
sleep 5
|
|
|
|
echo ""
|
|
echo "Container Status:"
|
|
docker ps --format "table {{.Names}}\t{{.Status}}" | head -5
|
|
echo ""
|
|
|
|
# Step 9: Test connectivity
|
|
echo "Step 9: Testing connectivity..."
|
|
sleep 5
|
|
|
|
echo "Testing RPC endpoint..."
|
|
RPC_TEST=$(curl -s -X POST "$RPC_URL" \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' 2>/dev/null || echo "")
|
|
if echo "$RPC_TEST" | grep -q '"result"'; then
|
|
echo "✓ RPC endpoint accessible"
|
|
else
|
|
echo "⚠ RPC endpoint may not be accessible"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Testing Blockscout API..."
|
|
for i in {1..6}; do
|
|
API_TEST=$(curl -s http://localhost:4000/api/health 2>/dev/null || echo "")
|
|
if [ -n "$API_TEST" ]; then
|
|
echo "✓ Blockscout API responding: $API_TEST"
|
|
break
|
|
fi
|
|
if [ $i -lt 6 ]; then
|
|
echo "Waiting for Blockscout... ($i/6)"
|
|
sleep 10
|
|
else
|
|
echo "⚠ Blockscout API not responding yet (may need more time)"
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "Testing Nginx..."
|
|
NGINX_TEST=$(curl -s -o /dev/null -w '%{http_code}' http://localhost/ 2>/dev/null || echo "000")
|
|
if [ "$NGINX_TEST" = "200" ] || [ "$NGINX_TEST" = "302" ] || [ "$NGINX_TEST" = "301" ]; then
|
|
echo "✓ Nginx proxy working (HTTP $NGINX_TEST)"
|
|
else
|
|
echo "⚠ Nginx returned: HTTP $NGINX_TEST"
|
|
fi
|
|
echo ""
|
|
|
|
# Final summary
|
|
echo "════════════════════════════════════════════════════════"
|
|
echo "Configuration Complete!"
|
|
echo "════════════════════════════════════════════════════════"
|
|
echo ""
|
|
echo "Access Points:"
|
|
echo " Internal: http://${IP_BLOCKSCOUT:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-192.168.11.14}}}}}0}"
|
|
echo " External: https://explorer.d-bis.org"
|
|
echo " API: http://${IP_BLOCKSCOUT:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-${IP_DEVICE_14:-192.168.11.14}}}}}0}/api"
|
|
echo ""
|
|
echo "Configuration:"
|
|
echo " Chain ID: $CHAIN_ID"
|
|
echo " RPC: $RPC_URL"
|
|
echo " WS: $WS_URL"
|
|
echo ""
|
|
echo "Useful Commands:"
|
|
echo " View logs: docker-compose logs -f"
|
|
echo " Check status: docker ps"
|
|
echo " Restart: docker-compose restart"
|
|
echo ""
|
|
echo "Note: Blockscout may take 1-2 minutes to fully initialize"
|
|
echo "Monitor: docker logs -f blockscout"
|
|
echo ""
|
|
|