From c6c0b598e2a8f26e282b0f2e80f39507cd6098e8 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Sun, 23 Jun 2024 12:25:47 +0000 Subject: [PATCH] add ntfy[ci skip] --- modules/kubernetes/immich/main.tf | 23 ++++- modules/kubernetes/main.tf | 5 + modules/kubernetes/ntfy/main.tf | 156 ++++++++++++++++++++++++++++++ terraform.tfstate | Bin 1701124 -> 1722416 bytes 4 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 modules/kubernetes/ntfy/main.tf diff --git a/modules/kubernetes/immich/main.tf b/modules/kubernetes/immich/main.tf index 34d97e89..f737c120 100644 --- a/modules/kubernetes/immich/main.tf +++ b/modules/kubernetes/immich/main.tf @@ -109,10 +109,23 @@ resource "kubernetes_ingress_v1" "immich" { # "nginx.ingress.kubernetes.io/auth-signin" : "https://oauth2.viktorbarzin.me/oauth2/start?rd=/redirect/$http_host$escaped_request_uri" # WARNING: When changing any of the below settings, ensure that large file uploads continue working - "nginx.ingress.kubernetes.io/proxy-read-timeout" : "600", - "nginx.ingress.kubernetes.io/proxy-send-timeout" : "600", - "nginx.ingress.kubernetes.io/proxy-connect-timeout" : "600" - "nginx.ingress.kubernetes.io/proxy-body-size" : "5000m", + "nginx.ingress.kubernetes.io/proxy-read-timeout" : "600s", + "nginx.ingress.kubernetes.io/proxy-send-timeout" : "600s", + "nginx.ingress.kubernetes.io/proxy-connect-timeout" : "600s" + "nginx.ingress.kubernetes.io/client-max-body-size" : "2G" + "nginx.ingress.kubernetes.io/proxy-body-size" : "2G", + "nginx.ingress.kubernetes.io/proxy-buffering" : "on" + "nginx.ingress.kubernetes.io/proxy-max-temp-file-size" : "4096m" + "nginx.ingress.kubernetes.io/proxy-request-buffering" : "off" + "nginx.ingress.kubernetes.io/client-body-buffer-size" : "2G" + "nginx.ingress.kubernetes.io/proxy-buffer-size" : "16k" + "nginx.ingress.kubernetes.io/proxy-buffers-number" : "8" + + + # "nginx.ingress.kubernetes.io/client-body-buffer-size" : "5000m" + # "nginx.ingress.kubernetes.io/proxy-buffers-number" : "8" + # "nginx.ingress.kubernetes.io/proxy-buffer-size" : "16k" + # "nginx.ingress.kubernetes.io/proxy-body-size" : "0", # "nginx.ingress.kubernetes.io/affinity" : "cookie" # "nginx.ingress.kubernetes.io/affinity-mode" : "persistent" # "nginx.ingress.kubernetes.io/session-cookie-change-on-failure" : true @@ -120,7 +133,7 @@ resource "kubernetes_ingress_v1" "immich" { # "nginx.ingress.kubernetes.io/session-cookie-max-age" : 172800 # "nginx.ingress.kubernetes.io/session-cookie-name" : "STICKY_SESSION" # "nginx.ingress.kubernetes.io/use-regex" : false - "nginx.org/websocket-services" : "immich-server" + # "nginx.org/websocket-services" : "immich-server" } } diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 3f0dcb22..ecc9fa33 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -460,3 +460,8 @@ module "ollama" { source = "./ollama" tls_secret_name = var.tls_secret_name } + +module "ntfy" { + source = "./ntfy" + tls_secret_name = var.tls_secret_name +} diff --git a/modules/kubernetes/ntfy/main.tf b/modules/kubernetes/ntfy/main.tf new file mode 100644 index 00000000..d05a622e --- /dev/null +++ b/modules/kubernetes/ntfy/main.tf @@ -0,0 +1,156 @@ +variable "tls_secret_name" {} +resource "kubernetes_namespace" "ntfy" { + metadata { + name = "ntfy" + } +} + +module "tls_secret" { + source = "../setup_tls_secret" + namespace = "ntfy" + tls_secret_name = var.tls_secret_name +} + +resource "kubernetes_deployment" "ntfy" { + metadata { + name = "ntfy" + namespace = "ntfy" + labels = { + app = "ntfy" + } + annotations = { + "reloader.stakater.com/search" = "true" + } + } + spec { + replicas = 1 + strategy { + type = "RollingUpdate" + } + selector { + match_labels = { + app = "ntfy" + } + } + template { + metadata { + labels = { + app = "ntfy" + } + } + spec { + container { + image = "binwiederhier/ntfy" + name = "ntfy" + args = ["serve"] + + port { + container_port = 80 + } + env { + name = "NTFY_BASE_URL" + value = "https://ntfy.viktorbarzin.me" + } + env { + name = "NTFY_UPSTREAM_BASE_URL" + # value = "https://ntfy.viktorbarzin.me" + value = "https://ntfy.sh" + } + env { + name = "NTFY_BEHIND_PROXY" + value = true + } + env { + name = "NTFY_ENABLE_LOGIN" + value = true + } + env { + name = "NTFY_AUTH_FILE" + value = "/var/lib/ntfy/user.db" + } + env { + name = "NTFY_AUTH_DEFAULT_ACCESS" + value = "deny-all" + } + env { + name = "NTFY_ENABLE_METRICS" + value = true + } + volume_mount { + name = "data" + mount_path = "/var/lib/ntfy/" + } + } + volume { + name = "data" + nfs { + server = "10.0.10.15" + path = "/mnt/main/ntfy" + } + } + } + } + } +} + +resource "kubernetes_service" "ntfy" { + metadata { + name = "ntfy" + namespace = "ntfy" + labels = { + "app" = "ntfy" + } + annotations = { + "prometheus.io/scrape" = "true" + "prometheus.io/path" = "/metrics" + "prometheus.io/port" = "80" + } + } + + spec { + selector = { + app = "ntfy" + } + port { + name = "http" + target_port = 80 + port = 80 + } + } +} + +resource "kubernetes_ingress_v1" "ntfy" { + metadata { + name = "ntfy" + namespace = "ntfy" + annotations = { + "kubernetes.io/ingress.class" = "nginx" + # "nginx.ingress.kubernetes.io/auth-url" : "https://oauth2.viktorbarzin.me/oauth2/auth" + # "nginx.ingress.kubernetes.io/auth-signin" : "https://oauth2.viktorbarzin.me/oauth2/start?rd=/redirect/$http_host$escaped_request_uri" + } + } + + spec { + tls { + hosts = ["ntfy.viktorbarzin.me"] + secret_name = var.tls_secret_name + } + rule { + host = "ntfy.viktorbarzin.me" + http { + path { + path = "/" + backend { + service { + name = "ntfy" + port { + number = 80 + } + } + } + } + } + } + } +} + diff --git a/terraform.tfstate b/terraform.tfstate index 008d9a9c0a09aa26a3d51079abeae3942b5a1451..df9bebe25ac266ad33571fc4bd13c70a5c7a15d8 100644 GIT binary patch literal 1722416 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