beeta/devops/terraform/main.tf
doomtube 3155eacdac
All checks were successful
Build and Push / build-all (push) Successful in 7m17s
Add automatic SSL certificate generation
2026-01-06 04:53:46 -05:00

106 lines
3.5 KiB
HCL

# =============================================================================
# realms.india - DigitalOcean Infrastructure (Phase A: Jump Host + Forgejo)
# =============================================================================
locals {
common_tags = concat([
var.project_name,
var.environment,
"terraform-managed"
], var.tags)
}
# =============================================================================
# VPC Module
# =============================================================================
module "vpc" {
source = "./modules/vpc"
name = "${var.project_name}-vpc-${var.environment}"
region = var.region
ip_range = var.vpc_ip_range
description = "VPC for ${var.project_name} ${var.environment} environment"
}
# =============================================================================
# SSH Keys Module
# =============================================================================
module "ssh_keys" {
source = "./modules/ssh_keys"
project_name = var.project_name
environment = var.environment
admin_ssh_public_keys = var.admin_ssh_public_keys
}
# =============================================================================
# Jump Host Module (Bastion)
# =============================================================================
module "jump_host" {
source = "./modules/jump_host"
project_name = var.project_name
environment = var.environment
region = var.region
vpc_uuid = module.vpc.vpc_id
vpc_ip_range = var.vpc_ip_range
ssh_keys = module.ssh_keys.all_ssh_key_ids
droplet_size = var.jump_host_size
droplet_image = var.jump_host_image
ssh_port = var.jump_host_ssh_port
enable_backups = var.enable_droplet_backups
tags = local.common_tags
internal_private_key = module.ssh_keys.internal_private_key
depends_on = [module.vpc, module.ssh_keys]
}
# =============================================================================
# Forgejo Module
# =============================================================================
module "forgejo" {
source = "./modules/forgejo"
project_name = var.project_name
environment = var.environment
region = var.region
vpc_uuid = module.vpc.vpc_id
vpc_ip_range = var.vpc_ip_range
ssh_keys = module.ssh_keys.forgejo_ssh_key_ids
droplet_size = var.forgejo_droplet_size
droplet_image = var.forgejo_droplet_image
ssh_port = var.forgejo_ssh_port
git_ssh_port = var.forgejo_git_ssh_port
domain = var.forgejo_domain
enable_backups = var.enable_droplet_backups
tags = local.common_tags
# DNS Configuration
manage_dns = var.manage_dns
dns_zone = var.dns_zone
dns_record_name = "qbit" # Creates qbit.realms.pub
depends_on = [module.vpc, module.ssh_keys]
}
# =============================================================================
# Firewalls Module
# =============================================================================
module "firewalls" {
source = "./modules/firewalls"
project_name = var.project_name
environment = var.environment
vpc_ip_range = var.vpc_ip_range
jump_host_droplet_id = module.jump_host.droplet_id
jump_host_ssh_port = var.jump_host_ssh_port
forgejo_droplet_id = module.forgejo.droplet_id
forgejo_git_ssh_port = var.forgejo_git_ssh_port
depends_on = [module.jump_host, module.forgejo]
}