659 lines
19 KiB
Markdown
659 lines
19 KiB
Markdown
# Next Steps: Script-Based Deployment & Boot Node for Validated Set
|
|
|
|
This document outlines the complete set of next steps needed to build out a working and functional deployment system using **EITHER**:
|
|
- **Script-based approach**: Automated scripts to deploy and configure the validated set
|
|
- **Boot node approach**: A dedicated boot node to bootstrap the network discovery
|
|
|
|
Both approaches can be used together or separately, depending on network requirements.
|
|
|
|
## Overview
|
|
|
|
The goal is to create a comprehensive, production-ready deployment system that:
|
|
1. ✅ Deploys containers (already done)
|
|
2. 🔄 Properly bootstraps the network using **scripts** OR **boot node** (or both)
|
|
3. ✅ Validates and verifies the entire deployment
|
|
4. ✅ Ensures all validators are properly configured and connected
|
|
5. ✅ Provides end-to-end orchestration scripts
|
|
|
|
## Two Approaches: Script vs Boot Node
|
|
|
|
### Approach 1: Script-Based Deployment
|
|
**Use when:** Private/permissioned network with known static nodes, no external discovery needed
|
|
|
|
**Characteristics:**
|
|
- Uses `static-nodes.json` for peer discovery
|
|
- Scripts orchestrate deployment and configuration
|
|
- No dedicated boot node required
|
|
- All nodes listed statically
|
|
- Faster initial setup
|
|
- **Recommended for your current setup** (validators ↔ sentries topology)
|
|
|
|
### Approach 2: Boot Node Deployment
|
|
**Use when:** Network needs dynamic peer discovery, external nodes will join later
|
|
|
|
**Characteristics:**
|
|
- Dedicated boot node for initial discovery
|
|
- Other nodes connect to boot node first
|
|
- Boot node helps discover additional peers
|
|
- More flexible for network expansion
|
|
- Required for public/open networks
|
|
- Can be combined with static nodes
|
|
|
|
### Approach 3: Hybrid (Script + Boot Node)
|
|
**Use when:** Best of both worlds - script orchestration + boot node for discovery
|
|
|
|
**Characteristics:**
|
|
- Scripts handle deployment and configuration
|
|
- Boot node provides discovery service
|
|
- Static nodes for critical connections
|
|
- Boot node for dynamic discovery
|
|
- Most flexible approach
|
|
|
|
---
|
|
|
|
## Phase 1: Script-Based Deployment (Primary Approach)
|
|
|
|
### 1.1 Create Validated Set Deployment Script
|
|
|
|
**File:** `scripts/deployment/deploy-validated-set.sh`
|
|
|
|
**Purpose:** Script-based deployment that orchestrates the entire validated set without requiring a boot node
|
|
|
|
**Functionality:**
|
|
- Deploy all containers (validators, sentries, RPC)
|
|
- Copy configuration files (genesis, static-nodes, permissions)
|
|
- Copy validator keys
|
|
- Start services in correct order (sentries → validators → RPC)
|
|
- Validate deployment
|
|
- Generate deployment report
|
|
|
|
**Key Features:**
|
|
- Uses static-nodes.json (no boot node needed)
|
|
- Sequential startup orchestration
|
|
- Comprehensive validation
|
|
- Error handling and rollback
|
|
- Detailed logging
|
|
|
|
**Status:** ❌ **NOT CREATED** (This is the PRIMARY script-based approach)
|
|
|
|
**Alternative:** If boot node is desired, see Phase 1A below
|
|
|
|
---
|
|
|
|
## Phase 1A: Boot Node Deployment (Optional)
|
|
|
|
### 1A.1 Create Boot Node Deployment Script
|
|
|
|
**File:** `scripts/deployment/deploy-boot-node.sh`
|
|
|
|
**Purpose:** Deploy and configure a dedicated boot node (optional - only if using boot node approach)
|
|
|
|
**Functionality:**
|
|
- Deploy container with boot node configuration
|
|
- Configure as discovery/bootstrap node
|
|
- Expose only P2P port (30303) - no RPC
|
|
- Generate and export enode for use by other nodes
|
|
- Ensure boot node starts first before other nodes
|
|
|
|
**Key Features:**
|
|
- Special configuration for boot node (if separate)
|
|
- OR configure first validator (106) as boot node
|
|
- Generate boot node enode for inclusion in genesis or static-nodes
|
|
- Health checks to ensure boot node is ready before proceeding
|
|
|
|
**Status:** ❌ **NOT CREATED** (Optional - only if boot node approach is chosen)
|
|
|
|
**Decision Point:** Do you need a boot node, or can you use script-based static-nodes approach?
|
|
|
|
---
|
|
|
|
### 1.2 Create Network Bootstrap Script
|
|
|
|
**File:** `scripts/network/bootstrap-network.sh`
|
|
|
|
**Purpose:** Orchestrate the initial network bootstrap sequence (works with EITHER script-based or boot node approach)
|
|
|
|
**Functionality (Script-Based Approach):**
|
|
1. Extract enodes from all deployed containers
|
|
2. Generate static-nodes.json with all validator enodes
|
|
3. Deploy static-nodes.json to all nodes
|
|
4. Start nodes in sequence (sentries → validators → RPC)
|
|
5. Verify peer connections
|
|
6. Validate network is operational
|
|
|
|
**Functionality (Boot Node Approach):**
|
|
1. Start boot node first
|
|
2. Wait for boot node to be ready (P2P listening, enode available)
|
|
3. Extract boot node enode
|
|
4. Update static-nodes.json for all other nodes with boot node enode
|
|
5. Deploy static-nodes.json to all nodes
|
|
6. Start remaining nodes in sequence (sentries, then validators, then RPC)
|
|
7. Verify peer connections
|
|
|
|
**Key Features:**
|
|
- Supports both script-based and boot node approaches
|
|
- Sequential startup with dependencies
|
|
- Health checks between steps
|
|
- Automatic enode extraction
|
|
- Updates static-nodes.json dynamically
|
|
- Validates peer connections after startup
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
**Recommendation:** Start with script-based approach (simpler for permissioned networks)
|
|
|
|
---
|
|
|
|
## Phase 2: Validated Set Deployment
|
|
|
|
### 2.1 Create Validator Set Validation Script
|
|
|
|
**File:** `scripts/validation/validate-validator-set.sh`
|
|
|
|
**Purpose:** Validate that all validators are properly configured and can participate in consensus
|
|
|
|
**Functionality:**
|
|
- Check validator keys exist and are accessible
|
|
- Verify validator addresses match configuration
|
|
- Validate validator keys are loaded by Besu
|
|
- Check validators are in genesis (if static) or validator contract
|
|
- Verify validator services are running
|
|
- Check validators can connect to each other
|
|
- Validate consensus is active (blocks being produced)
|
|
|
|
**Key Features:**
|
|
- Comprehensive validator health checks
|
|
- Validator key validation
|
|
- Consensus participation verification
|
|
- Network connectivity checks
|
|
- QBFT-specific validation
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
### 2.2 Create Validator Registration Script
|
|
|
|
**File:** `scripts/validation/register-validators.sh`
|
|
|
|
**Purpose:** Register validators in the validator contract (for dynamic validator management)
|
|
|
|
**Functionality:**
|
|
- Read validator addresses from key files
|
|
- Submit validator registration transactions
|
|
- Verify validator registration on-chain
|
|
- Wait for epoch change if needed
|
|
- Validate validators are active in consensus
|
|
|
|
**Key Features:**
|
|
- Smart contract interaction
|
|
- Transaction submission and verification
|
|
- Epoch management
|
|
- Validator set verification
|
|
|
|
**Status:** ❌ **NOT CREATED** (Note: Only needed if using dynamic validator management via contract)
|
|
|
|
---
|
|
|
|
### 2.3 Create Deployment Validation Orchestrator
|
|
|
|
**File:** `scripts/validation/validate-deployment.sh`
|
|
|
|
**Purpose:** Comprehensive end-to-end validation of the entire deployment
|
|
|
|
**Functionality:**
|
|
1. Validate container deployment (all containers running)
|
|
2. Validate network connectivity (P2P, RPC)
|
|
3. Validate configuration files (genesis, static-nodes, permissions)
|
|
4. Validate validator set (keys, addresses, consensus participation)
|
|
5. Validate sentry connectivity (can connect to validators)
|
|
6. Validate RPC endpoints (can query blockchain state)
|
|
7. Validate allowlist configuration (permissions-nodes.toml)
|
|
8. Generate validation report
|
|
|
|
**Key Features:**
|
|
- Multi-phase validation
|
|
- Comprehensive checks
|
|
- Detailed reporting
|
|
- Error collection and reporting
|
|
- Exit codes for CI/CD integration
|
|
|
|
**Status:** ⚠️ **PARTIAL** (Some validation exists, but not comprehensive)
|
|
|
|
---
|
|
|
|
## Phase 3: End-to-End Deployment Orchestration
|
|
|
|
### 3.1 Create Complete Deployment Orchestrator
|
|
|
|
**File:** `scripts/deployment/deploy-validated-set.sh`
|
|
|
|
**Purpose:** Single script that orchestrates the entire validated set deployment
|
|
|
|
**Functionality:**
|
|
1. **Pre-deployment Validation**
|
|
- Check prerequisites
|
|
- Validate configuration
|
|
- Check resources
|
|
- Verify no conflicts
|
|
|
|
2. **Deploy Containers**
|
|
- Deploy boot node (or first validator)
|
|
- Deploy remaining validators
|
|
- Deploy sentries
|
|
- Deploy RPC nodes
|
|
|
|
3. **Bootstrap Network**
|
|
- Start boot node
|
|
- Extract boot node enode
|
|
- Update static-nodes.json
|
|
- Deploy configuration files
|
|
- Start remaining nodes in correct order
|
|
|
|
4. **Configure Validators**
|
|
- Copy validator keys
|
|
- Register validators (if dynamic)
|
|
- Verify validator set
|
|
|
|
5. **Post-Deployment Validation**
|
|
- Run comprehensive validation
|
|
- Verify consensus is active
|
|
- Check all services
|
|
- Generate deployment report
|
|
|
|
6. **Rollback on Failure**
|
|
- Clean up partial deployments
|
|
- Restore previous state if needed
|
|
|
|
**Key Features:**
|
|
- Single command deployment
|
|
- Error handling and rollback
|
|
- Progress reporting
|
|
- Detailed logging
|
|
- Validation at each step
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
### 3.2 Create Quick Bootstrap Script
|
|
|
|
**File:** `scripts/deployment/bootstrap-quick.sh`
|
|
|
|
**Purpose:** Quick bootstrap for existing deployed containers
|
|
|
|
**Functionality:**
|
|
- Assume containers already deployed
|
|
- Extract boot node enode
|
|
- Update static-nodes.json
|
|
- Deploy updated configs
|
|
- Restart services in correct order
|
|
- Verify connectivity
|
|
|
|
**Use Case:** When containers are deployed but network needs to be bootstrapped/rebootstrapped
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
## Phase 4: Health Checks & Monitoring
|
|
|
|
### 4.1 Create Node Health Check Script
|
|
|
|
**File:** `scripts/health/check-node-health.sh`
|
|
|
|
**Purpose:** Check health of individual nodes
|
|
|
|
**Functionality:**
|
|
- Container status
|
|
- Service status (systemd)
|
|
- Process status
|
|
- P2P connectivity
|
|
- RPC availability (if enabled)
|
|
- Block sync status
|
|
- Peer count
|
|
- Consensus participation (for validators)
|
|
|
|
**Key Features:**
|
|
- Per-node health checks
|
|
- Detailed status output
|
|
- JSON output option (for monitoring)
|
|
- Exit codes for alerts
|
|
|
|
**Status:** ⚠️ **PARTIAL** (Some checks exist in other scripts)
|
|
|
|
---
|
|
|
|
### 4.2 Create Network Health Dashboard Script
|
|
|
|
**File:** `scripts/health/network-health-dashboard.sh`
|
|
|
|
**Purpose:** Display comprehensive network health overview
|
|
|
|
**Functionality:**
|
|
- All nodes status table
|
|
- Peer connectivity matrix
|
|
- Block height comparison
|
|
- Consensus status
|
|
- Validator participation
|
|
- Error summary
|
|
|
|
**Key Features:**
|
|
- Human-readable dashboard
|
|
- Color-coded status
|
|
- Quick problem identification
|
|
- Summary statistics
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
## Phase 5: Configuration Management
|
|
|
|
### 5.1 Create Configuration Generator
|
|
|
|
**File:** `scripts/config/generate-configs.sh`
|
|
|
|
**Purpose:** Generate all configuration files from templates
|
|
|
|
**Functionality:**
|
|
- Generate genesis.json (if needed)
|
|
- Generate static-nodes.json from live nodes
|
|
- Generate permissions-nodes.toml
|
|
- Generate node-specific config files (config-validator.toml, etc.)
|
|
- Validate generated configs
|
|
|
|
**Key Features:**
|
|
- Template-based generation
|
|
- Dynamic enode extraction
|
|
- Validation of generated files
|
|
- Backup of existing configs
|
|
|
|
**Status:** ⚠️ **PARTIAL** (Some config generation exists for allowlist)
|
|
|
|
---
|
|
|
|
### 5.2 Create Configuration Validator
|
|
|
|
**File:** `scripts/config/validate-configs.sh`
|
|
|
|
**Purpose:** Validate all configuration files before deployment
|
|
|
|
**Functionality:**
|
|
- Validate JSON/TOML syntax
|
|
- Validate genesis.json structure
|
|
- Validate static-nodes.json (enode format, node IDs)
|
|
- Validate permissions-nodes.toml
|
|
- Check for missing files
|
|
- Verify file permissions
|
|
|
|
**Key Features:**
|
|
- Pre-deployment validation
|
|
- Detailed error messages
|
|
- Report generation
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
## Phase 6: Documentation & Runbooks
|
|
|
|
### 6.1 Create Boot Node Runbook
|
|
|
|
**File:** `docs/BOOT_NODE_RUNBOOK.md`
|
|
|
|
**Purpose:** Detailed runbook for boot node setup and troubleshooting
|
|
|
|
**Contents:**
|
|
- Boot node concept explanation
|
|
- Setup instructions
|
|
- Configuration details
|
|
- Troubleshooting guide
|
|
- Best practices
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
### 6.2 Create Validated Set Deployment Guide
|
|
|
|
**File:** `docs/VALIDATED_SET_DEPLOYMENT_GUIDE.md`
|
|
|
|
**Purpose:** Step-by-step guide for deploying a validated set
|
|
|
|
**Contents:**
|
|
- Prerequisites
|
|
- Deployment steps
|
|
- Validation procedures
|
|
- Troubleshooting
|
|
- Rollback procedures
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
### 6.3 Create Network Bootstrap Guide
|
|
|
|
**File:** `docs/NETWORK_BOOTSTRAP_GUIDE.md`
|
|
|
|
**Purpose:** Guide for bootstrapping the network from scratch
|
|
|
|
**Contents:**
|
|
- Bootstrap sequence
|
|
- Node startup order
|
|
- Configuration updates
|
|
- Verification steps
|
|
- Common issues
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
## Phase 7: Testing & Validation
|
|
|
|
### 7.1 Create Integration Test Suite
|
|
|
|
**File:** `scripts/test/test-deployment.sh`
|
|
|
|
**Purpose:** Automated integration tests for deployment
|
|
|
|
**Functionality:**
|
|
- Test container deployment
|
|
- Test network bootstrap
|
|
- Test validator connectivity
|
|
- Test consensus functionality
|
|
- Test RPC endpoints
|
|
- Test rollback procedures
|
|
|
|
**Key Features:**
|
|
- Automated testing
|
|
- Test reports
|
|
- CI/CD integration
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
### 7.2 Create Smoke Tests
|
|
|
|
**File:** `scripts/test/smoke-tests.sh`
|
|
|
|
**Purpose:** Quick smoke tests after deployment
|
|
|
|
**Functionality:**
|
|
- Basic connectivity checks
|
|
- Service status checks
|
|
- RPC endpoint checks
|
|
- Quick consensus check
|
|
|
|
**Key Features:**
|
|
- Fast execution
|
|
- Critical path validation
|
|
- Exit codes for automation
|
|
|
|
**Status:** ❌ **NOT CREATED**
|
|
|
|
---
|
|
|
|
## Implementation Priority
|
|
|
|
### High Priority (Critical Path) - Script-Based Approach
|
|
1. ✅ **Validated Set Deployment Script** (`deploy-validated-set.sh`) - **PRIMARY**
|
|
2. ✅ **Network Bootstrap Script** (`bootstrap-network.sh`) - Script-based mode
|
|
3. ✅ **Deployment Validation Orchestrator** (`validate-deployment.sh`)
|
|
4. ✅ **Validator Set Validation** (`validate-validator-set.sh`)
|
|
|
|
### Optional (Boot Node Approach)
|
|
5. ⚠️ **Boot Node Deployment Script** (`deploy-boot-node.sh`) - Only if boot node needed
|
|
6. ⚠️ **Network Bootstrap Script** - Boot node mode (enhance existing script)
|
|
|
|
### Medium Priority (Important Features)
|
|
5. ⚠️ **Validator Set Validation** (`validate-validator-set.sh`)
|
|
6. ⚠️ **Node Health Checks** (`check-node-health.sh`)
|
|
7. ⚠️ **Configuration Generator** (enhance existing)
|
|
8. ⚠️ **Quick Bootstrap Script** (`bootstrap-quick.sh`)
|
|
|
|
### Low Priority (Nice to Have)
|
|
9. 📝 **Network Health Dashboard** (`network-health-dashboard.sh`)
|
|
10. 📝 **Validator Registration** (`register-validators.sh`) - only if using dynamic validators
|
|
11. 📝 **Configuration Validator** (`validate-configs.sh`)
|
|
12. 📝 **Documentation** (runbooks and guides)
|
|
13. 📝 **Test Suites** (integration and smoke tests)
|
|
|
|
---
|
|
|
|
## Recommended Implementation Order
|
|
|
|
### Week 1: Core Infrastructure (Script-Based)
|
|
1. Create `deploy-validated-set.sh` - **Primary script-based deployment**
|
|
2. Create `bootstrap-network.sh` - Script-based mode (uses static-nodes)
|
|
3. Enhance existing `validate-deployment.sh`
|
|
4. Create `validate-validator-set.sh`
|
|
|
|
### Optional: Boot Node Support (If Needed)
|
|
5. Create `deploy-boot-node.sh` - Only if boot node approach is chosen
|
|
6. Enhance `bootstrap-network.sh` - Add boot node mode support
|
|
|
|
### Week 2: Orchestration
|
|
4. Create `deploy-validated-set.sh`
|
|
5. Create `validate-validator-set.sh`
|
|
6. Create `bootstrap-quick.sh`
|
|
|
|
### Week 3: Health & Monitoring
|
|
7. Create `check-node-health.sh`
|
|
8. Create `network-health-dashboard.sh`
|
|
9. Enhance configuration generation scripts
|
|
|
|
### Week 4: Documentation & Testing
|
|
10. Create documentation (runbooks, guides)
|
|
11. Create test suites
|
|
12. Final validation and testing
|
|
|
|
---
|
|
|
|
## Existing Assets to Leverage
|
|
|
|
### Already Implemented
|
|
- ✅ Container deployment scripts (`deploy-besu-nodes.sh`, etc.)
|
|
- ✅ Configuration copying (`copy-besu-config.sh`)
|
|
- ✅ Allowlist management (`besu-*.sh` scripts)
|
|
- ✅ Network utilities (`update-static-nodes.sh`)
|
|
- ✅ Basic validation scripts (`validate-ml110-deployment.sh`)
|
|
- ✅ Deployment status checks (`check-deployments.sh`)
|
|
|
|
### Can Be Enhanced
|
|
- ⚠️ `validate-deployment.sh` - needs comprehensive validator set validation
|
|
- ⚠️ `deploy-all.sh` - needs boot node support and sequential startup
|
|
- ⚠️ Configuration generation - needs boot node enode integration
|
|
|
|
---
|
|
|
|
## Success Criteria
|
|
|
|
A successful implementation should provide:
|
|
|
|
1. **Single Command Deployment**
|
|
```bash
|
|
./scripts/deployment/deploy-validated-set.sh
|
|
```
|
|
- Deploys all containers
|
|
- Bootstraps network correctly
|
|
- Validates entire deployment
|
|
- Reports success/failure
|
|
|
|
2. **Network Bootstrap**
|
|
- Boot node starts first
|
|
- Other nodes connect successfully
|
|
- All validators participate in consensus
|
|
- Network is fully operational
|
|
|
|
3. **Validation**
|
|
- All validators are validated and active
|
|
- Network connectivity verified
|
|
- Consensus is functional
|
|
- RPC endpoints are working
|
|
|
|
4. **Documentation**
|
|
- Complete runbooks for all procedures
|
|
- Troubleshooting guides
|
|
- Best practices documented
|
|
|
|
---
|
|
|
|
## Quick Start Checklist
|
|
|
|
### Script-Based Approach (Recommended for Your Setup)
|
|
|
|
- [ ] Review existing deployment scripts
|
|
- [ ] Create `deploy-validated-set.sh` - Main deployment orchestrator
|
|
- [ ] Create `bootstrap-network.sh` - Script-based mode (static-nodes)
|
|
- [ ] Create `validate-validator-set.sh` - Validator validation
|
|
- [ ] Enhance existing `validate-deployment.sh`
|
|
- [ ] Test deployment sequence on test environment
|
|
- [ ] Document procedures
|
|
- [ ] Test end-to-end on production-like environment
|
|
|
|
### Boot Node Approach (Optional - Only If Needed)
|
|
|
|
- [ ] Decide if boot node is needed (probably not for permissioned network)
|
|
- [ ] Design boot node strategy (separate node vs first validator)
|
|
- [ ] Create `deploy-boot-node.sh` (if using dedicated boot node)
|
|
- [ ] Enhance `bootstrap-network.sh` with boot node mode
|
|
- [ ] Test boot node bootstrap sequence
|
|
- [ ] Document boot node procedures
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
### Script-Based vs Boot Node Decision
|
|
|
|
**For Your Current Setup (Permissioned Network with Validators ↔ Sentries):**
|
|
- ✅ **Recommend: Script-Based Approach**
|
|
- You already use `static-nodes.json` for peer discovery
|
|
- All nodes are known and static
|
|
- No external discovery needed
|
|
- Simpler and faster deployment
|
|
- Script orchestrates everything using static configuration
|
|
|
|
- ❌ **Boot Node Not Required**
|
|
- Boot nodes are for dynamic peer discovery
|
|
- Public/open networks that need discovery
|
|
- Your network is permissioned with known validators
|
|
- Static-nodes.json already serves the bootstrap purpose
|
|
|
|
**When to Use Boot Node:**
|
|
- Network will expand with external nodes
|
|
- Dynamic peer discovery needed
|
|
- Public network deployment
|
|
- Combining static + dynamic discovery
|
|
|
|
### Other Notes
|
|
|
|
- **Validator Registration**: Only needed if using dynamic validator management via smart contract. If validators are statically defined in genesis, skip this step.
|
|
|
|
- **Sequential Startup**: Critical for network bootstrap. Nodes must start in correct order: sentries → validators → RPC nodes (for script-based) OR boot node → sentries → validators → RPC nodes (for boot node approach).
|
|
|
|
- **Validation**: Comprehensive validation should happen at multiple stages: pre-deployment, post-deployment, and ongoing health checks.
|
|
|