From 20dfbde02f39cdc68014ab2cf8f045c1dfb0b376 Mon Sep 17 00:00:00 2001 From: Ruben Hensen Date: Sat, 25 Apr 2026 20:39:20 +0200 Subject: [PATCH] Add serpbear --- apps/templates/serpbear-folder.yaml | 21 +++++++++ dns/domains/rubenhensen.nl.yaml | 4 ++ renovate.json | 3 +- serpbear/data-persistentvolumeclaim.yaml | 12 +++++ serpbear/external-secret.yaml | 29 ++++++++++++ serpbear/ingress.yaml | 25 +++++++++++ serpbear/serpbear-deployment.yaml | 57 ++++++++++++++++++++++++ serpbear/serpbear-service.yaml | 13 ++++++ 8 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 apps/templates/serpbear-folder.yaml create mode 100644 serpbear/data-persistentvolumeclaim.yaml create mode 100644 serpbear/external-secret.yaml create mode 100644 serpbear/ingress.yaml create mode 100644 serpbear/serpbear-deployment.yaml create mode 100644 serpbear/serpbear-service.yaml diff --git a/apps/templates/serpbear-folder.yaml b/apps/templates/serpbear-folder.yaml new file mode 100644 index 0000000..3f418f9 --- /dev/null +++ b/apps/templates/serpbear-folder.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: serpbear-folder + namespace: argocd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: default + source: + repoURL: https://github.com/rubenhensen/k8scd.git + targetRevision: HEAD + path: serpbear + destination: + server: https://kubernetes.default.svc + namespace: serpbear + syncPolicy: + syncOptions: + - CreateNamespace=true + automated: + selfHeal: true diff --git a/dns/domains/rubenhensen.nl.yaml b/dns/domains/rubenhensen.nl.yaml index a7549f9..a6de2a0 100644 --- a/dns/domains/rubenhensen.nl.yaml +++ b/dns/domains/rubenhensen.nl.yaml @@ -51,6 +51,10 @@ records: expire: 300 type: A content: "62.41.87.114" + - name: "serpbear" + expire: 300 + type: A + content: "62.41.87.114" - name: "@" expire: 300 type: MX diff --git a/renovate.json b/renovate.json index eff67a4..e95a512 100644 --- a/renovate.json +++ b/renovate.json @@ -15,7 +15,8 @@ }, "kubernetes": { "managerFilePatterns": [ - "/apps/templates/.+\\.yaml$/" + "/apps/templates/.+\\.yaml$/", + "/serpbear/.+\\.yaml$/" ] }, "customManagers": [ diff --git a/serpbear/data-persistentvolumeclaim.yaml b/serpbear/data-persistentvolumeclaim.yaml new file mode 100644 index 0000000..e18cdf6 --- /dev/null +++ b/serpbear/data-persistentvolumeclaim.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + io.kompose.service: data + name: data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/serpbear/external-secret.yaml b/serpbear/external-secret.yaml new file mode 100644 index 0000000..0a6ebe7 --- /dev/null +++ b/serpbear/external-secret.yaml @@ -0,0 +1,29 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: serpbear-secrets +spec: + secretStoreRef: + name: vault-backend + kind: ClusterSecretStore + refreshInterval: 15m + target: + name: serpbear-secrets + creationPolicy: Owner + data: + - secretKey: user + remoteRef: + key: kv/serpbear + property: user + - secretKey: password + remoteRef: + key: kv/serpbear + property: password + - secretKey: secret + remoteRef: + key: kv/serpbear + property: secret + - secretKey: apikey + remoteRef: + key: kv/serpbear + property: apikey diff --git a/serpbear/ingress.yaml b/serpbear/ingress.yaml new file mode 100644 index 0000000..f172ed9 --- /dev/null +++ b/serpbear/ingress.yaml @@ -0,0 +1,25 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: serpbear-ingress + annotations: + cert-manager.io/cluster-issuer: prod-cluster-issuer + nginx.ingress.kubernetes.io/backend-protocol: "HTTP" + nginx.ingress.kubernetes.io/ssl-passthrough: "false" +spec: + ingressClassName: nginx + rules: + - host: serpbear.rubenhensen.nl + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: serpbear + port: + number: 3000 + tls: + - secretName: letsencrypt-prod + hosts: + - serpbear.rubenhensen.nl diff --git a/serpbear/serpbear-deployment.yaml b/serpbear/serpbear-deployment.yaml new file mode 100644 index 0000000..61b87a4 --- /dev/null +++ b/serpbear/serpbear-deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + io.kompose.service: serpbear + name: serpbear +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: serpbear + strategy: + type: Recreate + template: + metadata: + labels: + io.kompose.service: serpbear + spec: + containers: + - env: + - name: USER + valueFrom: + secretKeyRef: + name: serpbear-secrets + key: user + - name: PASSWORD + valueFrom: + secretKeyRef: + name: serpbear-secrets + key: password + - name: SECRET + valueFrom: + secretKeyRef: + name: serpbear-secrets + key: secret + - name: APIKEY + valueFrom: + secretKeyRef: + name: serpbear-secrets + key: apikey + - name: NEXT_PUBLIC_APP_URL + value: https://serpbear.rubenhensen.nl + - name: TZ + value: Europe/Amsterdam + image: towfiqi/serpbear:3.1.0 + name: serpbear + ports: + - containerPort: 3000 + protocol: TCP + volumeMounts: + - mountPath: /app/data + name: data + restartPolicy: Always + volumes: + - name: data + persistentVolumeClaim: + claimName: data diff --git a/serpbear/serpbear-service.yaml b/serpbear/serpbear-service.yaml new file mode 100644 index 0000000..05c31c9 --- /dev/null +++ b/serpbear/serpbear-service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + io.kompose.service: serpbear + name: serpbear +spec: + ports: + - name: "3000" + port: 3000 + targetPort: 3000 + selector: + io.kompose.service: serpbear