270 lines
6.4 KiB
Markdown
270 lines
6.4 KiB
Markdown
|
|
# Azure and Cloudflare Environment Setup Guide
|
||
|
|
|
||
|
|
**Last Updated**: 2025-01-27
|
||
|
|
**Status**: Active
|
||
|
|
**Purpose**: Azure and Cloudflare environment variable configuration
|
||
|
|
|
||
|
|
This guide helps you populate your `.env` file with values from Azure and Cloudflare.
|
||
|
|
|
||
|
|
> **Related Documentation**:
|
||
|
|
> - [Network Configuration Guide](NETWORK_CONFIGURATION_GUIDE.md) - For Besu network configuration
|
||
|
|
> - [Contract Deployment Environment Setup](CONTRACT_DEPLOYMENT_ENV_SETUP.md) - For contract deployment environment variables
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### Option 1: Interactive Script (Recommended)
|
||
|
|
|
||
|
|
Run the interactive script that will automatically populate your `.env` file:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/populate-env.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
This script will:
|
||
|
|
- ✅ Retrieve Azure Subscription ID and Tenant ID from Azure CLI
|
||
|
|
- ✅ Get or create Terraform backend storage account
|
||
|
|
- ✅ Prompt for Cloudflare Zone ID and API Token
|
||
|
|
- ✅ Update your `.env` file automatically
|
||
|
|
|
||
|
|
### Option 2: View Values First
|
||
|
|
|
||
|
|
If you want to see what values will be populated before updating:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# View all retrievable values
|
||
|
|
./scripts/deployment/get-env-values.sh
|
||
|
|
|
||
|
|
# Or save to a file for review
|
||
|
|
./scripts/deployment/get-env-values.sh > env-values.txt
|
||
|
|
cat env-values.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
Then manually copy the values to your `.env` file.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
Before running the scripts:
|
||
|
|
|
||
|
|
1. **Azure CLI installed and logged in:**
|
||
|
|
```bash
|
||
|
|
az login
|
||
|
|
az account show # Verify login
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Cloudflare credentials ready:**
|
||
|
|
- Zone ID: Found in Cloudflare Dashboard > Your Domain > Overview > Zone ID
|
||
|
|
- API Token: Create in Cloudflare Dashboard > My Profile > API Tokens
|
||
|
|
|
||
|
|
## Examples
|
||
|
|
|
||
|
|
### Example: Complete .env File
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Azure Configuration
|
||
|
|
AZURE_SUBSCRIPTION_ID=12345678-1234-1234-1234-123456789012
|
||
|
|
AZURE_TENANT_ID=87654321-4321-4321-4321-210987654321
|
||
|
|
AZURE_RESOURCE_GROUP=az-p-wst-rg-comp-001
|
||
|
|
AZURE_LOCATION=westeurope
|
||
|
|
|
||
|
|
# Terraform Backend
|
||
|
|
TF_STATE_STORAGE_ACCOUNT=azpwesttfstate001
|
||
|
|
TF_STATE_RESOURCE_GROUP=az-p-wst-rg-tfstate-001
|
||
|
|
TF_STATE_CONTAINER=tfstate
|
||
|
|
|
||
|
|
# Cloudflare
|
||
|
|
CLOUDFLARE_ZONE_ID=abc123def456ghi789
|
||
|
|
CLOUDFLARE_API_TOKEN=your-api-token-here
|
||
|
|
|
||
|
|
# RPC Configuration
|
||
|
|
RPC_URL=https://rpc.d-bis.org
|
||
|
|
CHAIN_ID=138
|
||
|
|
```
|
||
|
|
|
||
|
|
### Example: Retrieving Values
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Get Azure subscription ID
|
||
|
|
az account show --query id -o tsv
|
||
|
|
|
||
|
|
# Get Cloudflare zone ID
|
||
|
|
# Found in Cloudflare Dashboard > Your Domain > Overview > Zone ID
|
||
|
|
```
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
### Azure Configuration (Auto-retrieved)
|
||
|
|
|
||
|
|
These are automatically retrieved from Azure CLI:
|
||
|
|
|
||
|
|
- `AZURE_SUBSCRIPTION_ID` - Your Azure subscription ID
|
||
|
|
- `AZURE_TENANT_ID` - Your Azure tenant ID
|
||
|
|
- `AZURE_RESOURCE_GROUP` - Resource group name (default: `defi-oracle-mainnet-rg`)
|
||
|
|
- `AZURE_LOCATION` - Azure region (default: `eastus`)
|
||
|
|
|
||
|
|
### Terraform Backend (Auto-created or retrieved)
|
||
|
|
|
||
|
|
- `ARM_RESOURCE_GROUP_NAME` - Resource group for Terraform state (default: `tfstate-rg`)
|
||
|
|
- `ARM_STORAGE_ACCOUNT_NAME` - Storage account name (auto-generated or existing)
|
||
|
|
- `ARM_CONTAINER_NAME` - Container name (default: `tfstate`)
|
||
|
|
- `ARM_ACCESS_KEY` - Storage account access key
|
||
|
|
|
||
|
|
### Cloudflare Configuration (Manual input required)
|
||
|
|
|
||
|
|
- `CLOUDFLARE_ZONE_ID` - Your Cloudflare Zone ID
|
||
|
|
- `CLOUDFLARE_API_TOKEN` - Your Cloudflare API Token
|
||
|
|
|
||
|
|
### Optional Variables
|
||
|
|
|
||
|
|
These can be set later:
|
||
|
|
|
||
|
|
- `AZURE_CLIENT_ID` - Service principal app ID (for CI/CD)
|
||
|
|
- `AZURE_CLIENT_SECRET` - Service principal secret (for CI/CD)
|
||
|
|
- `RPC_URL` - RPC endpoint URL (set after deployment)
|
||
|
|
- `EXPLORER_URL` - Explorer URL (set after deployment)
|
||
|
|
- `PRIVATE_KEY` - Private key for contract deployment
|
||
|
|
|
||
|
|
## Manual Setup
|
||
|
|
|
||
|
|
If you prefer to set values manually:
|
||
|
|
|
||
|
|
### 1. Get Azure Values
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Subscription ID
|
||
|
|
az account show --query id -o tsv
|
||
|
|
|
||
|
|
# Tenant ID
|
||
|
|
az account show --query tenantId -o tsv
|
||
|
|
|
||
|
|
# Current location
|
||
|
|
az account show --query location -o tsv
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Create Terraform Backend Storage
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Set variables
|
||
|
|
RESOURCE_GROUP="tfstate-rg"
|
||
|
|
STORAGE_ACCOUNT="tfstate$(openssl rand -hex 4)"
|
||
|
|
LOCATION="eastus"
|
||
|
|
|
||
|
|
# Create resource group
|
||
|
|
az group create --name $RESOURCE_GROUP --location $LOCATION
|
||
|
|
|
||
|
|
# Create storage account
|
||
|
|
az storage account create \
|
||
|
|
--resource-group $RESOURCE_GROUP \
|
||
|
|
--name $STORAGE_ACCOUNT \
|
||
|
|
--sku Standard_LRS \
|
||
|
|
--kind StorageV2 \
|
||
|
|
--location $LOCATION
|
||
|
|
|
||
|
|
# Create container
|
||
|
|
az storage container create \
|
||
|
|
--name "tfstate" \
|
||
|
|
--account-name $STORAGE_ACCOUNT
|
||
|
|
|
||
|
|
# Get access key
|
||
|
|
az storage account keys list \
|
||
|
|
--resource-group $RESOURCE_GROUP \
|
||
|
|
--account-name $STORAGE_ACCOUNT \
|
||
|
|
--query "[0].value" -o tsv
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Get Cloudflare Values
|
||
|
|
|
||
|
|
1. **Zone ID:**
|
||
|
|
- Go to Cloudflare Dashboard
|
||
|
|
- Select your domain
|
||
|
|
- Overview page shows Zone ID
|
||
|
|
|
||
|
|
2. **API Token:**
|
||
|
|
- Go to Cloudflare Dashboard > My Profile > API Tokens
|
||
|
|
- Click "Create Token"
|
||
|
|
- Use "Edit zone DNS" template or create custom token with:
|
||
|
|
- Zone: DNS:Edit
|
||
|
|
- Zone: Zone:Read
|
||
|
|
|
||
|
|
## Verify Setup
|
||
|
|
|
||
|
|
After populating your `.env` file, verify the values:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check Azure authentication
|
||
|
|
az account show
|
||
|
|
|
||
|
|
# Verify resource group exists (if already created)
|
||
|
|
az group show --name defi-oracle-mainnet-rg
|
||
|
|
|
||
|
|
# Test Cloudflare API (if token is set)
|
||
|
|
curl -X GET "https://api.cloudflare.com/client/v4/zones/${CLOUDFLARE_ZONE_ID}" \
|
||
|
|
-H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \
|
||
|
|
-H "Content-Type: application/json"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Azure CLI Not Found
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install Azure CLI
|
||
|
|
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||
|
|
|
||
|
|
# Or on macOS
|
||
|
|
brew install azure-cli
|
||
|
|
```
|
||
|
|
|
||
|
|
### Not Logged In to Azure
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Login interactively
|
||
|
|
az login
|
||
|
|
|
||
|
|
# Or use the helper script
|
||
|
|
./scripts/deployment/azure-login.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### Storage Account Creation Fails
|
||
|
|
|
||
|
|
- Check you have permissions to create resources
|
||
|
|
- Verify subscription has available quota
|
||
|
|
- Try a different storage account name (must be globally unique)
|
||
|
|
|
||
|
|
### Cloudflare API Token Issues
|
||
|
|
|
||
|
|
- Ensure token has correct permissions (Zone:Read, DNS:Edit)
|
||
|
|
- Verify token hasn't expired
|
||
|
|
- Check Zone ID is correct for your domain
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
After setting up your `.env` file:
|
||
|
|
|
||
|
|
1. **Deploy Infrastructure:**
|
||
|
|
```bash
|
||
|
|
cd terraform
|
||
|
|
terraform init
|
||
|
|
terraform plan
|
||
|
|
terraform apply
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Configure DNS:**
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/cloudflare-dns.sh \
|
||
|
|
--zone-id $CLOUDFLARE_ZONE_ID \
|
||
|
|
--api-token $CLOUDFLARE_API_TOKEN \
|
||
|
|
--ip $(./scripts/deployment/get-app-gateway-ip.sh)
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Deploy Kubernetes Resources:**
|
||
|
|
```bash
|
||
|
|
./scripts/deployment/deploy-all.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
## See Also
|
||
|
|
|
||
|
|
- [Deployment Guide](DEPLOYMENT.md)
|
||
|
|
- [Terraform Backend Setup](TERRAFORM_BACKEND_SETUP.md)
|
||
|
|
- [Next Steps List](NEXT_STEPS_LIST.md)
|
||
|
|
|