diff --git a/data-restorer.yaml b/data-restorer.yaml index ab2b59d..d48a5d1 100644 --- a/data-restorer.yaml +++ b/data-restorer.yaml @@ -14,4 +14,4 @@ spec: volumes: - name: target-volume persistentVolumeClaim: - claimName: musicseerr-config-pvc + claimName: calibre-web-config-pvc diff --git a/services/abs-kosync-bridge/abs-kosync-deployment.yaml b/retired-services/abs-kosync-bridge/abs-kosync-deployment.yaml similarity index 100% rename from services/abs-kosync-bridge/abs-kosync-deployment.yaml rename to retired-services/abs-kosync-bridge/abs-kosync-deployment.yaml diff --git a/services/abs-kosync-bridge/abs-kosync-ingress.yaml b/retired-services/abs-kosync-bridge/abs-kosync-ingress.yaml similarity index 100% rename from services/abs-kosync-bridge/abs-kosync-ingress.yaml rename to retired-services/abs-kosync-bridge/abs-kosync-ingress.yaml diff --git a/services/abs-kosync-bridge/abs-kosync-service.yaml b/retired-services/abs-kosync-bridge/abs-kosync-service.yaml similarity index 100% rename from services/abs-kosync-bridge/abs-kosync-service.yaml rename to retired-services/abs-kosync-bridge/abs-kosync-service.yaml diff --git a/services/gitlab/compose-gitlab.yaml b/retired-services/gitlab/compose-gitlab.yaml similarity index 100% rename from services/gitlab/compose-gitlab.yaml rename to retired-services/gitlab/compose-gitlab.yaml diff --git a/services/hass/compose-hass.yaml b/retired-services/hass/compose-hass.yaml similarity index 100% rename from services/hass/compose-hass.yaml rename to retired-services/hass/compose-hass.yaml diff --git a/services/lidarr/lidarr-deployment.yaml b/retired-services/lidarr/lidarr-deployment.yaml similarity index 100% rename from services/lidarr/lidarr-deployment.yaml rename to retired-services/lidarr/lidarr-deployment.yaml diff --git a/services/lidarr/lidarr-ingress.yaml b/retired-services/lidarr/lidarr-ingress.yaml similarity index 100% rename from services/lidarr/lidarr-ingress.yaml rename to retired-services/lidarr/lidarr-ingress.yaml diff --git a/services/lidarr/lidarr-pvcs.yaml b/retired-services/lidarr/lidarr-pvcs.yaml similarity index 100% rename from services/lidarr/lidarr-pvcs.yaml rename to retired-services/lidarr/lidarr-pvcs.yaml diff --git a/services/lidarr/lidarr-service.yaml b/retired-services/lidarr/lidarr-service.yaml similarity index 100% rename from services/lidarr/lidarr-service.yaml rename to retired-services/lidarr/lidarr-service.yaml diff --git a/services/matrix-tuwunel/matrix-deployment.yaml b/retired-services/matrix-tuwunel/matrix-deployment.yaml similarity index 100% rename from services/matrix-tuwunel/matrix-deployment.yaml rename to retired-services/matrix-tuwunel/matrix-deployment.yaml diff --git a/services/matrix-tuwunel/matrix-external-secrets.yaml b/retired-services/matrix-tuwunel/matrix-external-secrets.yaml similarity index 100% rename from services/matrix-tuwunel/matrix-external-secrets.yaml rename to retired-services/matrix-tuwunel/matrix-external-secrets.yaml diff --git a/services/matrix-tuwunel/matrix-ingress.yaml b/retired-services/matrix-tuwunel/matrix-ingress.yaml similarity index 100% rename from services/matrix-tuwunel/matrix-ingress.yaml rename to retired-services/matrix-tuwunel/matrix-ingress.yaml diff --git a/services/matrix-tuwunel/matrix-pvcs.yaml b/retired-services/matrix-tuwunel/matrix-pvcs.yaml similarity index 100% rename from services/matrix-tuwunel/matrix-pvcs.yaml rename to retired-services/matrix-tuwunel/matrix-pvcs.yaml diff --git a/services/minecraft/compose-minecraft.yaml b/retired-services/minecraft/compose-minecraft.yaml similarity index 100% rename from services/minecraft/compose-minecraft.yaml rename to retired-services/minecraft/compose-minecraft.yaml diff --git a/services/navidrome/navidrome-deployment.yaml b/retired-services/navidrome/navidrome-deployment.yaml similarity index 100% rename from services/navidrome/navidrome-deployment.yaml rename to retired-services/navidrome/navidrome-deployment.yaml diff --git a/services/navidrome/navidrome-ingress.yaml b/retired-services/navidrome/navidrome-ingress.yaml similarity index 100% rename from services/navidrome/navidrome-ingress.yaml rename to retired-services/navidrome/navidrome-ingress.yaml diff --git a/services/navidrome/navidrome-oauth2.yaml b/retired-services/navidrome/navidrome-oauth2.yaml similarity index 100% rename from services/navidrome/navidrome-oauth2.yaml rename to retired-services/navidrome/navidrome-oauth2.yaml diff --git a/services/navidrome/navidrome-pvcs.yaml b/retired-services/navidrome/navidrome-pvcs.yaml similarity index 100% rename from services/navidrome/navidrome-pvcs.yaml rename to retired-services/navidrome/navidrome-pvcs.yaml diff --git a/services/navidrome/navidrome-service.yaml b/retired-services/navidrome/navidrome-service.yaml similarity index 100% rename from services/navidrome/navidrome-service.yaml rename to retired-services/navidrome/navidrome-service.yaml diff --git a/services/navigation/navigation-deployment.yaml b/retired-services/navigation/navigation-deployment.yaml similarity index 100% rename from services/navigation/navigation-deployment.yaml rename to retired-services/navigation/navigation-deployment.yaml diff --git a/services/navigation/navigation-external-secrets.yaml b/retired-services/navigation/navigation-external-secrets.yaml similarity index 100% rename from services/navigation/navigation-external-secrets.yaml rename to retired-services/navigation/navigation-external-secrets.yaml diff --git a/services/navigation/navigation-ingress.yaml b/retired-services/navigation/navigation-ingress.yaml similarity index 100% rename from services/navigation/navigation-ingress.yaml rename to retired-services/navigation/navigation-ingress.yaml diff --git a/services/navigation/navigation-pvcs.yaml b/retired-services/navigation/navigation-pvcs.yaml similarity index 100% rename from services/navigation/navigation-pvcs.yaml rename to retired-services/navigation/navigation-pvcs.yaml diff --git a/services/navigation/navigation-service.yaml b/retired-services/navigation/navigation-service.yaml similarity index 100% rename from services/navigation/navigation-service.yaml rename to retired-services/navigation/navigation-service.yaml diff --git a/services/omada-controller/omada-controller-deployment.yaml b/retired-services/omada-controller/omada-controller-deployment.yaml similarity index 100% rename from services/omada-controller/omada-controller-deployment.yaml rename to retired-services/omada-controller/omada-controller-deployment.yaml diff --git a/services/omada-controller/omada-controller-ingress.yaml b/retired-services/omada-controller/omada-controller-ingress.yaml similarity index 100% rename from services/omada-controller/omada-controller-ingress.yaml rename to retired-services/omada-controller/omada-controller-ingress.yaml diff --git a/services/omada-controller/omada-controller-service.yaml b/retired-services/omada-controller/omada-controller-service.yaml similarity index 100% rename from services/omada-controller/omada-controller-service.yaml rename to retired-services/omada-controller/omada-controller-service.yaml diff --git a/services/bazarr-anime/bazarr-anime-deployment.yaml b/services/bazarr-anime/bazarr-anime-deployment.yaml index fd5ed67..7f936c9 100644 --- a/services/bazarr-anime/bazarr-anime-deployment.yaml +++ b/services/bazarr-anime/bazarr-anime-deployment.yaml @@ -50,18 +50,3 @@ spec: nfs: server: robin.home.nest path: /yarr/media ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: bazarr-anime-config-pvc - labels: - recurring-job.longhorn.io/source: "enabled" - recurring-job-group.longhorn.io/app-config-group: "enabled" -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 10Mi diff --git a/services/bazarr-anime/bazarr-anime-pvcs.yaml b/services/bazarr-anime/bazarr-anime-pvcs.yaml new file mode 100644 index 0000000..3d44ebe --- /dev/null +++ b/services/bazarr-anime/bazarr-anime-pvcs.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: bazarr-anime-config-pvc + labels: + recurring-job.longhorn.io/source: "enabled" + recurring-job-group.longhorn.io/app-config-group: "enabled" +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 1Gi diff --git a/services/bazarr/bazarr-deployment.yaml b/services/bazarr/bazarr-deployment.yaml index 98a01d4..e9b79a4 100644 --- a/services/bazarr/bazarr-deployment.yaml +++ b/services/bazarr/bazarr-deployment.yaml @@ -50,18 +50,3 @@ spec: nfs: server: robin.home.nest path: /yarr/media ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: bazarr-config-pvc - labels: - recurring-job.longhorn.io/source: "enabled" - recurring-job-group.longhorn.io/app-config-group: "enabled" -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 5Mi diff --git a/services/bazarr/bazarr-pvcs.yaml b/services/bazarr/bazarr-pvcs.yaml new file mode 100644 index 0000000..28847ba --- /dev/null +++ b/services/bazarr/bazarr-pvcs.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: bazarr-config-pvc + labels: + recurring-job.longhorn.io/source: "enabled" + recurring-job-group.longhorn.io/app-config-group: "enabled" +spec: + accessModes: + - ReadWriteOnce + storageClassName: longhorn + resources: + requests: + storage: 50Mi diff --git a/services/calibre-web/app.db b/services/calibre-web/app.db new file mode 100644 index 0000000..1ff8955 Binary files /dev/null and b/services/calibre-web/app.db differ diff --git a/services/musicseerr/musicseerr-deployment.yaml b/services/droppedneedle/droppedneedle-deployment.yaml similarity index 59% rename from services/musicseerr/musicseerr-deployment.yaml rename to services/droppedneedle/droppedneedle-deployment.yaml index b0d28e0..3f32955 100644 --- a/services/musicseerr/musicseerr-deployment.yaml +++ b/services/droppedneedle/droppedneedle-deployment.yaml @@ -2,31 +2,28 @@ apiVersion: apps/v1 kind: Deployment metadata: labels: - app: musicseerr - name: musicseerr + app: droppedneedle + name: droppedneedle namespace: default spec: replicas: 1 selector: matchLabels: - app: musicseerr + app: droppedneedle strategy: type: Recreate template: metadata: labels: - app: musicseerr + app: droppedneedle spec: containers: - - name: musicseerr - image: ghcr.io/habirabbu/musicseerr:latest + - name: droppedneedle + image: ghcr.io/habirabbu/droppedneedle:latest ports: - containerPort: 8688 protocol: TCP name: web-ui - envFrom: - - secretRef: - name: musicseerr-secrets env: - name: PUID value: "1000" @@ -40,24 +37,26 @@ spec: value: "true" - name: UVICORN_FORWARDED_ALLOW_IPS value: "*" - - name: LIDARR_URL - value: "http://lidarr.k3s.home.nest" + - name: SLSKD_DOWNLOADS_PATH + value: "/yarr/downloads/slskd/complete" volumeMounts: - mountPath: /app/config - name: musicseerr-config + name: droppedneedle-config - mountPath: /app/cache - name: musicseerr-cache - - mountPath: /music + name: droppedneedle-cache + - mountPath: /yarr name: yarr restartPolicy: Always volumes: - - name: musicseerr-config + - name: droppedneedle-config persistentVolumeClaim: - claimName: musicseerr-config-pvc - - name: musicseerr-cache + claimName: musicseerr-config-pvc # Service changed name, cannot rename PVC + - name: droppedneedle-cache persistentVolumeClaim: claimName: musicseerr-cache-pvc + # Note: in order for atomic renames to work we need the music library + # and the downloads folders to be on the same mount - name: yarr nfs: server: robin.home.nest - path: /yarr/media + path: /yarr diff --git a/services/musicseerr/musicseerr-ingress.yaml b/services/droppedneedle/droppedneedle-ingress.yaml similarity index 85% rename from services/musicseerr/musicseerr-ingress.yaml rename to services/droppedneedle/droppedneedle-ingress.yaml index 71a3f75..f2a022a 100644 --- a/services/musicseerr/musicseerr-ingress.yaml +++ b/services/droppedneedle/droppedneedle-ingress.yaml @@ -1,7 +1,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: musicseerr-ingress + name: droppedneedle-ingress namespace: default annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" @@ -12,7 +12,7 @@ spec: tls: - hosts: - heron.mynest.love - secretName: musicseerr-tls + secretName: droppedneedle-tls rules: - host: heron.mynest.love http: @@ -21,6 +21,6 @@ spec: pathType: Prefix backend: service: - name: musicseerr + name: droppedneedle port: name: http-web diff --git a/services/musicseerr/musicseerr-pvc.yaml b/services/droppedneedle/droppedneedle-pvc.yaml similarity index 83% rename from services/musicseerr/musicseerr-pvc.yaml rename to services/droppedneedle/droppedneedle-pvc.yaml index c31e11f..33c312c 100644 --- a/services/musicseerr/musicseerr-pvc.yaml +++ b/services/droppedneedle/droppedneedle-pvc.yaml @@ -1,3 +1,5 @@ +# Note: This service changed name from musicseerr to droppedneedle +# PVC names are immutable, so just keeping the old names apiVersion: v1 kind: PersistentVolumeClaim metadata: diff --git a/services/musicseerr/musicseerr-service.yaml b/services/droppedneedle/droppedneedle-service.yaml similarity index 72% rename from services/musicseerr/musicseerr-service.yaml rename to services/droppedneedle/droppedneedle-service.yaml index 538e82a..0c31165 100644 --- a/services/musicseerr/musicseerr-service.yaml +++ b/services/droppedneedle/droppedneedle-service.yaml @@ -2,8 +2,8 @@ apiVersion: v1 kind: Service metadata: labels: - app: musicseerr - name: musicseerr + app: droppedneedle + name: droppedneedle namespace: default spec: type: ClusterIP @@ -12,4 +12,4 @@ spec: port: 80 targetPort: web-ui selector: - app: musicseerr + app: droppedneedle diff --git a/services/droppedneedle/droppedneedle-transcode.yaml b/services/droppedneedle/droppedneedle-transcode.yaml new file mode 100644 index 0000000..a061d7d --- /dev/null +++ b/services/droppedneedle/droppedneedle-transcode.yaml @@ -0,0 +1,72 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: droppedneedle-transcoder-script + namespace: default +data: + transcode.sh: | + #!/bin/bash + WATCH_DIR="/yarr/media/music" + echo "Starting transcoder watch on $WATCH_DIR..." + + # Listen for files moved into the directory (atomic renames) and direct writes + inotifywait -m -r -e moved_to,close_write --format '%w%f' "$WATCH_DIR" | while read FILE + do + # Case-insensitive check for .flac extension + if [[ "${FILE,,}" == *.flac ]]; then + echo "Detected new FLAC via import: $FILE" + OPUS_FILE="${FILE%.*}.opus" + + # Transcode (preserves tags natively in newer ffmpeg versions) + ffmpeg -y -i "$FILE" -acodec libopus -ac 2 -ab 160k "$OPUS_FILE" + + if [ $? -eq 0 ]; then + echo "Transcode successful. Removing original FLAC..." + rm "$FILE" + + echo "Triggering DroppedNeedle library scan..." + # Calls the DroppedNeedle service using internal Kubernetes DNS + curl -X POST http://droppedneedle.default.svc.cluster.local:8688/api/v1/library/scan/start + else + echo "Error: FFmpeg transcode failed for $FILE" + fi + fi + done +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: droppedneedle-transcoder + name: droppedneedle-transcoder + namespace: default +spec: + replicas: 1 + selector: + matchLabels: + app: droppedneedle-transcoder + template: + metadata: + labels: + app: droppedneedle-transcoder + spec: + containers: + - name: transcoder + image: alpine:latest + command: ["/bin/sh", "-c"] + args: + - "apk add --no-cache bash inotify-tools ffmpeg curl && bash /scripts/transcode.sh" + volumeMounts: + - mountPath: /yarr + name: yarr + - mountPath: /scripts + name: script-volume + restartPolicy: Always + volumes: + - name: yarr + nfs: + server: robin.home.nest + path: /yarr + - name: script-volume + configMap: + name: droppedneedle-transcoder-script diff --git a/services/musicseerr/musicseerr-external-secrets.yaml b/services/musicseerr/musicseerr-external-secrets.yaml deleted file mode 100644 index 4edd758..0000000 --- a/services/musicseerr/musicseerr-external-secrets.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: external-secrets.io/v1 -kind: ExternalSecret -metadata: - name: musicseerr-secrets - namespace: default -spec: - refreshInterval: "1h" - secretStoreRef: - name: vault-external-secrets-store - kind: ClusterSecretStore - target: - name: musicseerr-secrets - creationPolicy: Owner - data: - - secretKey: LIDARR_API_KEY - remoteRef: - key: lidarr - property: api-key diff --git a/services/jellyseerr/jellyseerr-deployment.yaml b/services/seerr/seerr-deployment.yaml similarity index 66% rename from services/jellyseerr/jellyseerr-deployment.yaml rename to services/seerr/seerr-deployment.yaml index f648ce0..86d347e 100644 --- a/services/jellyseerr/jellyseerr-deployment.yaml +++ b/services/seerr/seerr-deployment.yaml @@ -2,20 +2,24 @@ apiVersion: apps/v1 kind: Deployment metadata: labels: - app: jellyseerr - name: jellyseerr + app: seerr + name: seerr spec: replicas: 1 selector: matchLabels: - app: jellyseerr + app: seerr strategy: type: Recreate template: metadata: labels: - app: jellyseerr + app: seerr spec: + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 containers: - env: - name: PGID @@ -26,17 +30,17 @@ spec: value: "3000" - name: TZ value: America/New_York - image: fallenbagel/jellyseerr:preview-OIDC - name: jellyseerr + image: ghcr.io/seerr-team/seerr:preview-new-oidc + name: seerr ports: - containerPort: 5055 protocol: TCP name: web-ui volumeMounts: - mountPath: /app/config - name: jellyseerr-volume + name: seerr-volume restartPolicy: Always volumes: - - name: jellyseerr-volume + - name: seerr-volume persistentVolumeClaim: - claimName: jellyseerr-data-pvc + claimName: seerr-data-pvc diff --git a/services/jellyseerr/jellyseerr-ingress.yaml b/services/seerr/seerr-ingress.yaml similarity index 85% rename from services/jellyseerr/jellyseerr-ingress.yaml rename to services/seerr/seerr-ingress.yaml index a61127f..1218466 100644 --- a/services/jellyseerr/jellyseerr-ingress.yaml +++ b/services/seerr/seerr-ingress.yaml @@ -1,7 +1,7 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: jellyseerr-ingress + name: seerr-ingress namespace: default annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" @@ -11,7 +11,7 @@ spec: tls: - hosts: - stork.mynest.love - secretName: jellyseerr-tls + secretName: seerr-tls rules: - host: stork.mynest.love http: @@ -20,6 +20,6 @@ spec: pathType: Prefix backend: service: - name: jellyseerr + name: seerr port: name: http-web diff --git a/services/jellyseerr/jellyseerr-pvc.yaml b/services/seerr/seerr-pvcs.yaml similarity index 91% rename from services/jellyseerr/jellyseerr-pvc.yaml rename to services/seerr/seerr-pvcs.yaml index e0ba9aa..59f6411 100644 --- a/services/jellyseerr/jellyseerr-pvc.yaml +++ b/services/seerr/seerr-pvcs.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: PersistentVolumeClaim metadata: - name: jellyseerr-data-pvc + name: seerr-data-pvc labels: recurring-job.longhorn.io/source: "enabled" recurring-job-group.longhorn.io/app-config-group: "enabled" diff --git a/services/jellyseerr/jellyseerr-service.yaml b/services/seerr/seerr-service.yaml similarity index 72% rename from services/jellyseerr/jellyseerr-service.yaml rename to services/seerr/seerr-service.yaml index 1ac4a0b..9c2f711 100644 --- a/services/jellyseerr/jellyseerr-service.yaml +++ b/services/seerr/seerr-service.yaml @@ -2,8 +2,8 @@ apiVersion: v1 kind: Service metadata: labels: - app: jellyseerr - name: jellyseerr + app: seerr + name: seerr spec: type: ClusterIP ports: @@ -11,4 +11,4 @@ spec: port: 80 targetPort: web-ui selector: - app: jellyseerr + app: seerr diff --git a/services/slskd/slskd-deployment.yaml b/services/slskd/slskd-deployment.yaml index 4a22c4f..df544ba 100644 --- a/services/slskd/slskd-deployment.yaml +++ b/services/slskd/slskd-deployment.yaml @@ -33,7 +33,7 @@ spec: - name: SLSKD_INCOMPLETE_DIR value: /downloads/slskd/incomplete - name: SLSKD_REMOTE_CONFIGURATION - value: "false" + value: "true" - name: SLSKD_REMOTE_FILE_MANAGEMENT value: "true" - name: TZ