From f1385357f9a45c2bbf4fd3f2155e5c412c3a7788 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sat, 6 Jan 2024 19:18:09 +0000 Subject: [PATCH] add working installation of vikunja todo but disable for now as the app is very broken [ci skip] --- modules/kubernetes/main.tf | 7 + modules/kubernetes/vikunja/main.tf | 241 +++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 modules/kubernetes/vikunja/main.tf diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 824d024e..39c1b594 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -400,3 +400,10 @@ module "frigate" { tls_secret_name = var.tls_secret_name valchedrym_camera_credentials = var.frigate_valchedrym_camera_credentials } + +# TODO: Currently very unstable and half of the functionality does not work: +# notifications, import from todoist, email +# module "vikunja" { +# source = "./vikunja" +# tls_secret_name = var.tls_secret_name +# } diff --git a/modules/kubernetes/vikunja/main.tf b/modules/kubernetes/vikunja/main.tf new file mode 100644 index 00000000..6cf326f2 --- /dev/null +++ b/modules/kubernetes/vikunja/main.tf @@ -0,0 +1,241 @@ +variable "tls_secret_name" {} + +resource "kubernetes_namespace" "vikunja" { + metadata { + name = "vikunja" + } +} + +module "tls_secret" { + source = "../setup_tls_secret" + namespace = "vikunja" + tls_secret_name = var.tls_secret_name +} + +resource "kubernetes_deployment" "vikunja" { + metadata { + name = "vikunja" + namespace = "vikunja" + labels = { + app = "vikunja" + } + annotations = { + "reloader.stakater.com/search" = "true" + } + } + spec { + replicas = 1 + strategy { + type = "Recreate" + } + selector { + match_labels = { + app = "vikunja" + } + } + template { + metadata { + labels = { + app = "vikunja" + } + } + spec { + container { + image = "vikunja/api" + name = "api" + # General settings + env { + name = "VIKUNJA_SERVICE_TIMEZONE" + value = "Europe/London" + } + env { + name = "VIKUNJA_SERVICE_ENABLEREGISTRATION" + value = "true" + } + env { + name = "VIKUNJA_LOG_LEVEL" + value = "DEBUG" + } + # Frontend Settings + env { + name = "VIKUNJA_SERVICE_JWTSECRET" + value = "vikunja" + } + env { + name = "VIKUNJA_SERVICE_FRONTENDURL" + value = "https://todo.viktorbarzin.me/" + } + # DB Settings + env { + name = "VIKUNJA_DATABASE_HOST" + value = "mysql.dbaas.svc.cluster.local" + } + env { + name = "VIKUNJA_DATABASE_PASSWORD" + value = "" # ADD ME + } + env { + name = "VIKUNJA_DATABASE_TYPE" + value = "mysql" + } + env { + name = "VIKUNJA_DATABASE_USER" + value = "vikunja" + } + env { + name = "VIKUNJA_DATABASE_DATABASE" + value = "vikunja" + } + env { + name = "VIKUNJA_LOG_DATABASE" + value = "true" + } + env { + name = "VIKUNJA_LOG_DATABASELEVEL" + value = "DEBUG" + } + # Mailser settings + env { + name = "VIKUNJA_MAILER_ENABLED" + value = "true" + } + env { + name = "VIKUNJA_MAILER_HOST" + value = "mailserver.mailserver.svc.cluster.local" + } + env { + name = "VIKUNJA_MAILER_USERNAME" + value = "me@viktorbarzin.me" + } + env { + name = "VIKUNJA_MAILER_PASSWORD" + value = "" # TODO: add me + } + env { + name = "VIKUNJA_MAILER_FROMEMAIL" + value = "todo@viktorbarzin.me" + } + # TODOIST settings + env { + name = "VIKUNJA_MIGRATION_TODOIST_ENABLE" + value = "true" + } + env { + name = "VIKUNJA_MIGRATION_TODOIST_CLIENTID" + value = "" # TODO: add me + } + env { + name = "VIKUNJA_MIGRATION_TODOIST_CLIENTSECRET" + value = "" # TODO: add me + } + env { + name = "VIKUNJA_MIGRATION_TODOIST_REDIRECTURL" + value = "https://todo.viktorbarzin.me/migrate/todoist" + } + port { + name = "api" + container_port = 3456 + } + } + + container { + image = "vikunja/frontend" + name = "frontend" + port { + name = "http" + container_port = 80 + } + } + } + } + } +} + +resource "kubernetes_service" "vikunja" { + metadata { + name = "vikunja" + namespace = "vikunja" + labels = { + "app" = "vikunja" + } + } + + spec { + selector = { + app = "vikunja" + } + port { + name = "http" + target_port = 80 + port = 80 + protocol = "TCP" + } + } +} + +resource "kubernetes_service" "api" { + metadata { + name = "api" + namespace = "vikunja" + labels = { + "app" = "vikunja" + } + } + + spec { + selector = { + app = "vikunja" + } + port { + name = "api" + target_port = 3456 + port = 3456 + protocol = "TCP" + } + } +} + +resource "kubernetes_ingress_v1" "vikunja" { + metadata { + name = "vikunja" + namespace = "vikunja" + annotations = { + "kubernetes.io/ingress.class" = "nginx" + } + } + + spec { + tls { + hosts = ["todo.viktorbarzin.me"] + secret_name = var.tls_secret_name + } + rule { + host = "todo.viktorbarzin.me" + http { + path { + path = "/" + backend { + service { + name = "vikunja" + port { + number = 80 + } + } + } + } + path { + path = "/api/" + backend { + service { + name = "api" + port { + number = 3456 + } + } + } + } + } + } + } +} +