add owntracks [ci skip]

This commit is contained in:
Viktor Barzin 2024-12-30 18:50:35 +00:00
parent bf854be9c9
commit c67aa1b915
No known key found for this signature in database
GPG key ID: 4056458DBDBF8863
6 changed files with 173 additions and 2 deletions

View file

@ -96,6 +96,7 @@ variable "public_ip" {}
variable "cloudflare_proxied_names" {}
variable "cloudflare_non_proxied_names" {}
variable "cloudflare_tunnel_token" {}
variable "owntracks_credentials" {}
# data "terraform_remote_state" "foo" {
# backend = "kubernetes"
@ -400,6 +401,8 @@ module "kubernetes_cluster" {
cloudflare_proxied_names = var.cloudflare_proxied_names
cloudflare_non_proxied_names = var.cloudflare_non_proxied_names
cloudflare_tunnel_token = var.cloudflare_tunnel_token
owntracks_credentials = var.owntracks_credentials
}

View file

@ -75,6 +75,7 @@ variable "cloudflare_tunnel_id" {}
variable "public_ip" {}
variable "cloudflare_proxied_names" {}
variable "cloudflare_non_proxied_names" {}
variable "owntracks_credentials" {}
resource "null_resource" "core_services" {
# List all the core modules that must be provisioned first
@ -556,3 +557,9 @@ module "actualbudget" {
source = "./actualbudget"
tls_secret_name = var.tls_secret_name
}
module "owntracks" {
source = "./owntracks"
tls_secret_name = var.tls_secret_name
owntracks_credentials = var.owntracks_credentials
}

View file

@ -328,8 +328,8 @@ resource "kubernetes_config_map" "ingress_nginx_controller" {
setvar:tx.block_harvester_ip=1,\
setvar:tx.block_spammer_ip=1"
EOT
plugins = "crowdsec"
# plugins = ""
# plugins = "crowdsec"
plugins = ""
lua-shared-dicts = "crowdsec_cache: 50m"
http-snippet : <<-EOT
proxy_cache_path /tmp/nginx-cache levels=1:2 keys_zone=static-cache:2m max_size=100m inactive=7d use_temp_path=off;

View file

@ -0,0 +1,161 @@
variable "tls_secret_name" {}
variable "owntracks_credentials" {
type = map(string)
default = {
"foo" = "bar" // example format for username and password
}
}
resource "kubernetes_namespace" "owntracks" {
metadata {
name = "owntracks"
labels = {
"istio-injection" : "disabled"
}
}
}
module "tls_secret" {
source = "../setup_tls_secret"
namespace = "owntracks"
tls_secret_name = var.tls_secret_name
}
locals {
username = "owntracks"
htpasswd = join("\n", [for name, pass in var.owntracks_credentials : "${name}:${bcrypt(pass, 10)}"])
}
resource "kubernetes_secret" "basic_auth" {
metadata {
name = "basic-auth-secret"
namespace = "owntracks"
}
data = {
auth = local.htpasswd
}
type = "Opaque"
}
resource "kubernetes_deployment" "owntracks" {
metadata {
name = "owntracks"
namespace = "owntracks"
labels = {
app = "owntracks"
}
annotations = {
"reloader.stakater.com/search" = "true"
}
}
spec {
replicas = 1
strategy {
type = "Recreate"
}
selector {
match_labels = {
app = "owntracks"
}
}
template {
metadata {
labels = {
app = "owntracks"
}
annotations = {
"diun.enable" = "true"
"diun.include_tags" = "^\\d+(?:\\.\\d+)?(?:\\.\\d+)?$"
}
}
spec {
container {
image = "owntracks/recorder:0.9.9"
name = "owntracks"
port {
name = "https"
container_port = 8083
}
env {
name = "OTR_PORT"
value = "0"
}
volume_mount {
name = "data"
mount_path = "/store"
}
}
volume {
name = "data"
nfs {
path = "/mnt/main/owntracks"
server = "10.0.10.15"
}
}
}
}
}
}
resource "kubernetes_service" "owntracks" {
metadata {
name = "owntracks"
namespace = "owntracks"
labels = {
"app" = "owntracks"
}
}
spec {
selector = {
app = "owntracks"
}
port {
name = "https"
port = 443
target_port = 8083
protocol = "TCP"
}
}
}
resource "kubernetes_ingress_v1" "owntracks" {
metadata {
name = "owntracks"
namespace = "owntracks"
annotations = {
"kubernetes.io/ingress.class" = "nginx"
"nginx.ingress.kubernetes.io/auth-type" = "basic" # support only basic auth; can't use authentik
"nginx.ingress.kubernetes.io/auth-secret" = kubernetes_secret.basic_auth.metadata[0].name
"nginx.ingress.kubernetes.io/auth-realm" = "Authentication Required"
}
}
spec {
tls {
hosts = ["owntracks.viktorbarzin.me"]
secret_name = var.tls_secret_name
}
rule {
host = "owntracks.viktorbarzin.me"
http {
path {
path = "/"
backend {
service {
name = "owntracks"
port {
number = 443
}
}
}
}
}
}
}
}

Binary file not shown.

Binary file not shown.