Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- 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>
242 lines
12 KiB
Bash
Executable File
242 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Move RPC Translator Ports from 9545/9546 to 9645/9646
|
|
# Resolves port conflict with Besu metrics (9545) on VMID 2400
|
|
|
|
set -euo pipefail
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Configuration
|
|
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
|
|
SSH_KEY="${SSH_KEY:-~/.ssh/id_ed25519_proxmox}"
|
|
VMIDS=(2400 2401 2402)
|
|
|
|
# Old and new ports
|
|
OLD_HTTP_PORT=9545
|
|
NEW_HTTP_PORT=9645
|
|
OLD_WS_PORT=9546
|
|
NEW_WS_PORT=9646
|
|
|
|
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"; }
|
|
|
|
echo -e "${BLUE}╔══════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${BLUE}║ RPC TRANSLATOR PORT MIGRATION: 9545/9546 → 9645/9646 ║${NC}"
|
|
echo -e "${BLUE}╚══════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
log_info "This script will:"
|
|
echo " 1. Update RPC Translator .env files (VMIDs 2400, 2401, 2402)"
|
|
echo " 2. Update Nginx config on VMID 2400 to route to new ports"
|
|
echo " 3. Restart translator services"
|
|
echo " 4. Reload Nginx on VMID 2400"
|
|
echo ""
|
|
|
|
# Check SSH access
|
|
log_info "Checking SSH access to Proxmox host ($PROXMOX_HOST)..."
|
|
if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "echo 'SSH OK'" &>/dev/null 2>&1; then
|
|
log_error "Cannot access Proxmox host via SSH"
|
|
log_error "Run this script from a machine with SSH access to Proxmox host"
|
|
exit 1
|
|
fi
|
|
log_success "SSH access confirmed"
|
|
echo ""
|
|
|
|
# Function to update translator .env file
|
|
update_translator_env() {
|
|
local vmid=$1
|
|
|
|
log_info "Updating translator .env on VMID $vmid..."
|
|
|
|
local env_file="/opt/rpc-translator-138/.env"
|
|
|
|
# Check if file exists
|
|
if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- test -f $env_file" 2>/dev/null; then
|
|
log_warn " .env file not found: $env_file (skipping VMID $vmid)"
|
|
return 1
|
|
fi
|
|
|
|
# Backup .env file
|
|
local backup_file="${env_file}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- cp $env_file $backup_file" 2>/dev/null
|
|
log_info " Backup created: $backup_file"
|
|
|
|
# Update HTTP_PORT
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's/^HTTP_PORT=${OLD_HTTP_PORT}/HTTP_PORT=${NEW_HTTP_PORT}/' $env_file" 2>/dev/null
|
|
|
|
# Update WS_PORT
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's/^WS_PORT=${OLD_WS_PORT}/WS_PORT=${NEW_WS_PORT}/' $env_file" 2>/dev/null
|
|
|
|
# Verify changes
|
|
local http_port=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- grep '^HTTP_PORT=' $env_file | cut -d= -f2" 2>/dev/null || echo "")
|
|
local ws_port=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- grep '^WS_PORT=' $env_file | cut -d= -f2" 2>/dev/null || echo "")
|
|
|
|
if [ "$http_port" = "$NEW_HTTP_PORT" ] && [ "$ws_port" = "$NEW_WS_PORT" ]; then
|
|
log_success " Ports updated: HTTP_PORT=$http_port, WS_PORT=$ws_port"
|
|
return 0
|
|
else
|
|
log_error " Port update verification failed (HTTP_PORT=$http_port, WS_PORT=$ws_port)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Function to update Nginx config on VMID 2400
|
|
update_nginx_config() {
|
|
local vmid=2400
|
|
local nginx_config="/etc/nginx/sites-available/rpc-thirdweb"
|
|
|
|
log_info "Updating Nginx config on VMID $vmid..."
|
|
|
|
# Check if file exists
|
|
if ! ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- test -f $nginx_config" 2>/dev/null; then
|
|
log_warn " Nginx config not found: $nginx_config (skipping)"
|
|
return 1
|
|
fi
|
|
|
|
# Backup config
|
|
local backup_file="${nginx_config}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- cp $nginx_config $backup_file" 2>/dev/null
|
|
log_info " Backup created: $backup_file"
|
|
|
|
# Update HTTP port (from 8545 or 9545 to 9645)
|
|
# Note: Currently routes to 8545 (Besu), but we want to route to 9645 (Translator)
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's|127.0.0.1:8545|127.0.0.1:${NEW_HTTP_PORT}|g' $nginx_config" 2>/dev/null
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's|127.0.0.1:9545|127.0.0.1:${NEW_HTTP_PORT}|g' $nginx_config" 2>/dev/null
|
|
|
|
# Update WebSocket port (from 8546 or 9546 to 9646)
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's|127.0.0.1:8546|127.0.0.1:${NEW_WS_PORT}|g' $nginx_config" 2>/dev/null
|
|
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- sed -i 's|127.0.0.1:9546|127.0.0.1:${NEW_WS_PORT}|g' $nginx_config" 2>/dev/null
|
|
|
|
# Verify Nginx config syntax
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- nginx -t" 2>&1 | grep -q "syntax is ok"; then
|
|
log_success " Nginx config updated and syntax verified"
|
|
return 0
|
|
else
|
|
log_error " Nginx config syntax error (check manually)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Phase 1: Update translator .env files
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BLUE}Phase 1: Updating Translator .env Files${NC}"
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
for vmid in "${VMIDS[@]}"; do
|
|
update_translator_env "$vmid"
|
|
echo ""
|
|
done
|
|
|
|
# Phase 2: Update Nginx config on VMID 2400
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BLUE}Phase 2: Updating Nginx Configuration${NC}"
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
update_nginx_config
|
|
echo ""
|
|
|
|
# Phase 3: Restart services
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BLUE}Phase 3: Restarting Services${NC}"
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
# Restart translator services
|
|
for vmid in "${VMIDS[@]}"; do
|
|
log_info "Restarting translator service on VMID $vmid..."
|
|
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- systemctl restart rpc-translator-138.service" 2>/dev/null; then
|
|
sleep 3
|
|
status=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- systemctl is-active rpc-translator-138.service" 2>&1 || echo "unknown")
|
|
|
|
if [ "$status" = "active" ]; then
|
|
log_success " Service restarted and is active"
|
|
else
|
|
log_warn " Service status: $status"
|
|
fi
|
|
else
|
|
log_warn " Failed to restart service (may not be running)"
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
# Reload Nginx on VMID 2400
|
|
log_info "Reloading Nginx on VMID 2400..."
|
|
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec 2400 -- systemctl reload nginx" 2>/dev/null; then
|
|
log_success " Nginx reloaded successfully"
|
|
else
|
|
log_error " Nginx reload failed"
|
|
fi
|
|
echo ""
|
|
|
|
# Phase 4: Verification
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BLUE}Phase 4: Verification${NC}"
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
log_info "Checking translator services on new ports..."
|
|
for vmid in "${VMIDS[@]}"; do
|
|
log_info "VMID $vmid:"
|
|
|
|
# Check if translator is listening on new port
|
|
listening=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec $vmid -- netstat -tlnp 2>/dev/null | grep :${NEW_HTTP_PORT} || pct exec $vmid -- ss -tlnp 2>/dev/null | grep :${NEW_HTTP_PORT} || echo 'not found'")
|
|
|
|
if echo "$listening" | grep -q ":${NEW_HTTP_PORT}"; then
|
|
log_success " Translator listening on port $NEW_HTTP_PORT"
|
|
else
|
|
log_warn " Translator not listening on port $NEW_HTTP_PORT yet"
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
# Check Nginx config on VMID 2400
|
|
log_info "Verifying Nginx config on VMID 2400..."
|
|
nginx_backend=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -i "${SSH_KEY/#\~/$HOME}" "root@${PROXMOX_HOST}" "pct exec 2400 -- grep -E 'set \$backend|proxy_pass' /etc/nginx/sites-available/rpc-thirdweb | grep -o '127.0.0.1:[0-9]\+' | head -1" 2>/dev/null || echo "")
|
|
|
|
if echo "$nginx_backend" | grep -q ":${NEW_HTTP_PORT}"; then
|
|
log_success " Nginx configured to route to translator ($nginx_backend)"
|
|
elif echo "$nginx_backend" | grep -q ":8545"; then
|
|
log_warn " Nginx still routing to Besu ($nginx_backend) - translator may not be in use"
|
|
else
|
|
log_info " Nginx backend: $nginx_backend"
|
|
fi
|
|
echo ""
|
|
|
|
# Summary
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BLUE}Port Migration Summary${NC}"
|
|
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
log_success "✅ RPC Translator ports migrated:"
|
|
echo " Old: HTTP=$OLD_HTTP_PORT, WS=$OLD_WS_PORT"
|
|
echo " New: HTTP=$NEW_HTTP_PORT, WS=$NEW_WS_PORT"
|
|
echo ""
|
|
|
|
log_info "Port conflict resolved:"
|
|
echo " ✅ Besu metrics: 9545 (no conflict)"
|
|
echo " ✅ RPC Translator: 9645/9646 (new ports)"
|
|
echo ""
|
|
|
|
log_info "Next steps:"
|
|
echo " 1. Verify translator services are running on new ports"
|
|
echo " 2. Test RPC endpoints:"
|
|
echo " curl -X POST https://rpc.public-0138.defi-oracle.io \\"
|
|
echo " -H 'Content-Type: application/json' \\"
|
|
echo " -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_chainId\",\"params\":[],\"id\":1}'"
|
|
echo " 3. Monitor translator logs:"
|
|
echo " pct exec 2400 -- journalctl -u rpc-translator-138.service -f"
|
|
echo ""
|
|
|
|
log_success "✅ Port migration complete!"
|