diff --git a/terraform/k8sapps/apps.tf b/terraform/k8sapps/apps.tf new file mode 100644 index 0000000..0dc2eb3 --- /dev/null +++ b/terraform/k8sapps/apps.tf @@ -0,0 +1,37 @@ +module "websites" { + source = "../modules/nginx" + persistent_folder = local.persistent_folder + primary_domain = local.primary_domain + websites = local.websites +} + +module "rustdesk" { + source = "../modules/rustdesk" + + persistent_folder = local.persistent_folder + fqdn = local.rustdesk_fqdn + public_key = var.rustdesk_public_key + private_key = var.rustdesk_private_key +} + +module "m3uproxy" { + source = "../modules/m3uproxy" + + persistent_folder = local.persistent_folder + tag = local.m3uproxy_version + fqdn = local.m3uproxy_fqdn + + # Secret and password for M3UProxy + secret = var.m3uproxy_secret + admin_password = var.m3uproxy_admin_password + + # GeoIP settings + maxmind_account_id = var.maxmind_account_id + maxmind_license_key = var.maxmind_license_key + geoip_cron_schedule = local.geoip_cron_schedule + geoip_editions = local.geoip_editions + + # Wireguard settings (VPN) + wireguard_private_key = var.wireguard_private_key + wireguard_public_key = var.wireguard_public_key +} diff --git a/terraform/k8sapps/websites.tf b/terraform/k8sapps/websites.tf deleted file mode 100644 index c09c59c..0000000 --- a/terraform/k8sapps/websites.tf +++ /dev/null @@ -1,36 +0,0 @@ -module "websites" { - source = "../modules/websites" - persistent_folder = local.persistent_folder - primary_domain = local.primary_domain - websites = local.websites -} - -moved { - from = kubernetes_namespace.website - to = module.websites.kubernetes_namespace.website -} - -moved { - from = kubernetes_service_account.website_service_account - to = module.websites.kubernetes_service_account.website_service_account -} - -moved { - from = kubernetes_service.website - to = module.websites.kubernetes_service.website -} - -moved { - from = kubernetes_config_map.nginx_config - to = module.websites.kubernetes_config_map.nginx_config -} - -moved { - from = kubernetes_ingress_v1.website_ingress - to = module.websites.kubernetes_ingress_v1.website_ingress -} - -moved { - from = kubernetes_deployment.website - to = module.websites.kubernetes_deployment.website -} diff --git a/terraform/modules/m3uproxy/config.tf b/terraform/modules/m3uproxy/config.tf new file mode 100644 index 0000000..a57f61b --- /dev/null +++ b/terraform/modules/m3uproxy/config.tf @@ -0,0 +1,30 @@ +locals { + persistent_folder = var.persistent_folder + m3uproxy_version = var.tag + m3uproxy_fqdn = var.fqdn + wireguard_version = "1.0.20210914-r4-ls54" + squid_version = "6.1-23.10_edge" + geoip_image = "maxmindinc/geoipupdate" + geoip_version = "latest" + geoip_cron_schedule = var.geoip_cron_schedule + geoip_editions = var.geoip_editions + + m3uproxy_path = "${local.persistent_folder}/m3uproxy" + m3uproxy_cache_path = "${local.m3uproxy_path}/cache" + squid_app_path = "${local.m3uproxy_path}/squid" + geoip_path = "${local.m3uproxy_path}/geoip" + wireguard_address = "192.168.5.3/32" + wireguard_dns = "192.168.5.1" + wireguard_allowed_ips = [ + "192.168.5.1/32", + "192.168.5.3/32", + "0.0.0.0/0" + ] + wireguard_endpoint = "188.82.170.183" + wireguard_endpoint_port = 1195 + + m3uproxy_config = templatefile("${path.module}/resources/m3uproxy/m3uproxy.json", { + m3uproxy_secret = var.secret + }) +} + diff --git a/terraform/k8sapps/m3uproxy.tf b/terraform/modules/m3uproxy/main.tf similarity index 94% rename from terraform/k8sapps/m3uproxy.tf rename to terraform/modules/m3uproxy/main.tf index 9e220d9..8589962 100644 --- a/terraform/k8sapps/m3uproxy.tf +++ b/terraform/modules/m3uproxy/main.tf @@ -1,23 +1,3 @@ -locals { - m3uproxy_path = "${local.persistent_folder}/m3uproxy" - m3uproxy_cache_path = "${local.m3uproxy_path}/cache" - squid_app_path = "${local.m3uproxy_path}/squid" - geoip_path = "${local.m3uproxy_path}/geoip" - wireguard_address = "192.168.5.3/32" - wireguard_dns = "192.168.5.1" - wireguard_allowed_ips = [ - "192.168.5.1/32", - "192.168.5.3/32", - "0.0.0.0/0" - ] - wireguard_endpoint = "188.82.170.183" - wireguard_endpoint_port = 1195 - - m3uproxy_config = templatefile("${path.module}/resources/m3uproxy/m3uproxy.json", { - m3uproxy_secret = var.m3uproxy_secret - }) -} - resource "kubernetes_namespace" "m3uproxy" { metadata { annotations = { @@ -37,7 +17,7 @@ resource "kubernetes_secret" "m3uproxy_admin_credentials" { } data = { username = "tv_admin" - password = var.m3uproxy_admin_password + password = var.admin_password } type = "Opaque" } diff --git a/terraform/modules/m3uproxy/provider.tf b/terraform/modules/m3uproxy/provider.tf new file mode 100644 index 0000000..3c8e1a0 --- /dev/null +++ b/terraform/modules/m3uproxy/provider.tf @@ -0,0 +1,9 @@ +terraform { + required_version = "~>1.8" + required_providers { + kubernetes = { + source = "hashicorp/kubernetes" + version = "~>2.18" + } + } +} diff --git a/terraform/k8sapps/resources/m3uproxy/m3uproxy.json b/terraform/modules/m3uproxy/resources/m3uproxy/m3uproxy.json similarity index 100% rename from terraform/k8sapps/resources/m3uproxy/m3uproxy.json rename to terraform/modules/m3uproxy/resources/m3uproxy/m3uproxy.json diff --git a/terraform/k8sapps/resources/m3uproxy/playlist.json b/terraform/modules/m3uproxy/resources/m3uproxy/playlist.json similarity index 100% rename from terraform/k8sapps/resources/m3uproxy/playlist.json rename to terraform/modules/m3uproxy/resources/m3uproxy/playlist.json diff --git a/terraform/k8sapps/resources/squid/squid.conf b/terraform/modules/m3uproxy/resources/squid/squid.conf similarity index 100% rename from terraform/k8sapps/resources/squid/squid.conf rename to terraform/modules/m3uproxy/resources/squid/squid.conf diff --git a/terraform/k8sapps/resources/wireguard/wireguard.conf.tpl b/terraform/modules/m3uproxy/resources/wireguard/wireguard.conf.tpl similarity index 100% rename from terraform/k8sapps/resources/wireguard/wireguard.conf.tpl rename to terraform/modules/m3uproxy/resources/wireguard/wireguard.conf.tpl diff --git a/terraform/modules/m3uproxy/variables.tf b/terraform/modules/m3uproxy/variables.tf new file mode 100644 index 0000000..da860c8 --- /dev/null +++ b/terraform/modules/m3uproxy/variables.tf @@ -0,0 +1,61 @@ +variable "persistent_folder" { + description = "The path to the persistent folder" + type = string +} + +variable "fqdn" { + description = "The fully qualified domain name for the Rustdesk server" + type = string +} + +variable "tag" { + description = "The version of Rustdesk to install" + type = string + default = "latest" +} + +variable "maxmind_account_id" { + description = "Maxmind account ID" + type = string +} + +variable "maxmind_license_key" { + description = "Maxmind license key" + type = string + sensitive = true +} + +variable "geoip_cron_schedule" { + description = "The cron schedule for the geoipupdate job" + type = string + default = "0 0 * * *" +} + +variable "geoip_editions" { + description = "The editions of the GeoIP database to update" + type = list(string) + default = ["GeoLite2-Country", "GeoLite2-City"] +} + +variable "admin_password" { + description = "The password for the M3UProxy admin user" + type = string + sensitive = true +} + +variable "secret" { + description = "The secret for JWT signing in M3UProxy" + type = string + sensitive = true +} + +variable "wireguard_public_key" { + description = "The public key for Wireguard" + type = string +} + +variable "wireguard_private_key" { + description = "The private key for Wireguard" + type = string + sensitive = true +} diff --git a/terraform/modules/websites/config.tf b/terraform/modules/nginx/config.tf similarity index 70% rename from terraform/modules/websites/config.tf rename to terraform/modules/nginx/config.tf index ffce05d..2daf8be 100644 --- a/terraform/modules/websites/config.tf +++ b/terraform/modules/nginx/config.tf @@ -1,5 +1,6 @@ locals { persistent_folder = var.persistent_folder + websites_path = "${local.persistent_folder}/web" primary_domain = var.primary_domain websites = var.websites } diff --git a/terraform/modules/websites/website.tf b/terraform/modules/nginx/main.tf similarity index 97% rename from terraform/modules/websites/website.tf rename to terraform/modules/nginx/main.tf index f43c532..4b1abe3 100644 --- a/terraform/modules/websites/website.tf +++ b/terraform/modules/nginx/main.tf @@ -1,7 +1,3 @@ -locals { - websites_path = "${local.persistent_folder}/web" -} - resource "kubernetes_namespace" "website" { metadata { annotations = { @@ -126,7 +122,7 @@ resource "kubernetes_deployment" "website" { container { name = "website" - image = "nginx:stable-alpine" + image = "nginx:${var.tag}" image_pull_policy = "Always" resources { diff --git a/terraform/modules/websites/provider.tf b/terraform/modules/nginx/provider.tf similarity index 100% rename from terraform/modules/websites/provider.tf rename to terraform/modules/nginx/provider.tf diff --git a/terraform/modules/websites/resources/nginx/conf.d/default.conf b/terraform/modules/nginx/resources/nginx/conf.d/default.conf similarity index 100% rename from terraform/modules/websites/resources/nginx/conf.d/default.conf rename to terraform/modules/nginx/resources/nginx/conf.d/default.conf diff --git a/terraform/modules/websites/resources/nginx/nginx.conf b/terraform/modules/nginx/resources/nginx/nginx.conf similarity index 100% rename from terraform/modules/websites/resources/nginx/nginx.conf rename to terraform/modules/nginx/resources/nginx/nginx.conf diff --git a/terraform/modules/websites/variables.tf b/terraform/modules/nginx/variables.tf similarity index 74% rename from terraform/modules/websites/variables.tf rename to terraform/modules/nginx/variables.tf index 55afc4b..86adb67 100644 --- a/terraform/modules/websites/variables.tf +++ b/terraform/modules/nginx/variables.tf @@ -8,6 +8,12 @@ variable "primary_domain" { type = string } +variable "tag" { + description = "The version of the websites to install" + type = string + default = "stable-alpine" +} + variable "websites" { description = "A list of websites to be deployed" type = map(object({ diff --git a/terraform/modules/rustdesk/config.tf b/terraform/modules/rustdesk/config.tf new file mode 100644 index 0000000..a3e7e4c --- /dev/null +++ b/terraform/modules/rustdesk/config.tf @@ -0,0 +1,8 @@ +locals { + persistent_folder = var.persistent_folder + rustdesk_path = "${local.persistent_folder}/rustdesk" + + rustdesk_version = var.tag + rustdesk_fqdn = var.fqdn +} + diff --git a/terraform/k8sapps/rustdesk.tf b/terraform/modules/rustdesk/main.tf similarity index 96% rename from terraform/k8sapps/rustdesk.tf rename to terraform/modules/rustdesk/main.tf index 57aeb55..37fc53d 100644 --- a/terraform/k8sapps/rustdesk.tf +++ b/terraform/modules/rustdesk/main.tf @@ -1,7 +1,3 @@ -locals { - rustdesk_path = "${local.persistent_folder}/rustdesk" -} - resource "kubernetes_namespace" "rustdesk" { metadata { name = "rustdesk" @@ -27,8 +23,8 @@ resource "kubernetes_secret" "rustdesk_keys" { } data = { - "id_ed25519" = var.rustdesk_private_key - "id_ed25519.pub" = var.rustdesk_public_key + "id_ed25519" = var.private_key + "id_ed25519.pub" = var.public_key } } diff --git a/terraform/modules/rustdesk/provider.tf b/terraform/modules/rustdesk/provider.tf new file mode 100644 index 0000000..3c8e1a0 --- /dev/null +++ b/terraform/modules/rustdesk/provider.tf @@ -0,0 +1,9 @@ +terraform { + required_version = "~>1.8" + required_providers { + kubernetes = { + source = "hashicorp/kubernetes" + version = "~>2.18" + } + } +} diff --git a/terraform/modules/rustdesk/variables.tf b/terraform/modules/rustdesk/variables.tf new file mode 100644 index 0000000..9abd7e4 --- /dev/null +++ b/terraform/modules/rustdesk/variables.tf @@ -0,0 +1,27 @@ +variable "persistent_folder" { + description = "The path to the persistent folder" + type = string +} + +variable "fqdn" { + description = "The fully qualified domain name for the Rustdesk server" + type = string +} + +variable "tag" { + description = "The version of Rustdesk to install" + type = string + default = "latest" +} + +variable "public_key" { + description = "Rustdesk public key" + type = string + sensitive = false +} + +variable "private_key" { + description = "Rustdesk private key" + type = string + sensitive = true +}