# Phase 1: Initial Deployment - 5 US Commercial Azure Regions ## Overview Phase 1 is the initial deployment to get the DeFi Oracle Meta Mainnet (ChainID 138) operational. This phase uses a simpler VM-based architecture before expanding to the full 36-region global AKS deployment (Phase 3). ## Architecture - **West Europe**: Admin/control-plane only (no workload) - Key Vault for secrets management - Nginx Proxy Server to route Cloudflare traffic to backend VMs - **5 US Commercial Azure Regions**: Workload VMs - `eastus` (East US) - `westus` (West US) - `centralus` (Central US) - `eastus2` (East US 2) - `westus2` (West US 2) ## VM Configuration Each US region deploys: - **1 VM** using `Standard_D8plsv6` (8 vCPUs, Dplsv6 Family) - **Ubuntu 22.04 LTS Gen 2** image - **Software Stack**: - Docker Engine - NVM (Node Version Manager) - Node.js 22 LTS - JDK 17 (OpenJDK) - Besu blockchain client ## Networking ### NSG Rules for VMs - **SSH (22)**: Allow from anywhere (restrict in production) - **P2P TCP (30303)**: Allow Besu P2P communication - **P2P UDP (30303)**: Allow Besu P2P discovery - **RPC HTTP (8545)**: Allow from Nginx proxy only (TODO: restrict) - **RPC WebSocket (8546)**: Allow from Nginx proxy only (TODO: restrict) - **Metrics (9545)**: Allow Prometheus metrics (TODO: restrict to monitoring) ### NSG Rules for Nginx Proxy - **HTTP (80)**: Allow from Cloudflare (TODO: restrict to Cloudflare IP ranges) - **HTTPS (443)**: Allow from Cloudflare (TODO: restrict to Cloudflare IP ranges) - **SSH (22)**: Allow for management (TODO: restrict to admin IPs) ## Deployment ### Prerequisites 1. Azure CLI installed and authenticated 2. Terraform >= 1.0 3. SSH public key for VM access 4. Cloudflare domain configured (for SSL certificates) ### Steps 1. **Navigate to Phase 1 directory**: ```bash cd terraform/phases/phase1 ``` 2. **Copy and configure variables**: ```bash cp terraform.tfvars.example terraform.tfvars # Edit terraform.tfvars with your values: # - ssh_public_key: Your SSH public key # - Other variables as needed ``` 3. **Initialize Terraform**: ```bash terraform init ``` 4. **Plan deployment**: ```bash terraform plan -out tfplan ``` 5. **Apply deployment**: ```bash terraform apply tfplan ``` 6. **Configure SSL on Nginx Proxy**: ```bash # SSH to the Nginx proxy VM ssh besuadmin@ # Run certbot to configure SSL sudo certbot --nginx -d your-domain.com --non-interactive --agree-tos --email admin@example.com ``` 7. **Configure Cloudflare**: - Point your domain's A record to the Nginx proxy public IP - Enable Cloudflare proxy (orange cloud) - Configure SSL/TLS mode to "Full" or "Full (strict)" ## Outputs After deployment, Terraform will output: - **phase1_us_regions**: Information about each US region deployment (VMs, IPs) - **nginx_proxy**: Nginx proxy server information (FQDN, public IP, backend count) - **key_vault_name**: Key Vault name in West Europe ## Next Steps After Phase 1 is operational: 1. Monitor VM health and Besu node synchronization 2. Configure monitoring and alerting 3. Restrict NSG rules to specific IP ranges 4. Plan Phase 3 expansion to 36 global regions with AKS ## Phase 3 Archive The full 36-region global AKS deployment plan is archived in `terraform/phases/phase3/` and will be deployed after Phase 1 is stable.