Created
April 18, 2024 08:25
-
-
Save YorikSar/3b458963f307939b29407436dee0401b to your computer and use it in GitHub Desktop.
Jitsi on Vultr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
terraform { | |
required_providers { | |
vultr = { | |
source = "vultr/vultr" | |
version = "2.19.0" | |
} | |
null = { | |
source = "hashicorp/null" | |
version = "3.2.2" | |
} | |
} | |
} | |
variable "domain" { | |
type = string | |
description = "Domain name to use for the new VM. Assumes that the domain one-level up is registered in Vultr (example.com for jitsi.ecample.com)." | |
} | |
variable "email" { | |
type = string | |
description = "email to use for Let's Encrypt certificate registration" | |
} | |
data "vultr_application" "jitsi" { | |
filter { | |
name = "name" | |
values = ["Jitsi"] | |
} | |
} | |
data "vultr_region" "ams" { | |
filter { | |
name = "id" | |
values = ["ams"] | |
} | |
} | |
data "vultr_plan" "amd-2gb" { | |
filter { | |
name = "vcpu_count" | |
values = ["1"] | |
} | |
filter { | |
name = "ram" | |
values = ["2048"] | |
} | |
filter { | |
name = "type" | |
values = ["vc2"] | |
} | |
filter { | |
name = "locations" | |
values = [data.vultr_region.ams.id] | |
} | |
} | |
data "vultr_ssh_key" "one" { | |
filter { | |
name = "name" | |
values = ["2024"] | |
} | |
} | |
resource "vultr_instance" "jitsi" { | |
plan = data.vultr_plan.amd-2gb.id | |
region = data.vultr_region.ams.id | |
image_id = data.vultr_application.jitsi.image_id | |
ssh_key_ids = [data.vultr_ssh_key.one.id] | |
enable_ipv6 = true | |
activation_email = false | |
hostname = var.domain | |
label = "Jitsi ${var.domain}" | |
# The script asks for domain, email and whether or not to enable user registration | |
user_data = <<EOF | |
#cloud-config | |
runcmd: | |
- echo -e "${var.domain}\n${var.email}\nN\n" | /opt/vultr/scripts/configure_jitsi.sh | |
EOF | |
} | |
resource "null_resource" "wait_for_https" { | |
depends_on = [ | |
vultr_dns_record.A, | |
vultr_dns_record.AAAA, | |
] | |
provisioner "local-exec" { | |
command = "while ! curl -I https://${var.domain}; do sleep 10; done" | |
} | |
} | |
locals { | |
domain_parts = split(".", var.domain) | |
base_domain = join(".", slice(local.domain_parts, 1, length(local.domain_parts))) | |
sub_domain = local.domain_parts[0] | |
} | |
data "vultr_dns_domain" "one" { | |
domain = local.base_domain | |
} | |
resource "vultr_dns_record" "A" { | |
domain = data.vultr_dns_domain.one.id | |
type = "A" | |
name = local.sub_domain | |
ttl = 60 | |
data = vultr_instance.jitsi.main_ip | |
} | |
resource "vultr_dns_record" "AAAA" { | |
domain = data.vultr_dns_domain.one.id | |
type = "AAAA" | |
name = local.sub_domain | |
ttl = 60 | |
data = vultr_instance.jitsi.v6_main_ip | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment