ื“ืœื’ ืœืชื•ื›ืŸ ื”ืจืืฉื™

Terraform

Infrastructure as Code (IaC) for deploying Ever Gauzy using Terraform.

Directory Structureโ€‹

.deploy/terraform/
โ”œโ”€โ”€ main.tf # Provider and module config
โ”œโ”€โ”€ variables.tf # Input variables
โ”œโ”€โ”€ outputs.tf # Output values
โ”œโ”€โ”€ terraform.tfvars # Variable values
โ”œโ”€โ”€ modules/
โ”‚ โ”œโ”€โ”€ networking/ # VPC, subnets, security groups
โ”‚ โ”œโ”€โ”€ database/ # RDS PostgreSQL
โ”‚ โ”œโ”€โ”€ compute/ # ECS/EC2 instances
โ”‚ โ”œโ”€โ”€ storage/ # S3 buckets
โ”‚ โ””โ”€โ”€ cdn/ # CloudFront distribution

Quick Startโ€‹

cd .deploy/terraform

# Initialize Terraform
terraform init

# Preview changes
terraform plan

# Apply infrastructure
terraform apply

# Destroy infrastructure
terraform destroy

Example Configurationโ€‹

# main.tf
provider "aws" {
region = var.aws_region
}

module "networking" {
source = "./modules/networking"
vpc_cidr = "10.0.0.0/16"
environment = var.environment
}

module "database" {
source = "./modules/database"
vpc_id = module.networking.vpc_id
subnet_ids = module.networking.private_subnet_ids
db_name = "gauzy"
db_username = var.db_username
db_password = var.db_password
instance_class = "db.t3.medium"
}

module "compute" {
source = "./modules/compute"
vpc_id = module.networking.vpc_id
subnet_ids = module.networking.private_subnet_ids
api_image = "ghcr.io/ever-co/gauzy-api:latest"
webapp_image = "ghcr.io/ever-co/gauzy-webapp:latest"
db_host = module.database.endpoint
}

Variablesโ€‹

# variables.tf
variable "aws_region" {
default = "us-east-1"
}

variable "environment" {
default = "production"
}

variable "db_username" {
sensitive = true
}

variable "db_password" {
sensitive = true
}

State Managementโ€‹

Store Terraform state remotely:

terraform {
backend "s3" {
bucket = "gauzy-terraform-state"
key = "production/terraform.tfstate"
region = "us-east-1"
encrypt = true
}
}