feat(dns): setup cloudflared tunnel and DNS records

This commit is contained in:
2025-09-28 22:20:40 +03:00
parent b94d6e6f22
commit 5093bb6187
12 changed files with 270 additions and 0 deletions

60
cloudflare/main.tf Normal file
View File

@@ -0,0 +1,60 @@
terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 5"
}
}
}
provider "cloudflare" {
api_token = var.cloudflare_api_token
}
module "services" {
source = "./services"
}
module "dns" {
source = "./dns"
services = module.services.services
cloudflare_zone_id = var.cloudflare_zone_id
cloudflare_tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.ratchet_tunnel.id
}
module "policies" {
source = "./policies"
cloudflare_zone_id = var.cloudflare_zone_id
cloudflare_account_id = var.cloudflare_account_id
cloudflare_email = var.cloudflare_email
}
resource "cloudflare_zero_trust_tunnel_cloudflared" "ratchet_tunnel" {
account_id = var.cloudflare_account_id
tunnel_secret = var.cloudflared_tunnel_secret
name = "cloudflare > ratchet tunnel"
config_src = "cloudflare"
}
resource "cloudflare_zero_trust_tunnel_cloudflared_config" "ratchet_tunnel_config" {
account_id = var.cloudflare_account_id
tunnel_id = cloudflare_zero_trust_tunnel_cloudflared.ratchet_tunnel.id
config = {
ingress = concat([for k,v in module.services.services : { hostname = "${v.subdomain}.madunde.ad", service = v.service} ], [{ service = "http_status:404" }])
}
}
resource "cloudflare_zero_trust_access_application" "access_application" {
for_each = module.services.services
account_id = var.cloudflare_account_id
zone_id = var.cloudflare_zone_id
domain = "${each.value.subdomain}.madunde.ad"
type = "self_hosted"
name = "Access application for ${each.value.subdomain}.madunde.ad"
policies = [
{
id = module.policies[each.value.policy].id
precedence = 1
}
]
}