Infrastructure
Infrastructure as Code using Terraform to manage DNS, domains, and deployments.
Tech Stack
| Technology | Purpose |
|---|---|
| Terraform | Infrastructure as Code |
| Terraform Cloud | Remote state & runs |
| Cloudflare | DNS & CDN |
| Cloudflare Pages | Static site hosting |
| GitHub | Source repositories |
Repository Structure
terraform/
├── main.tf # Root module
├── .tflint.hcl # Linting config
├── .terraform.lock.hcl # Provider lock
└── domains/ # Domains module
├── provider.tf # Terraform & provider config
├── variables.tf # Input variables
├── data.tf # Data sources
├── battlesbit.com.tf # Primary domain
├── battlesbit.ir.tf # Dev domain
├── battlesbit.xyz.tf # Legacy redirects
├── pages_landing.tf # Landing page deployment
├── pages_pwa.tf # Mobile PWA deployment
├── pages_admin.tf # Admin panel deployment
└── pages_docs.tf # Documentation deploymentRequirements
| Name | Version |
|---|---|
| Terraform | >= 1.9 |
| Cloudflare Provider | ~> 4.0 |
Backend
State is stored in Terraform Cloud:
backend "remote" {
hostname = "app.terraform.io"
organization = "battlesbit"
workspaces {
name = "domains"
}
}Providers
Cloudflare
Manages DNS records, page rules, and Cloudflare Pages deployments.
provider "cloudflare" {
email = var.cloudflare_email
api_key = var.cloudflare_api_key
}Managed Domains
| Domain | Purpose |
|---|---|
| battlesbit.com | Production - Landing page |
| battlesbit.ir | Development environment |
| battlesbit.xyz | Dev services (ArgoCD, Grafana, etc.) |
| battlesbit.co | Redirect to .com |
| battlesbit.net | Redirect to .com |
| battlesbit.org | Redirect to .com |
| battlesbit.store | Redirect to .com |
Cloudflare Pages Projects
| Project | Repository | Domain |
|---|---|---|
| battlesbit-landing | landing | battlesbit.com |
| battlesbit | public | pwa-dev.battlesbit.ir |
| battlesbit-admin | admin | admin-dev.battlesbit.ir |
| battlesbit-docs | docs | docs-dev.battlesbit.ir |
Environment Variables
| Variable | Description |
|---|---|
CLOUDFLARE_EMAIL | Cloudflare account email |
CLOUDFLARE_API_KEY | Cloudflare API key |
CLOUDFLARE_ACCOUNT_ID | Cloudflare account ID |
Commands
# Initialize
terraform init
# Plan changes
terraform plan
# Apply changes
terraform apply
# Lint
tflintArchitecture
┌─────────────────────────────────────────────────────────────┐
│ Terraform Cloud │
│ (State Management) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Cloudflare │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ DNS Records │ │ Page Rules │ │ Pages │ │
│ │ │ │ │ │ Projects │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Domain │ │Redirects│ │ Static │
│ Routing │ │ .co→.com│ │ Sites │
└─────────┘ └─────────┘ └─────────┘Last updated on