diff --git a/clusters/cl01tl/helm/blocky/values.yaml b/clusters/cl01tl/helm/blocky/values.yaml index 711de0bd4..0f7b94a28 100644 --- a/clusters/cl01tl/helm/blocky/values.yaml +++ b/clusters/cl01tl/helm/blocky/values.yaml @@ -161,6 +161,7 @@ blocky: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + soulsync IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tautulli IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl diff --git a/clusters/cl01tl/helm/gatus/values.yaml b/clusters/cl01tl/helm/gatus/values.yaml index a90c607a8..7302fa484 100644 --- a/clusters/cl01tl/helm/gatus/values.yaml +++ b/clusters/cl01tl/helm/gatus/values.yaml @@ -316,6 +316,9 @@ gatus: - name: lidatube url: https://lidatube.alexlebens.net <<: *defaults + - name: soulsync + url: https://soulsync.alexlebens.net + <<: *defaults - name: slskd url: https://slskd.alexlebens.net <<: *defaults diff --git a/clusters/cl01tl/helm/homepage/values.yaml b/clusters/cl01tl/helm/homepage/values.yaml index 0224e2bf5..22b2c5d6f 100644 --- a/clusters/cl01tl/helm/homepage/values.yaml +++ b/clusters/cl01tl/helm/homepage/values.yaml @@ -667,6 +667,12 @@ homepage: href: https://lidatube.alexlebens.net siteMonitor: http://lidatube.lidatube:80 statusStyle: dot + - SoulSync: + icon: sh-soulsync.webp + description: Playlist Sync + href: https://soulsync.alexlebens.net + siteMonitor: http://soulsync.soulsync:80 + statusStyle: dot - Soulseek: icon: sh-slskd.webp description: slskd diff --git a/clusters/cl01tl/helm/soulsync/Chart.lock b/clusters/cl01tl/helm/soulsync/Chart.lock new file mode 100644 index 000000000..6aff40f9d --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/Chart.lock @@ -0,0 +1,12 @@ +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 +- name: volsync-target + repository: oci://harbor.alexlebens.net/helm-charts + version: 0.6.0 +digest: sha256:60836915fb9a8028b084171ac4228520e9edc9ee6626b257c6d37db723d91f49 +generated: "2025-12-24T15:26:54.904687-06:00" diff --git a/clusters/cl01tl/helm/soulsync/Chart.yaml b/clusters/cl01tl/helm/soulsync/Chart.yaml new file mode 100644 index 000000000..aedc228d9 --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/Chart.yaml @@ -0,0 +1,29 @@ +apiVersion: v2 +name: soulsync +version: 1.0.0 +description: SoulSync +keywords: + - soulsync + - music +home: https://wiki.alexlebens.dev/s/ +sources: + - https://github.com/Nezreka/SoulSync + - https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template +maintainers: + - name: alexlebens +dependencies: + - name: app-template + alias: soulsync + repository: https://bjw-s-labs.github.io/helm-charts/ + version: 4.5.0 + - name: volsync-target + alias: volsync-target-config + version: 0.6.0 + repository: oci://harbor.alexlebens.net/helm-charts + - name: volsync-target + alias: volsync-target-database + version: 0.6.0 + repository: oci://harbor.alexlebens.net/helm-charts +icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/soulsync.png +# renovate: github=Nezreka/SoulSync +appVersion: 1.42.2 diff --git a/clusters/cl01tl/helm/soulsync/templates/external-secret.yaml b/clusters/cl01tl/helm/soulsync/templates/external-secret.yaml new file mode 100644 index 000000000..ec464ac6a --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/templates/external-secret.yaml @@ -0,0 +1,21 @@ +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: soulsync-config-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: soulsync-config-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: config.json + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /cl01tl/soulsync/config + metadataPolicy: None + property: config.json diff --git a/clusters/cl01tl/helm/soulsync/templates/persistent-volume-claim.yaml b/clusters/cl01tl/helm/soulsync/templates/persistent-volume-claim.yaml new file mode 100644 index 000000000..079a7d246 --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/templates/persistent-volume-claim.yaml @@ -0,0 +1,36 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: soulsync-music-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: soulsync-music-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + volumeName: soulsync-music-nfs-storage + storageClassName: nfs-client + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: soulsync-slskd-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: soulsync-slskd-nfs-storage + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + volumeName: soulsync-slskd-nfs-storage + storageClassName: nfs-client + accessModes: + - ReadWriteMany + resources: + requests: + storage: 1Gi diff --git a/clusters/cl01tl/helm/soulsync/templates/persistent-volume.yaml b/clusters/cl01tl/helm/soulsync/templates/persistent-volume.yaml new file mode 100644 index 000000000..b988b74d0 --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/templates/persistent-volume.yaml @@ -0,0 +1,48 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: soulsync-music-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: soulsync-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 + +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: soulsync-slskd-nfs-storage + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: soulsync-slskd-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/slskd/Downloads + server: synologybond.alexlebens.net + mountOptions: + - vers=4 + - minorversion=1 + - noac diff --git a/clusters/cl01tl/helm/soulsync/values.yaml b/clusters/cl01tl/helm/soulsync/values.yaml new file mode 100644 index 000000000..01c05c4e7 --- /dev/null +++ b/clusters/cl01tl/helm/soulsync/values.yaml @@ -0,0 +1,163 @@ +soulsync: + controllers: + main: + type: deployment + replicas: 1 + strategy: Recreate + revisionHistoryLimit: 3 + pod: + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: OnRootMismatch + containers: + main: + image: + repository: boulderbadgedad/soulsync + tag: latest@sha256:6cb116bd7c0d0a56a017a7d84245d0356f372345fc3f98c820abae681b5e41c5 + pullPolicy: IfNotPresent + env: + - name: TZ + value: US/Central + - name: PUID + value: 1000 + - name: PGID + value: 1000 + - name: UMASK + value: 022 + - name: FLASK_ENV + value: production + - name: PYTHONPATH + value: /app + - name: SOULSYNC_CONFIG_PATH + value: /app/config/config.json + probes: + liveness: + enabled: true + custom: true + spec: + exec: + command: + - CMD + - curl + - -f + - http://localhost:8888/ + failureThreshold: 5 + initialDelaySeconds: 60 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 10 + resources: + requests: + cpu: 100m + memory: 512Mi + service: + main: + controller: main + ports: + http: + port: 80 + targetPort: 8008 + protocol: HTTP + serviceMonitor: + main: + selector: + matchLabels: + app.kubernetes.io/name: soulsync + app.kubernetes.io/instance: soulsync + 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: + - soulsync.alexlebens.net + rules: + - backendRefs: + - group: '' + kind: Service + name: soulsync + port: 80 + weight: 100 + matches: + - path: + type: PathPrefix + value: / + persistence: + config-file: + enabled: true + type: secret + name: soulsync + advancedMounts: + main: + main: + - path: /app/config/config.json + readOnly: true + mountPropagation: None + subPath: config.json + config: + forceRename: soulsync-config + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 10Gi + advancedMounts: + main: + main: + - path: /app/config + readOnly: false + database: + forceRename: soulsync-config + storageClass: ceph-block + accessMode: ReadWriteOnce + size: 10Gi + advancedMounts: + main: + main: + - path: /app/database + readOnly: false + downloads: + existingClaim: soulsync-slskd-nfs-storage + advancedMounts: + main: + main: + - path: /app/downloads + readOnly: true + transfer: + type: emptyDir + advancedMounts: + main: + main: + - path: /app/Transfer + readOnly: false + music: + existingClaim: soulsync-music-nfs-storage + advancedMounts: + main: + main: + - path: /music + readOnly: true +volsync-target-config: + pvcTarget: soulsync-config + moverSecurityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: OnRootMismatch +volsync-target-database: + pvcTarget: soulsync-database + moverSecurityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + fsGroupChangePolicy: OnRootMismatch diff --git a/hosts/ps08rp/blocky/config.yml b/hosts/ps08rp/blocky/config.yml index f2a2724f3..3e7eb3dc4 100644 --- a/hosts/ps08rp/blocky/config.yml +++ b/hosts/ps08rp/blocky/config.yml @@ -137,6 +137,7 @@ customDNS: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + soulsync IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tautulli IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl diff --git a/hosts/ps09rp/blocky/config.yml b/hosts/ps09rp/blocky/config.yml index f2a2724f3..3e7eb3dc4 100644 --- a/hosts/ps09rp/blocky/config.yml +++ b/hosts/ps09rp/blocky/config.yml @@ -137,6 +137,7 @@ customDNS: sonarr IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl + soulsync IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl tautulli IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl