this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Added waha/signal infrastructure for TubbyBot

+268
+56
.terraform.lock.hcl
··· 1 1 # This file is maintained automatically by "tofu init". 2 2 # Manual edits may be lost in future updates. 3 3 4 + provider "registry.opentofu.org/aminueza/minio" { 5 + version = "3.17.0" 6 + constraints = ">= 2.0.0" 7 + hashes = [ 8 + "h1:gTB9rR0Itgf4CXYbwojXRh2g+1VF4xkI0waCyT72cFc=", 9 + "zh:0c6cc3e9a8ba0e8de7a48aa97e1bf5cebf85fcb390378e9eb44cef5e2fffac33", 10 + "zh:1532438124ef4f363fa509a781de6ac9ef044e1737079d9f584ae92d578815ba", 11 + "zh:2dca2bc2c45d38d67a60288fca66ad73fc8e87328235925d242337d6980c6c82", 12 + "zh:3f304f4867cc92587a55eca729ab4a32b0e47a9862577b75f2c6d54b15d142f4", 13 + "zh:432eae4d9ca2f8e09a0d1345b7a694b81ca50ca7738f1570dec704145784aeb8", 14 + "zh:440e17023beb8a5606cbeafd9997c6b6fd206905747d3dfc98a63898a40c4385", 15 + "zh:58ece4d24b305937f842138fa2e6fa2a7237ef5bfa5278089337fe724bcb63df", 16 + "zh:8fff5399ddf32afedff81ba63eaf891318d01eb0f02284b017208d0bf6842a76", 17 + "zh:ada059db191dc1c5be16e3d4b175a8040a6f143a2360ad525d13af1cca4c4c3d", 18 + "zh:b8c4558178d083a08ba696dbb626410aa33848158e954711564d0b097a74e3d8", 19 + "zh:b8efc2e2f62514eca7e45df5c1a55bd14a9eded657c26249dbda8ef52f0166fd", 20 + "zh:bb808f09439f1f3c8443afb275c9091ace8dadc8de7f481f535dfbc59a35f2e7", 21 + "zh:c2142a813e2a7d2d27c21a4012e4288fd2560f683a97c4de2dfe1d5ed5a38ff3", 22 + "zh:d4d18534a38570a99e9beb3c8b75d6d381a4a407814032a169731d6a68a91382", 23 + ] 24 + } 25 + 4 26 provider "registry.opentofu.org/anapsix/semvers" { 5 27 version = "0.7.1" 6 28 constraints = ">= 0.7.1" ··· 61 83 "zh:e1519544ae3f67196d144e18c21ad681dc29da3133a537ffdd5c2c6271b8db0c", 62 84 "zh:e58cd6b05ed51a6fa072e5de2208ba36a58557c3fb414d50c42b3d40a11366b7", 63 85 "zh:fafc4a49c297516f2a40490f9a7e6d2b437d77a94330797d4eead178c987ccb5", 86 + ] 87 + } 88 + 89 + provider "registry.opentofu.org/hashicorp/helm" { 90 + version = "3.1.1" 91 + constraints = ">= 2.14.0" 92 + hashes = [ 93 + "h1:brfn5YltnzexsfqpWKw+5gS9U/m77e0An3hZQamlEZk=", 94 + "zh:09b38905e234c2e0b185332819614224660050b7e4b25e9e858b593ab01adafe", 95 + "zh:09fed1b19b8bcded169fb76304e06c5b1216d5ceba92948c23384f34ddbf1fac", 96 + "zh:2e0af220f3fe79048d82f6de91752ba9929c215819d3de4f82ccb473bcd9e5df", 97 + "zh:5fe8657cbf6aca769b9565a4fb4605d7b441c2c558d915b067c0adf6f77c58d4", 98 + "zh:713943f797be3a4c6fc6bb5f1306c4f74762bfaa663f98fd8b4c49d28ee54ecf", 99 + "zh:b426458c0bbad64f9000c11af7e74a24ce9e0adb3037c05dadf80c0c3e757931", 100 + "zh:c0664866280a42156484a48f6c461d0ddb2d212da9b6e930c721ef577ab75270", 101 + "zh:e4f9d0ebb70d63d8ac3ccee00a4d8cdb15b97aaa390f95ed65921e9d0f65bfa0", 102 + "zh:f6fe7ecfafc344f4e6aecacf5ae12ac73b94389b9679dcd0f04fc5ff45bdc066", 103 + ] 104 + } 105 + 106 + provider "registry.opentofu.org/hashicorp/kubernetes" { 107 + version = "3.0.1" 108 + constraints = ">= 2.30.0" 109 + hashes = [ 110 + "h1:e0dSpTDhKjin6KYIwLWTR+AHVC7wWlU3VfIx27n1bec=", 111 + "zh:0a6aff192781cfd062efe814d87ec21c84273005a685c818fb3c771ec9fd7051", 112 + "zh:129f10760e8c727f7b593111e0026aa36aeb28c98f6500c749007aabba402332", 113 + "zh:4a0995010f32949b1fbe580db15e76c73ba15aa265f73a7e535addd15dfade0d", 114 + "zh:8b518be59029e8f0ad0767dbbd87f169ac6c906e50636314f8a5ff3c952f0ad5", 115 + "zh:a2f1c113ae07dc5da8410d7a93b7e9ad24c3f17db357f090e6d68b41ed52e616", 116 + "zh:b1d3604a2f545beae0965305d7bca821076cc9127fc34a77eef01c2d0cf916d2", 117 + "zh:c2f2d371018d77affce46fee8b9a9ff0d27c4d5c3c64f8bce654e7c8d3305dc1", 118 + "zh:c7cf958fb9bb429086ff1d371a4b824ec601ec0913dddaf85cd2e38d73ca7ec0", 119 + "zh:f7753278388598c8e27140c5700e5699a0131926df8dad362f86ad67c36585ea", 64 120 ] 65 121 } 66 122
+30
charts.tf
··· 1 + provider "helm" { 2 + kubernetes = { 3 + host = module.kube-hetzner.kubeconfig_data.host 4 + cluster_ca_certificate = module.kube-hetzner.kubeconfig_data.cluster_ca_certificate 5 + client_certificate = module.kube-hetzner.kubeconfig_data.client_certificate 6 + client_key = module.kube-hetzner.kubeconfig_data.client_key 7 + } 8 + } 9 + 10 + resource "helm_release" "mongodb" { 11 + name = "mongodb" 12 + repository = "https://charts.bitnami.com/bitnami" 13 + chart = "mongodb" 14 + namespace = "mongodb" 15 + create_namespace = true 16 + 17 + values = [ 18 + yamlencode({ 19 + auth = { 20 + rootPassword = var.mongodb_root_password != "" ? var.mongodb_root_password : random_password.mongodb_root.result 21 + } 22 + persistence = { 23 + enabled = true 24 + size = "10Gi" 25 + # Uses default 'hcloud-volumes' StorageClass 26 + } 27 + }) 28 + ] 29 + } 30 +
+6
k8s/kustomization.yaml
··· 1 + apiVersion: kustomize.config.k8s.io/v1beta1 2 + kind: Kustomization 3 + 4 + resources: 5 + - waha 6 + - signal
+38
k8s/signal/deployment.yaml
··· 1 + apiVersion: apps/v1 2 + kind: Deployment 3 + metadata: 4 + name: signal 5 + labels: 6 + app: signal 7 + spec: 8 + replicas: 1 9 + selector: 10 + matchLabels: 11 + app: signal 12 + template: 13 + metadata: 14 + labels: 15 + app: signal 16 + spec: 17 + containers: 18 + - name: signal-api 19 + image: bbernhard/signal-cli-rest-api:latest 20 + ports: 21 + - containerPort: 8080 22 + resources: 23 + requests: 24 + cpu: 100m 25 + memory: 128Mi 26 + limits: 27 + cpu: 250m 28 + memory: 512Mi 29 + env: 30 + - name: MODE 31 + value: "native" 32 + volumeMounts: 33 + - name: data 34 + mountPath: /home/.local/share/signal-cli 35 + volumes: 36 + - name: data 37 + persistentVolumeClaim: 38 + claimName: signal-data
+10
k8s/signal/kustomization.yaml
··· 1 + apiVersion: kustomize.config.k8s.io/v1beta1 2 + kind: Kustomization 3 + 4 + resources: 5 + - namespace.yaml 6 + - deployment.yaml 7 + - service.yaml 8 + - pvc.yaml 9 + 10 + namespace: signal
+4
k8s/signal/namespace.yaml
··· 1 + apiVersion: v1 2 + kind: Namespace 3 + metadata: 4 + name: signal
+11
k8s/signal/pvc.yaml
··· 1 + apiVersion: v1 2 + kind: PersistentVolumeClaim 3 + metadata: 4 + name: signal-data 5 + spec: 6 + accessModes: 7 + - ReadWriteOnce 8 + resources: 9 + requests: 10 + storage: 1Gi 11 + # Using default storage class (hcloud-volumes)
+12
k8s/signal/service.yaml
··· 1 + apiVersion: v1 2 + kind: Service 3 + metadata: 4 + name: signal 5 + spec: 6 + selector: 7 + app: signal 8 + ports: 9 + - protocol: TCP 10 + port: 8080 11 + targetPort: 8080 12 + type: ClusterIP
+45
k8s/waha/deployment.yaml
··· 1 + apiVersion: apps/v1 2 + kind: Deployment 3 + metadata: 4 + name: waha 5 + labels: 6 + app: waha 7 + spec: 8 + replicas: 1 9 + selector: 10 + matchLabels: 11 + app: waha 12 + template: 13 + metadata: 14 + labels: 15 + app: waha 16 + spec: 17 + containers: 18 + - name: waha 19 + image: devlikeapro/waha:latest 20 + ports: 21 + - containerPort: 3000 22 + resources: 23 + requests: 24 + cpu: 100m 25 + memory: 256Mi 26 + limits: 27 + cpu: 250m 28 + memory: 512Mi 29 + env: 30 + - name: WHATSAPP_DEFAULT_ENGINE 31 + value: "GOWS" 32 + - name: WAHA_NO_API_KEY 33 + value: "True" 34 + - name: WAHA_DASHBOARD_NO_PASSWORD 35 + value: "True" 36 + - name: WHATSAPP_SWAGGER_NO_PASSWORD 37 + value: "True" 38 + # Since we're not using Ingress, we don't need to set external URLs here unless needed for internal callbacks 39 + volumeMounts: 40 + - name: sessions 41 + mountPath: /app/.sessions 42 + volumes: 43 + - name: sessions 44 + persistentVolumeClaim: 45 + claimName: waha-sessions
+10
k8s/waha/kustomization.yaml
··· 1 + apiVersion: kustomize.config.k8s.io/v1beta1 2 + kind: Kustomization 3 + 4 + resources: 5 + - namespace.yaml 6 + - deployment.yaml 7 + - service.yaml 8 + - pvc.yaml 9 + 10 + namespace: waha
+4
k8s/waha/namespace.yaml
··· 1 + apiVersion: v1 2 + kind: Namespace 3 + metadata: 4 + name: waha
+11
k8s/waha/pvc.yaml
··· 1 + apiVersion: v1 2 + kind: PersistentVolumeClaim 3 + metadata: 4 + name: waha-sessions 5 + spec: 6 + accessModes: 7 + - ReadWriteOnce 8 + resources: 9 + requests: 10 + storage: 1Gi 11 + # Using default storage class (hcloud-volumes from Hetzner CSI)
+12
k8s/waha/service.yaml
··· 1 + apiVersion: v1 2 + kind: Service 3 + metadata: 4 + name: waha 5 + spec: 6 + selector: 7 + app: waha 8 + ports: 9 + - protocol: TCP 10 + port: 3000 11 + targetPort: 3000 12 + type: ClusterIP
+19
kube.tf
··· 1144 1144 source = "hetznercloud/hcloud" 1145 1145 version = ">= 1.51.0" 1146 1146 } 1147 + helm = { 1148 + source = "hashicorp/helm" 1149 + version = ">= 2.14.0" 1150 + } 1151 + kubernetes = { 1152 + source = "hashicorp/kubernetes" 1153 + version = ">= 2.30.0" 1154 + } 1147 1155 } 1148 1156 } 1149 1157 ··· 1156 1164 sensitive = true 1157 1165 default = "" 1158 1166 } 1167 + 1168 + resource "random_password" "mongodb_root" { 1169 + length = 32 1170 + special = false 1171 + } 1172 + 1173 + variable "mongodb_root_password" { 1174 + description = "MongoDB root password (overrides generated one if set)" 1175 + sensitive = true 1176 + default = "" 1177 + }