From 81cb98c58e0d8519ec8fb82dee5aedaded05b9bc Mon Sep 17 00:00:00 2001 From: Alex Lebens Date: Wed, 19 Feb 2025 19:08:26 -0600 Subject: [PATCH] add tubearchivist --- .../applications/tubearchivist/Chart.yaml | 34 +++++ .../templates/external-secret.yaml | 55 +++++++ .../templates/persistent-volume-claim.yaml | 19 +++ .../templates/persistent-volume.yaml | 25 ++++ .../applications/tubearchivist/values.yaml | 139 ++++++++++++++++++ 5 files changed, 272 insertions(+) create mode 100644 clusters/cl01tl/applications/tubearchivist/Chart.yaml create mode 100644 clusters/cl01tl/applications/tubearchivist/templates/external-secret.yaml create mode 100644 clusters/cl01tl/applications/tubearchivist/templates/persistent-volume-claim.yaml create mode 100644 clusters/cl01tl/applications/tubearchivist/templates/persistent-volume.yaml create mode 100644 clusters/cl01tl/applications/tubearchivist/values.yaml diff --git a/clusters/cl01tl/applications/tubearchivist/Chart.yaml b/clusters/cl01tl/applications/tubearchivist/Chart.yaml new file mode 100644 index 000000000..83431cb5f --- /dev/null +++ b/clusters/cl01tl/applications/tubearchivist/Chart.yaml @@ -0,0 +1,34 @@ +apiVersion: v2 +name: tubearchivist +version: 1.0.0 +description: Tube Archivist +keywords: + - tubearchivist + - download + - video + - youtube +home: https://wiki.alexlebens.dev/doc/tube-archivist-Bv6xCDKPM5 +sources: + - https://github.com/tubearchivist/tubearchivist + - https://github.com/elastic/elasticsearch + - https://github.com/redis/redis + - https://hub.docker.com/r/bbilly1/tubearchivist + - https://hub.docker.com/r/redis/redis-stack-server + - https://github.com/bjw-s/helm-charts/tree/main/charts/other/app-template + - https://github.com/bitnami/charts/tree/main/bitnami/redis + - https://github.com/bitnami/charts/tree/main/bitnami/elasticsearch +maintainers: + - name: alexlebens +dependencies: + - name: app-template + alias: tubearchivist + repository: https://bjw-s.github.io/helm-charts/ + version: 3.6.1 + - name: elasticsearch + version: 21.4.5 + repository: https://charts.bitnami.com/bitnami + - name: redis + version: 19.6.4 + repository: https://charts.bitnami.com/bitnami +icon: https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/tube-archivist.png +appVersion: v0.4.11 diff --git a/clusters/cl01tl/applications/tubearchivist/templates/external-secret.yaml b/clusters/cl01tl/applications/tubearchivist/templates/external-secret.yaml new file mode 100644 index 000000000..20f84be3c --- /dev/null +++ b/clusters/cl01tl/applications/tubearchivist/templates/external-secret.yaml @@ -0,0 +1,55 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: tubearchivist-config-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ .Release.Name }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: web + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: ELASTIC_PASSWORD + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /cl01tl/tubearchivist/env + metadataPolicy: None + property: ELASTIC_PASSWORD + - secretKey: TA_PASSWORD + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /cl01tl/tubearchivist/env + metadataPolicy: None + property: TA_PASSWORD + +--- +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: tubearchivist-elasticsearch-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ .Release.Name }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: web + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: ELASTIC_PASSWORD + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /cl01tl/tubearchivist/env + metadataPolicy: None + property: ELASTIC_PASSWORD diff --git a/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume-claim.yaml b/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume-claim.yaml new file mode 100644 index 000000000..66f3958ff --- /dev/null +++ b/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume-claim.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: tubearchivist-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: tubearchivist-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: storage + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + volumeName: tubearchivist-nfs-storage + storageClassName: nfs-client + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi diff --git a/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume.yaml b/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume.yaml new file mode 100644 index 000000000..719c64ea6 --- /dev/null +++ b/clusters/cl01tl/applications/tubearchivist/templates/persistent-volume.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: tubearchivist-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: tubearchivist-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: storage + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + persistentVolumeReclaimPolicy: Retain + storageClassName: nfs-client + capacity: + storage: 1Gi + accessModes: + - ReadWriteMany + nfs: + path: /volume2/Storage/YouTube + server: synologybond.alexlebens.net + mountOptions: + - vers=4 + - minorversion=1 + - noac diff --git a/clusters/cl01tl/applications/tubearchivist/values.yaml b/clusters/cl01tl/applications/tubearchivist/values.yaml new file mode 100644 index 000000000..10c748a09 --- /dev/null +++ b/clusters/cl01tl/applications/tubearchivist/values.yaml @@ -0,0 +1,139 @@ +tubearchivist: + controllers: + main: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + containers: + main: + image: + repository: bbilly1/tubearchivist + tag: v0.4.13 + pullPolicy: IfNotPresent + env: + - name: TZ + value: US/Central + - name: HOST_UID + value: 1000 + - name: HOST_GID + value: 1000 + - name: ES_URL + value: http://tubearchivist-elasticsearch:9200 + - name: REDIS_HOST + value: tubearchivist-redis-headless + - name: TA_HOST + value: tubearchivist-cl01tl.boreal-beaufort.ts.net tubearchivist.tubearchivist + - name: TA_USERNAME + value: admin + envFrom: + - secretRef: + name: tubearchivist-config-secret + probes: + liveness: + enabled: true + custom: true + spec: + exec: + command: + - /usr/bin/env + - bash + - -c + - curl --fail http://localhost:8000/health + failureThreshold: 5 + initialDelaySeconds: 60 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 10 + resources: + requests: + cpu: 10m + memory: 1Gi + serviceAccount: + create: true + service: + main: + controller: main + ports: + http: + port: 80 + targetPort: 8000 + protocol: HTTP + ingress: + tailscale: + enabled: true + className: tailscale + hosts: + - host: tubearchivist-cl01tl + paths: + - path: / + pathType: Prefix + service: + name: tubearchivist + port: 80 + tls: + - hosts: + - tubearchivist-cl01tl + persistence: + data: + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 20Gi + retain: true + advancedMounts: + main: + main: + - path: /cache + readOnly: false + youtube: + existingClaim: tubearchivist-nfs-storage + advancedMounts: + main: + main: + - path: /youtube + readOnly: false +redis: + image: + repository: redis/redis-stack-server + tag: 7.2.0-v13 + architecture: standalone + auth: + enabled: false + commonConfiguration: |- + # Enable AOF https://redis.io/topics/persistence#append-only-file + appendonly yes + # Disable RDB persistence, AOF persistence already enabled. + save "" + # Enable Redis Json module + loadmodule /opt/redis-stack/lib/rejson.so +elasticsearch: + global: + storageClass: ceph-block + extraEnvVars: + - name: discovery.type + value: single-node + - name: xpack.security.enabled + value: "true" + extraEnvVarsSecret: tubearchivist-elasticsearch-secret + extraConfig: + path: + repo: /usr/share/elasticsearch/data/snapshot + extraVolumes: + - name: snapshot + nfs: + path: /volume2/Storage/TubeArchivist + server: synologybond.alexlebens.net + extraVolumeMounts: + - name: snapshot + mountPath: /usr/share/elasticsearch/data/snapshot + snapshotRepoPath: /usr/share/elasticsearch/data/snapshot + master: + masterOnly: false + replicaCount: 1 + data: + replicaCount: 0 + coordinating: + replicaCount: 0 + ingest: + enabled: false + replicaCount: 0