diff --git a/clusters/cl01tl/helm/blocky/values.yaml b/clusters/cl01tl/helm/blocky/values.yaml index 88714d78e..711de0bd4 100644 --- a/clusters/cl01tl/helm/blocky/values.yaml +++ b/clusters/cl01tl/helm/blocky/values.yaml @@ -115,6 +115,7 @@ blocky: ceph IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl + feishin IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl @@ -137,6 +138,7 @@ blocky: listenarr IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl + navidrome IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl ollama IN CNAME traefik-cl01tl diff --git a/clusters/cl01tl/helm/gatus/values.yaml b/clusters/cl01tl/helm/gatus/values.yaml index d9013135f..a90c607a8 100644 --- a/clusters/cl01tl/helm/gatus/values.yaml +++ b/clusters/cl01tl/helm/gatus/values.yaml @@ -134,15 +134,21 @@ gatus: - name: tubearchivist url: https://tubearchivist.alexlebens.net <<: *defaults + - name: navidrome + url: https://navidrome.alexlebens.net + <<: *defaults + - name: feishin + url: https://feishin.alexlebens.net + <<: *defaults + - name: audiobookshelf + url: https://audiobookshelf.alexlebens.net + <<: *defaults - name: immich url: https://immich.alexlebens.net <<: *defaults - name: photoview url: https://photoview.alexlebens.net <<: *defaults - - name: audiobookshelf - url: https://audiobookshelf.alexlebens.net - <<: *defaults - name: booklore url: https://booklore.alexlebens.net <<: *defaults diff --git a/clusters/cl01tl/helm/homepage/values.yaml b/clusters/cl01tl/helm/homepage/values.yaml index 4aba4f3d9..d3a2a233b 100644 --- a/clusters/cl01tl/helm/homepage/values.yaml +++ b/clusters/cl01tl/helm/homepage/values.yaml @@ -129,12 +129,6 @@ homepage: maximumFractionDigits: 0 services.yaml: | - Media: - - Plex: - icon: sh-plex.webp - description: Media server - href: https://plex.alexlebens.net - siteMonitor: http://plex.plex:32400 - statusStyle: dot - Jellyfin: icon: sh-jellyfin.webp description: Media server @@ -165,6 +159,18 @@ homepage: href: https://tubearchivist.alexlebens.net/login siteMonitor: http://tubearchivist.tubearchivist:80 statusStyle: dot + - Music: + icon: sh-feishin.webp + description: Feishin + href: https://feishin.alexlebens.net + siteMonitor: http://navidrome-feishin.navidrome:80 + statusStyle: dot + - Podcasts and Audiobooks: + icon: sh-audiobookshelf.webp + description: Audiobookshelf + href: https://audiobookshelf.alexlebens.net + siteMonitor: http://audiobookshelf.audiobookshelf:80 + statusStyle: dot - Photos: icon: sh-immich.webp description: Immich @@ -177,12 +183,6 @@ homepage: href: https://photoview.alexlebens.net siteMonitor: http://photoview.photoview:80 statusStyle: dot - - Podcasts and Audiobooks: - icon: sh-audiobookshelf.webp - description: Audiobookshelf - href: https://audiobookshelf.alexlebens.net - siteMonitor: http://audiobookshelf.audiobookshelf:80 - statusStyle: dot - Books: icon: sh-booklore.webp description: Booklore diff --git a/clusters/cl01tl/helm/navidrome/Chart.lock b/clusters/cl01tl/helm/navidrome/Chart.lock new file mode 100644 index 000000000..75d58f1fa --- /dev/null +++ b/clusters/cl01tl/helm/navidrome/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: app-template + repository: https://bjw-s-labs.github.io/helm-charts/ + version: 4.5.0 +- name: volsync-target + repository: oci://harbor.alexlebens.net/helm-charts + version: 0.6.0 +digest: sha256:2d5e357064259b97afb7c8239d6d57da6f59c267a2a530262af9db32d228ae66 +generated: "2025-12-24T14:05:31.844353-06:00" diff --git a/clusters/cl01tl/helm/navidrome/Chart.yaml b/clusters/cl01tl/helm/navidrome/Chart.yaml new file mode 100644 index 000000000..151a0fd51 --- /dev/null +++ b/clusters/cl01tl/helm/navidrome/Chart.yaml @@ -0,0 +1,27 @@ +apiVersion: v2 +name: navidrome +version: 1.0.0 +description: Navidrome +keywords: + - navidrome + - feishin + - music +home: https://wiki.alexlebens.dev/s/ +sources: + - https://github.com/navidrome/navidrome + - https://github.com/jeffvli/feishin + - https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template +maintainers: + - name: alexlebens +dependencies: + - name: app-template + alias: navidrome + repository: https://bjw-s-labs.github.io/helm-charts/ + version: 4.5.0 + - name: volsync-target + alias: volsync-target-data + version: 0.6.0 + repository: oci://harbor.alexlebens.net/helm-charts +icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/navidrome.png +# renovate: github=navidrome/navidrome +appVersion: 1.42.2 diff --git a/clusters/cl01tl/helm/navidrome/templates/persistent-volume-claim.yaml b/clusters/cl01tl/helm/navidrome/templates/persistent-volume-claim.yaml new file mode 100644 index 000000000..34e8ba610 --- /dev/null +++ b/clusters/cl01tl/helm/navidrome/templates/persistent-volume-claim.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: navidrome-music-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: navidrome-music-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + volumeName: navidrome-music-nfs-storage + storageClassName: nfs-client + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi diff --git a/clusters/cl01tl/helm/navidrome/templates/persistent-volume.yaml b/clusters/cl01tl/helm/navidrome/templates/persistent-volume.yaml new file mode 100644 index 000000000..096d9d4b2 --- /dev/null +++ b/clusters/cl01tl/helm/navidrome/templates/persistent-volume.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: navidrome-music-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: navidrome-music-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/Music + server: synologybond.alexlebens.net + mountOptions: + - vers=4 + - minorversion=1 + - noac diff --git a/clusters/cl01tl/helm/navidrome/values.yaml b/clusters/cl01tl/helm/navidrome/values.yaml new file mode 100644 index 000000000..6ccb39910 --- /dev/null +++ b/clusters/cl01tl/helm/navidrome/values.yaml @@ -0,0 +1,154 @@ +navidrome: + controllers: + main: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + containers: + main: + image: + repository: deluan/navidrome + tag: 0.59.0@sha256:4edc8a1de3e042f30b78a478325839f4395177eb8201c27543dccc0eba674f23 + pullPolicy: IfNotPresent + env: + - name: ND_MUSICFOLDER + value: /music + - name: ND_DATAFOLDER + value: /data + - name: ND_CACHEFOLDER + value: /cache + - name: ND_BASEURL + value: docker + - name: ND_ENABLEINSIGHTSCOLLECTOR + value: false + - name: ND_PROMETHEUS_ENABLED + value: true + resources: + limits: + gpu.intel.com/i915: 1 + requests: + gpu.intel.com/i915: 1 + cpu: 10m + memory: 128Mi + feishin: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + containers: + main: + image: + repository: ghcr.io/jeffvli/feishin + tag: 1.0.1-beta.1@sha256:61239641f23a33f99c2858419b14afb66683f3cd82010363fba92be3993fd894 + pullPolicy: IfNotPresent + env: + - name: SERVER_NAME + value: talos + - name: SERVER_LOCK + value: true + - name: SERVER_TYPE + value: navidrome + - name: SERVER_URL + value: http://navidrome-main.navidrome:80 + service: + main: + controller: main + ports: + http: + port: 80 + targetPort: 4533 + protocol: HTTP + feishin: + controller: feishin + ports: + http: + port: 80 + targetPort: 9180 + protocol: HTTP + serviceMonitor: + main: + selector: + matchLabels: + app.kubernetes.io/name: navidrome + app.kubernetes.io/instance: navidrome + serviceName: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}' + endpoints: + - port: http + scheme: http + path: /metrics + interval: 30s + scrapeTimeout: 15s + route: + main: + kind: HTTPRoute + parentRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: traefik-gateway + namespace: traefik + hostnames: + - navidrome.alexlebens.net + rules: + - backendRefs: + - group: '' + kind: Service + name: navidrome + port: 80 + weight: 100 + matches: + - path: + type: PathPrefix + value: / + feishin: + kind: HTTPRoute + parentRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: traefik-gateway + namespace: traefik + hostnames: + - feishin.alexlebens.net + rules: + - backendRefs: + - group: '' + kind: Service + name: feishin + port: 80 + weight: 100 + matches: + - path: + type: PathPrefix + value: / + persistence: + data: + forceRename: navidrome-data + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 10Gi + advancedMounts: + main: + main: + - path: /data + readOnly: false + cache: + type: emptyDir + advancedMounts: + main: + main: + - path: /cache + readOnly: false + music: + existingClaim: navidrome-music-nfs-storage + advancedMounts: + main: + main: + - path: /mnt/store/Music + readOnly: true +volsync-target-data: + pvcTarget: navidrome-data + moverSecurityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: OnRootMismatch diff --git a/hosts/ps08rp/blocky/config.yml b/hosts/ps08rp/blocky/config.yml index 7d580080e..f2a2724f3 100644 --- a/hosts/ps08rp/blocky/config.yml +++ b/hosts/ps08rp/blocky/config.yml @@ -91,6 +91,7 @@ customDNS: ceph IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl + feishin IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl @@ -113,6 +114,7 @@ customDNS: listenarr IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl + navidrome IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl ollama IN CNAME traefik-cl01tl diff --git a/hosts/ps09rp/blocky/config.yml b/hosts/ps09rp/blocky/config.yml index 7d580080e..f2a2724f3 100644 --- a/hosts/ps09rp/blocky/config.yml +++ b/hosts/ps09rp/blocky/config.yml @@ -91,6 +91,7 @@ customDNS: ceph IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl + feishin IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl @@ -113,6 +114,7 @@ customDNS: listenarr IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl n8n IN CNAME traefik-cl01tl + navidrome IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl objects IN CNAME traefik-cl01tl ollama IN CNAME traefik-cl01tl