Musicseerr -> DroppedNeedle and cleanup of retired services

This commit is contained in:
Astra Logical 2026-07-18 17:41:29 -04:00
parent 7941c5645c
commit 1594d6721d
44 changed files with 147 additions and 90 deletions

View file

@ -14,4 +14,4 @@ spec:
volumes: volumes:
- name: target-volume - name: target-volume
persistentVolumeClaim: persistentVolumeClaim:
claimName: musicseerr-config-pvc claimName: calibre-web-config-pvc

View file

@ -50,18 +50,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/media 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

View file

@ -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

View file

@ -50,18 +50,3 @@ spec:
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/media 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

View file

@ -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

BIN
services/calibre-web/app.db Normal file

Binary file not shown.

View file

@ -2,31 +2,28 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
app: musicseerr app: droppedneedle
name: musicseerr name: droppedneedle
namespace: default namespace: default
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: musicseerr app: droppedneedle
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
labels: labels:
app: musicseerr app: droppedneedle
spec: spec:
containers: containers:
- name: musicseerr - name: droppedneedle
image: ghcr.io/habirabbu/musicseerr:latest image: ghcr.io/habirabbu/droppedneedle:latest
ports: ports:
- containerPort: 8688 - containerPort: 8688
protocol: TCP protocol: TCP
name: web-ui name: web-ui
envFrom:
- secretRef:
name: musicseerr-secrets
env: env:
- name: PUID - name: PUID
value: "1000" value: "1000"
@ -40,24 +37,26 @@ spec:
value: "true" value: "true"
- name: UVICORN_FORWARDED_ALLOW_IPS - name: UVICORN_FORWARDED_ALLOW_IPS
value: "*" value: "*"
- name: LIDARR_URL - name: SLSKD_DOWNLOADS_PATH
value: "http://lidarr.k3s.home.nest" value: "/yarr/downloads/slskd/complete"
volumeMounts: volumeMounts:
- mountPath: /app/config - mountPath: /app/config
name: musicseerr-config name: droppedneedle-config
- mountPath: /app/cache - mountPath: /app/cache
name: musicseerr-cache name: droppedneedle-cache
- mountPath: /music - mountPath: /yarr
name: yarr name: yarr
restartPolicy: Always restartPolicy: Always
volumes: volumes:
- name: musicseerr-config - name: droppedneedle-config
persistentVolumeClaim: persistentVolumeClaim:
claimName: musicseerr-config-pvc claimName: musicseerr-config-pvc # Service changed name, cannot rename PVC
- name: musicseerr-cache - name: droppedneedle-cache
persistentVolumeClaim: persistentVolumeClaim:
claimName: musicseerr-cache-pvc 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 - name: yarr
nfs: nfs:
server: robin.home.nest server: robin.home.nest
path: /yarr/media path: /yarr

View file

@ -1,7 +1,7 @@
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: musicseerr-ingress name: droppedneedle-ingress
namespace: default namespace: default
annotations: annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" cert-manager.io/cluster-issuer: "letsencrypt-prod"
@ -12,7 +12,7 @@ spec:
tls: tls:
- hosts: - hosts:
- heron.mynest.love - heron.mynest.love
secretName: musicseerr-tls secretName: droppedneedle-tls
rules: rules:
- host: heron.mynest.love - host: heron.mynest.love
http: http:
@ -21,6 +21,6 @@ spec:
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: musicseerr name: droppedneedle
port: port:
name: http-web name: http-web

View file

@ -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 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:

View file

@ -2,8 +2,8 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
labels: labels:
app: musicseerr app: droppedneedle
name: musicseerr name: droppedneedle
namespace: default namespace: default
spec: spec:
type: ClusterIP type: ClusterIP
@ -12,4 +12,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
app: musicseerr app: droppedneedle

View file

@ -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

View file

@ -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

View file

@ -2,20 +2,24 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels: labels:
app: jellyseerr app: seerr
name: jellyseerr name: seerr
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: jellyseerr app: seerr
strategy: strategy:
type: Recreate type: Recreate
template: template:
metadata: metadata:
labels: labels:
app: jellyseerr app: seerr
spec: spec:
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers: containers:
- env: - env:
- name: PGID - name: PGID
@ -26,17 +30,17 @@ spec:
value: "3000" value: "3000"
- name: TZ - name: TZ
value: America/New_York value: America/New_York
image: fallenbagel/jellyseerr:preview-OIDC image: ghcr.io/seerr-team/seerr:preview-new-oidc
name: jellyseerr name: seerr
ports: ports:
- containerPort: 5055 - containerPort: 5055
protocol: TCP protocol: TCP
name: web-ui name: web-ui
volumeMounts: volumeMounts:
- mountPath: /app/config - mountPath: /app/config
name: jellyseerr-volume name: seerr-volume
restartPolicy: Always restartPolicy: Always
volumes: volumes:
- name: jellyseerr-volume - name: seerr-volume
persistentVolumeClaim: persistentVolumeClaim:
claimName: jellyseerr-data-pvc claimName: seerr-data-pvc

View file

@ -1,7 +1,7 @@
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: jellyseerr-ingress name: seerr-ingress
namespace: default namespace: default
annotations: annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod" cert-manager.io/cluster-issuer: "letsencrypt-prod"
@ -11,7 +11,7 @@ spec:
tls: tls:
- hosts: - hosts:
- stork.mynest.love - stork.mynest.love
secretName: jellyseerr-tls secretName: seerr-tls
rules: rules:
- host: stork.mynest.love - host: stork.mynest.love
http: http:
@ -20,6 +20,6 @@ spec:
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: jellyseerr name: seerr
port: port:
name: http-web name: http-web

View file

@ -1,7 +1,7 @@
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: jellyseerr-data-pvc name: seerr-data-pvc
labels: labels:
recurring-job.longhorn.io/source: "enabled" recurring-job.longhorn.io/source: "enabled"
recurring-job-group.longhorn.io/app-config-group: "enabled" recurring-job-group.longhorn.io/app-config-group: "enabled"

View file

@ -2,8 +2,8 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
labels: labels:
app: jellyseerr app: seerr
name: jellyseerr name: seerr
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
@ -11,4 +11,4 @@ spec:
port: 80 port: 80
targetPort: web-ui targetPort: web-ui
selector: selector:
app: jellyseerr app: seerr

View file

@ -33,7 +33,7 @@ spec:
- name: SLSKD_INCOMPLETE_DIR - name: SLSKD_INCOMPLETE_DIR
value: /downloads/slskd/incomplete value: /downloads/slskd/incomplete
- name: SLSKD_REMOTE_CONFIGURATION - name: SLSKD_REMOTE_CONFIGURATION
value: "false" value: "true"
- name: SLSKD_REMOTE_FILE_MANAGEMENT - name: SLSKD_REMOTE_FILE_MANAGEMENT
value: "true" value: "true"
- name: TZ - name: TZ