Research-Stack/4-Infrastructure/kube/manifests/audiobookshelf-jellyfin.yaml
Brandon Schneider 1b816fafe7 feat(infra): media stack, Vaultwarden, Cloudflare tunnel, OIDC providers, Caddy TLS
- Media stack deployed: qBittorrent, Sonarr, Radarr, Lidarr, Prowlarr, Bazarr,
  Navidrome, Audiobookshelf, Jellyfin, Homarr, Kavita, MeTube, SuggestArr, BoxArr
- Romm, ebook2audiobook (GPU CUDA), TrailBase, FlareSolverr deployed
- Vaultwarden + Vaultwarden-API deployed
- Caddy reverse proxy on racknerd with Let's Encrypt TLS at *.researchstack.info
- Authentik 7 OIDC providers + 12 proxy providers for SSO
- NVIDIA GPU support enabled on k3s (device plugin + containerd runtime)
- Cloudflare tunnel created (DNS on Porkbun)

Build: 3313 jobs, 0 errors (lake build Compiler)
2026-05-31 11:01:39 -05:00

154 lines
3.2 KiB
YAML

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: audiobookshelf-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-path
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: audiobookshelf
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: audiobookshelf
template:
metadata:
labels:
app: audiobookshelf
spec:
nodeSelector:
kubernetes.io/hostname: qfox-1
containers:
- name: audiobookshelf
image: ghcr.io/advplyr/audiobookshelf:latest
ports:
- containerPort: 13378
env:
- name: PUID
value: "1000"
- name: PGID
value: "100"
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /audiobooks
subPath: audiobooks
- name: media
mountPath: /podcasts
subPath: podcasts
volumes:
- name: config
persistentVolumeClaim:
claimName: audiobookshelf-config
- name: media
persistentVolumeClaim:
claimName: media-store
---
apiVersion: v1
kind: Service
metadata:
name: audiobookshelf
namespace: media
spec:
type: NodePort
ports:
- port: 13378
targetPort: 13378
nodePort: 30090
selector:
app: audiobookshelf
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jellyfin-config
namespace: media
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-path
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jellyfin
namespace: media
spec:
replicas: 1
selector:
matchLabels:
app: jellyfin
template:
metadata:
labels:
app: jellyfin
spec:
nodeSelector:
kubernetes.io/hostname: qfox-1
containers:
- name: jellyfin
image: lscr.io/linuxserver/jellyfin:latest
ports:
- containerPort: 8096
- containerPort: 8920
env:
- name: PUID
value: "1000"
- name: PGID
value: "100"
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media/movies
subPath: movies
- name: media
mountPath: /media/tv
subPath: tv
- name: media
mountPath: /media/music
subPath: music
- name: media
mountPath: /media/audiobooks
subPath: audiobooks
volumes:
- name: config
persistentVolumeClaim:
claimName: jellyfin-config
- name: media
persistentVolumeClaim:
claimName: media-store
---
apiVersion: v1
kind: Service
metadata:
name: jellyfin
namespace: media
spec:
type: NodePort
ports:
- name: web
port: 8096
targetPort: 8096
nodePort: 30091
- name: https
port: 8920
targetPort: 8920
nodePort: 30092
selector:
app: jellyfin