Decision from 12-expert alignment dialogue on single-user scale. Implements Option E with modifications: - t4g.small spot instance (~$5/mo) - k3s with Traefik for ingress + Let's Encrypt TLS - SQLite database for Forgejo - S3 backups with 30-day lifecycle - EBS gp3 20GB encrypted - Admin SSH on port 2222, Git SSH on port 22 Total cost: ~$7.50/month Includes: - terraform/minimal/ - full terraform configuration - terraform/bootstrap/ - state backend (already applied) - docs/spikes/0001-single-user-scale.md - decision documentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
47 lines
1.1 KiB
HCL
47 lines
1.1 KiB
HCL
# Hearth Minimal - Variables
|
|
|
|
variable "aws_region" {
|
|
description = "AWS region"
|
|
type = string
|
|
default = "us-east-1"
|
|
}
|
|
|
|
variable "domain" {
|
|
description = "Domain for Forgejo (e.g., git.example.com)"
|
|
type = string
|
|
}
|
|
|
|
variable "letsencrypt_email" {
|
|
description = "Email for Let's Encrypt certificate notifications"
|
|
type = string
|
|
}
|
|
|
|
variable "instance_type" {
|
|
description = "EC2 instance type"
|
|
type = string
|
|
default = "t4g.small" # 2 vCPU, 2GB RAM, ARM64
|
|
}
|
|
|
|
variable "volume_size" {
|
|
description = "Root volume size in GB"
|
|
type = number
|
|
default = 20
|
|
}
|
|
|
|
variable "spot_max_price" {
|
|
description = "Maximum spot price (empty = on-demand price)"
|
|
type = string
|
|
default = "" # Use on-demand price as max
|
|
}
|
|
|
|
variable "admin_ssh_port" {
|
|
description = "SSH port for admin access"
|
|
type = number
|
|
default = 2222
|
|
}
|
|
|
|
variable "admin_cidr_blocks" {
|
|
description = "CIDR blocks allowed for admin SSH and k8s API"
|
|
type = list(string)
|
|
default = ["0.0.0.0/0"] # Restrict this in production!
|
|
}
|