diff --git a/clusters/cl01tl/applications/homepage/values.yaml b/clusters/cl01tl/applications/homepage/values.yaml index 3d79246a0..294aba279 100644 --- a/clusters/cl01tl/applications/homepage/values.yaml +++ b/clusters/cl01tl/applications/homepage/values.yaml @@ -138,6 +138,12 @@ homepage: href: https://overseerr.alexlebens.net siteMonitor: http://overseerr.overseerr:80 statusStyle: dot + - Media Manager: + icon: sh-media-manager.webp + description: Media Manager + href: https://media-manager.alexlebens.net + siteMonitor: http://media-manager.media-manager:80 + statusStyle: dot - Jellyfin: icon: sh-jellyfin.webp description: Media server diff --git a/clusters/cl01tl/applications/media-manager/Chart.yaml b/clusters/cl01tl/applications/media-manager/Chart.yaml new file mode 100644 index 000000000..0035eb0c7 --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/Chart.yaml @@ -0,0 +1,29 @@ +apiVersion: v2 +name: media-manager +version: 1.0.0 +description: Media Manager +keywords: + - media-manager + - movies + - shows + - metrics +home: https://wiki.alexlebens.dev/s/ +sources: + - https://github.com/maxdorninger/MediaManager + - https://github.com/cloudnative-pg/cloudnative-pg + - https://github.com/maxdorninger/MediaManager/pkgs/container/mediamanager + - https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template + - https://gitea.alexlebens.dev/alexlebens/helm-charts/src/branch/main/charts/postgres-cluster +maintainers: + - name: alexlebens +dependencies: + - name: app-template + alias: media-manager + repository: https://bjw-s-labs.github.io/helm-charts/ + version: 4.3.0 + - name: postgres-cluster + alias: postgres-17-cluster + version: 5.1.0 + repository: oci://harbor.alexlebens.net/helm-charts +icon: https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mediamanager.png +appVersion: v1.8.0 diff --git a/clusters/cl01tl/applications/media-manager/templates/external-secret.yaml b/clusters/cl01tl/applications/media-manager/templates/external-secret.yaml new file mode 100644 index 000000000..59c92c8ea --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/templates/external-secret.yaml @@ -0,0 +1,51 @@ +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: media-manager-config-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: media-manager-config-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: config.toml + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /cl01tl/media-manager/config + metadataPolicy: None + property: config.toml + +--- +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: media-manager-postgresql-17-cluster-backup-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: media-manager-postgresql-17-cluster-backup-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: ACCESS_KEY_ID + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /digital-ocean/home-infra/postgres-backups + metadataPolicy: None + property: access + - secretKey: ACCESS_SECRET_KEY + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /digital-ocean/home-infra/postgres-backups + metadataPolicy: None + property: secret diff --git a/clusters/cl01tl/applications/media-manager/templates/http-route.yaml b/clusters/cl01tl/applications/media-manager/templates/http-route.yaml new file mode 100644 index 000000000..b85109245 --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/templates/http-route.yaml @@ -0,0 +1,28 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: http-route-media-manager + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: http-route-media-manager + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + parentRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: traefik-gateway + namespace: traefik + hostnames: + - media-manager.alexlebens.net + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - group: '' + kind: Service + name: media-manager + port: 80 + weight: 100 diff --git a/clusters/cl01tl/applications/media-manager/templates/persistent-volume-claim.yaml b/clusters/cl01tl/applications/media-manager/templates/persistent-volume-claim.yaml new file mode 100644 index 000000000..48f7078db --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/templates/persistent-volume-claim.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: media-manager-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: media-manager-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + volumeName: media-manager-nfs-storage + storageClassName: nfs-client + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi diff --git a/clusters/cl01tl/applications/media-manager/templates/persistent-volume.yaml b/clusters/cl01tl/applications/media-manager/templates/persistent-volume.yaml new file mode 100644 index 000000000..a2d9368c9 --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/templates/persistent-volume.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: media-manager-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: media-manager-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + persistentVolumeReclaimPolicy: Retain + storageClassName: nfs-client + capacity: + storage: 1Gi + accessModes: + - ReadWriteMany + nfs: + path: /volume2/Storage + server: synologybond.alexlebens.net + mountOptions: + - vers=4 + - minorversion=1 + - noac diff --git a/clusters/cl01tl/applications/media-manager/values.yaml b/clusters/cl01tl/applications/media-manager/values.yaml new file mode 100644 index 000000000..99aa9b40b --- /dev/null +++ b/clusters/cl01tl/applications/media-manager/values.yaml @@ -0,0 +1,90 @@ +media-manager: + controllers: + main: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + containers: + main: + image: + repository: ghcr.io/maxdorninger/mediamanager/mediamanager + tag: latest@sha256:631745e070319f1845565ef4cd1f31b14e09cecb81d682e0cfeddb46072e5062 + pullPolicy: IfNotPresent + env: + - name: CONFIG_DIR + value: /app/config + resources: + requests: + cpu: 50m + memory: 512Mi + service: + main: + controller: main + ports: + http: + port: 80 + targetPort: 8000 + protocol: HTTP + persistence: + config: + enabled: true + type: secret + name: media-manager-config-secret + advancedMounts: + main: + main: + - path: /app/config/config.toml + readOnly: true + mountPropagation: None + subPath: config.toml + config-data: + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 1Gi + advancedMounts: + main: + main: + - path: /app/config + readOnly: false + images: + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 10Gi + advancedMounts: + main: + main: + - path: /data/images/ + readOnly: false + media: + existingClaim: media-manager-nfs-storage + advancedMounts: + main: + main: + - path: /data/mnt/store + readOnly: false +postgres-17-cluster: + mode: standalone + cluster: + storage: + storageClass: local-path + walStorage: + storageClass: local-path + monitoring: + enabled: true + prometheusRule: + enabled: true + recovery: + method: objectStore + objectStore: + endpointURL: https://nyc3.digitaloceanspaces.com + destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/media-manager/media-manager-postgresql-17-cluster + endpointCredentials: media-manager-postgresql-17-cluster-backup-secret + recoveryIndex: 2 + backup: + enabled: false + endpointURL: https://nyc3.digitaloceanspaces.com + destinationPath: s3://postgres-backups-ce540ddf106d186bbddca68a/cl01tl/media-manager/media-manager-postgresql-17-cluster + endpointCredentials: media-manager-postgresql-17-cluster-backup-secret + backupIndex: 2 + retentionPolicy: "3d" diff --git a/clusters/cl01tl/services/blocky/values.yaml b/clusters/cl01tl/services/blocky/values.yaml index 5b1c7d6ab..3b831c41d 100644 --- a/clusters/cl01tl/services/blocky/values.yaml +++ b/clusters/cl01tl/services/blocky/values.yaml @@ -134,6 +134,7 @@ blocky: lidarr IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl + media-manager IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl diff --git a/hosts/ps08rp/blocky/config.yml b/hosts/ps08rp/blocky/config.yml index 0f5331271..ad4d99c2a 100644 --- a/hosts/ps08rp/blocky/config.yml +++ b/hosts/ps08rp/blocky/config.yml @@ -110,8 +110,7 @@ customDNS: lidarr IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl - minio-directus IN CNAME traefik-cl01tl - minio-outline IN CNAME traefik-cl01tl + media-manager IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl diff --git a/hosts/ps09rp/blocky/config.yml b/hosts/ps09rp/blocky/config.yml index 0f5331271..ad4d99c2a 100644 --- a/hosts/ps09rp/blocky/config.yml +++ b/hosts/ps09rp/blocky/config.yml @@ -110,8 +110,7 @@ customDNS: lidarr IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl - minio-directus IN CNAME traefik-cl01tl - minio-outline IN CNAME traefik-cl01tl + media-manager IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl