- 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.
422 lines
11 KiB
Markdown
422 lines
11 KiB
Markdown
# ThirdWeb RPC Nodes - Complete Next Steps
|
|
|
|
## Overview
|
|
This document lists all next steps to complete the ThirdWeb RPC node setup, from deployment to integration.
|
|
|
|
---
|
|
|
|
## Phase 1: Deploy Containers
|
|
|
|
### Step 1.1: Run the Setup Script
|
|
```bash
|
|
cd /home/intlc/projects/proxmox
|
|
./scripts/setup-thirdweb-rpc-nodes.sh
|
|
```
|
|
|
|
**Expected outcome:**
|
|
- Creates 3 LXC containers (VMIDs 2400-2402)
|
|
- Installs Besu RPC software
|
|
- Configures static IPs (192.168.11.240-242)
|
|
- Sets up systemd services
|
|
|
|
**Troubleshooting:**
|
|
- If containers fail to create, check storage: `ssh root@192.168.11.10 'pvesm status'`
|
|
- Verify template exists: `ssh root@192.168.11.10 'pvesm list local'`
|
|
- Check SSH access: `ssh root@192.168.11.10 'echo OK'`
|
|
|
|
---
|
|
|
|
## Phase 2: Verify Deployment
|
|
|
|
### Step 2.1: Check Container Status
|
|
```bash
|
|
# List all ThirdWeb containers
|
|
ssh root@192.168.11.10 "pct list | grep -E '240[0-2]'"
|
|
|
|
# Check individual container status
|
|
ssh root@192.168.11.10 "pct status 2400"
|
|
ssh root@192.168.11.10 "pct status 2401"
|
|
ssh root@192.168.11.10 "pct status 2402"
|
|
```
|
|
|
|
**Expected output:**
|
|
```
|
|
2400 2400 thirdweb-rpc-1 running
|
|
2401 2401 thirdweb-rpc-2 running
|
|
2402 2402 thirdweb-rpc-3 running
|
|
```
|
|
|
|
### Step 2.2: Verify IP Addresses
|
|
```bash
|
|
# Check IP configuration for each container
|
|
ssh root@192.168.11.10 "pct exec 2400 -- hostname -I"
|
|
ssh root@192.168.11.10 "pct exec 2401 -- hostname -I"
|
|
ssh root@192.168.11.10 "pct exec 2402 -- hostname -I"
|
|
```
|
|
|
|
**Expected output:**
|
|
- Container 2400: `192.168.11.240`
|
|
- Container 2401: `192.168.11.241`
|
|
- Container 2402: `192.168.11.242`
|
|
|
|
### Step 2.3: Test Network Connectivity
|
|
```bash
|
|
# Ping each container
|
|
ping -c 3 192.168.11.240
|
|
ping -c 3 192.168.11.241
|
|
ping -c 3 192.168.11.242
|
|
|
|
# Test port accessibility
|
|
nc -zv 192.168.11.240 8545 # HTTP RPC
|
|
nc -zv 192.168.11.240 8546 # WebSocket RPC
|
|
nc -zv 192.168.11.240 9545 # Metrics
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 3: Configure Besu Services
|
|
|
|
### Step 3.1: Verify Besu Installation
|
|
```bash
|
|
# Check Besu version on each container
|
|
ssh root@192.168.11.10 "pct exec 2400 -- /opt/besu/bin/besu --version"
|
|
ssh root@192.168.11.10 "pct exec 2401 -- /opt/besu/bin/besu --version"
|
|
ssh root@192.168.11.10 "pct exec 2402 -- /opt/besu/bin/besu --version"
|
|
```
|
|
|
|
### Step 3.2: Verify Configuration Files
|
|
```bash
|
|
# Check config file exists and is correct
|
|
ssh root@192.168.11.10 "pct exec 2400 -- cat /etc/besu/config-rpc-thirdweb.toml"
|
|
```
|
|
|
|
**Verify key settings:**
|
|
- `network-id=138`
|
|
- `rpc-http-enabled=true`
|
|
- `rpc-http-port=8545`
|
|
- `rpc-ws-enabled=true`
|
|
- `rpc-ws-port=8546`
|
|
- `rpc-http-api=["ETH","NET","WEB3","DEBUG","TRACE"]`
|
|
|
|
### Step 3.3: Check Genesis and Permissions Files
|
|
```bash
|
|
# Verify genesis file exists
|
|
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /genesis/genesis.json"
|
|
|
|
# Verify static nodes file exists
|
|
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /genesis/static-nodes.json"
|
|
|
|
# Verify permissions file exists
|
|
ssh root@192.168.11.10 "pct exec 2400 -- ls -la /permissions/permissions-nodes.toml"
|
|
```
|
|
|
|
**If files are missing:**
|
|
- Copy from existing RPC nodes or source project
|
|
- See `smom-dbis-138/genesis/` and `smom-dbis-138/permissions/` directories
|
|
|
|
---
|
|
|
|
## Phase 4: Start and Monitor Services
|
|
|
|
### Step 4.1: Start Besu Services
|
|
```bash
|
|
# Start services on all containers
|
|
ssh root@192.168.11.10 "pct exec 2400 -- systemctl start besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2401 -- systemctl start besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2402 -- systemctl start besu-rpc.service"
|
|
|
|
# Enable auto-start on boot
|
|
ssh root@192.168.11.10 "pct exec 2400 -- systemctl enable besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2401 -- systemctl enable besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2402 -- systemctl enable besu-rpc.service"
|
|
```
|
|
|
|
### Step 4.2: Check Service Status
|
|
```bash
|
|
# Check if services are running
|
|
ssh root@192.168.11.10 "pct exec 2400 -- systemctl status besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2401 -- systemctl status besu-rpc.service"
|
|
ssh root@192.168.11.10 "pct exec 2402 -- systemctl status besu-rpc.service"
|
|
```
|
|
|
|
**Expected status:** `Active: active (running)`
|
|
|
|
### Step 4.3: Monitor Service Logs
|
|
```bash
|
|
# View recent logs
|
|
ssh root@192.168.11.10 "pct exec 2400 -- journalctl -u besu-rpc.service -n 100"
|
|
|
|
# Follow logs in real-time (Ctrl+C to exit)
|
|
ssh root@192.168.11.10 "pct exec 2400 -- journalctl -u besu-rpc.service -f"
|
|
```
|
|
|
|
**Look for:**
|
|
- `Besu is listening on` messages
|
|
- `P2P started` message
|
|
- Any error messages
|
|
|
|
---
|
|
|
|
## Phase 5: Test RPC Endpoints
|
|
|
|
### Step 5.1: Test HTTP RPC Endpoints
|
|
```bash
|
|
# Test each RPC endpoint
|
|
curl -X POST http://192.168.11.240:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|
|
|
curl -X POST http://192.168.11.241:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|
|
|
curl -X POST http://192.168.11.242:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|
```
|
|
|
|
**Expected response:**
|
|
```json
|
|
{"jsonrpc":"2.0","id":1,"result":"0x..."}
|
|
```
|
|
|
|
### Step 5.2: Test WebSocket Endpoints
|
|
```bash
|
|
# Install wscat if needed: npm install -g wscat
|
|
|
|
# Test WebSocket connection
|
|
wscat -c ws://192.168.11.240:8546
|
|
|
|
# Then send: {"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}
|
|
```
|
|
|
|
### Step 5.3: Test Additional RPC Methods
|
|
```bash
|
|
# Get chain ID
|
|
curl -X POST http://192.168.11.240:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
|
|
|
|
# Get network ID
|
|
curl -X POST http://192.168.11.240:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}'
|
|
|
|
# Get client version
|
|
curl -X POST http://192.168.11.240:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'
|
|
```
|
|
|
|
### Step 5.4: Check Metrics Endpoints
|
|
```bash
|
|
# Check metrics (Prometheus format)
|
|
curl http://192.168.11.240:9545/metrics | head -20
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 6: ThirdWeb Integration
|
|
|
|
### Step 6.1: Configure ThirdWeb SDK
|
|
|
|
**JavaScript/TypeScript:**
|
|
```javascript
|
|
import { ThirdwebSDK } from "@thirdweb-dev/sdk";
|
|
|
|
// HTTP RPC endpoint
|
|
const sdk = new ThirdwebSDK("http://192.168.11.240:8545", {
|
|
supportedChains: [138], // Your ChainID
|
|
});
|
|
|
|
// Or with WebSocket for subscriptions
|
|
const sdk = new ThirdwebSDK("ws://192.168.11.240:8546", {
|
|
supportedChains: [138],
|
|
});
|
|
```
|
|
|
|
### Step 6.2: Set Environment Variables
|
|
```bash
|
|
# Add to your .env file
|
|
echo "THIRDWEB_RPC_URL=http://192.168.11.240:8545" >> .env
|
|
echo "THIRDWEB_RPC_WS_URL=ws://192.168.11.240:8546" >> .env
|
|
echo "THIRDWEB_CHAIN_ID=138" >> .env
|
|
```
|
|
|
|
### Step 6.3: Configure ThirdWeb Dashboard
|
|
|
|
1. Go to ThirdWeb Dashboard → Settings → Networks
|
|
2. Click "Add Custom Network"
|
|
3. Enter:
|
|
- **Network Name**: ChainID 138 (Custom)
|
|
- **RPC URL**: `http://192.168.11.240:8545`
|
|
- **Chain ID**: `138`
|
|
- **Currency Symbol**: Your token symbol
|
|
- **Block Explorer**: (Optional) Your explorer URL
|
|
|
|
### Step 6.4: Test ThirdWeb Connection
|
|
```javascript
|
|
// Test connection
|
|
const provider = await sdk.getProvider();
|
|
const network = await provider.getNetwork();
|
|
console.log("Connected to:", network.chainId);
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 7: Production Configuration
|
|
|
|
### Step 7.1: Set Up Load Balancing (Optional)
|
|
|
|
**Nginx Configuration:**
|
|
```nginx
|
|
upstream thirdweb_rpc {
|
|
least_conn;
|
|
server 192.168.11.240:8545;
|
|
server 192.168.11.241:8545;
|
|
server 192.168.11.242:8545;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name rpc.thirdweb.yourdomain.com;
|
|
|
|
location / {
|
|
proxy_pass http://thirdweb_rpc;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_connect_timeout 60s;
|
|
proxy_send_timeout 60s;
|
|
proxy_read_timeout 60s;
|
|
}
|
|
}
|
|
```
|
|
|
|
### Step 7.2: Configure Cloudflare Tunnel (Optional)
|
|
|
|
**Add to cloudflared config:**
|
|
```yaml
|
|
ingress:
|
|
- hostname: rpc-thirdweb.d-bis.org
|
|
service: http://192.168.11.240:8545
|
|
- hostname: rpc-thirdweb-2.d-bis.org
|
|
service: http://192.168.11.241:8545
|
|
- hostname: rpc-thirdweb-3.d-bis.org
|
|
service: http://192.168.11.242:8545
|
|
```
|
|
|
|
### Step 7.3: Set Up Monitoring
|
|
|
|
**Monitor metrics:**
|
|
```bash
|
|
# Set up Prometheus scraping
|
|
# Add to prometheus.yml:
|
|
scrape_configs:
|
|
- job_name: 'thirdweb-rpc'
|
|
static_configs:
|
|
- targets:
|
|
- '192.168.11.240:9545'
|
|
- '192.168.11.241:9545'
|
|
- '192.168.11.242:9545'
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 8: Documentation and Maintenance
|
|
|
|
### Step 8.1: Update Documentation
|
|
- [ ] Update infrastructure documentation with new IPs
|
|
- [ ] Document ThirdWeb RPC endpoints
|
|
- [ ] Add monitoring dashboards
|
|
- [ ] Document load balancing setup (if applicable)
|
|
|
|
### Step 8.2: Create Backup Procedures
|
|
```bash
|
|
# Backup Besu data directories
|
|
ssh root@192.168.11.10 "pct exec 2400 -- tar -czf /tmp/besu-backup-$(date +%Y%m%d).tar.gz /data/besu"
|
|
|
|
# Backup configuration files
|
|
ssh root@192.168.11.10 "pct exec 2400 -- tar -czf /tmp/besu-config-$(date +%Y%m%d).tar.gz /etc/besu"
|
|
```
|
|
|
|
### Step 8.3: Set Up Health Checks
|
|
|
|
**Create health check script:**
|
|
```bash
|
|
#!/bin/bash
|
|
# health-check-thirdweb-rpc.sh
|
|
|
|
for ip in 192.168.11.240 192.168.11.241 192.168.11.242; do
|
|
if curl -s -X POST http://${ip}:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
|
|
| grep -q "result"; then
|
|
echo "✓ ${ip}:8545 is healthy"
|
|
else
|
|
echo "✗ ${ip}:8545 is down"
|
|
fi
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting Checklist
|
|
|
|
If containers fail to start:
|
|
- [ ] Check storage availability: `pvesm status`
|
|
- [ ] Verify template exists: `pvesm list local`
|
|
- [ ] Check container logs: `pct config <VMID>`
|
|
|
|
If Besu services fail:
|
|
- [ ] Check service logs: `journalctl -u besu-rpc.service -f`
|
|
- [ ] Verify config file syntax: `besu --config-file=/etc/besu/config-rpc-thirdweb.toml validate`
|
|
- [ ] Check disk space: `df -h`
|
|
- [ ] Verify network connectivity to validators/sentries
|
|
|
|
If RPC endpoints don't respond:
|
|
- [ ] Verify firewall rules: `iptables -L -n | grep 8545`
|
|
- [ ] Check Besu is listening: `netstat -tlnp | grep 8545`
|
|
- [ ] Verify chain sync: Check logs for sync progress
|
|
- [ ] Test connectivity: `ping` and `nc` tests
|
|
|
|
---
|
|
|
|
## Quick Reference Commands
|
|
|
|
```bash
|
|
# Status check
|
|
ssh root@192.168.11.10 "pct list | grep 240"
|
|
|
|
# Restart all services
|
|
for vmid in 2400 2401 2402; do
|
|
ssh root@192.168.11.10 "pct exec $vmid -- systemctl restart besu-rpc.service"
|
|
done
|
|
|
|
# View all logs
|
|
for vmid in 2400 2401 2402; do
|
|
echo "=== Container $vmid ==="
|
|
ssh root@192.168.11.10 "pct exec $vmid -- journalctl -u besu-rpc.service -n 20"
|
|
done
|
|
|
|
# Test all endpoints
|
|
for ip in 240 241 242; do
|
|
curl -X POST http://192.168.11.${ip}:8545 \
|
|
-H 'Content-Type: application/json' \
|
|
--data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
|
|
done
|
|
```
|
|
|
|
---
|
|
|
|
## Completion Checklist
|
|
|
|
- [ ] All containers created and running
|
|
- [ ] IP addresses configured correctly
|
|
- [ ] Besu services started and enabled
|
|
- [ ] RPC endpoints responding
|
|
- [ ] ThirdWeb SDK configured
|
|
- [ ] Load balancing configured (if needed)
|
|
- [ ] Monitoring set up (if needed)
|
|
- [ ] Documentation updated
|
|
- [ ] Health checks implemented
|