Files
infrastructure/servers/legion/k8s/media/plex.yaml
Will Anderson 91bfc42989 ops: scale down all non-critical services — dedicate resources to Neuron
Scaled to replicas: 0: fornax (coordinator/ui/workers), jellyfin via media,
overseerr, plex, radarr, sonarr, bazarr, prowlarr, flaresolverr, ollama,
harmonic-wordpress, docuseal, listmonk, memos, plane, redpanda, wp-coordinator
2026-04-24 20:07:41 -05:00

112 lines
2.9 KiB
YAML

# Jellyfin Media Server (replaced Plex — no account or subscription required)
#
# Post-deploy setup:
# 1. Access via plex.nook.family or jellyfin.nook.family
# 2. Run the setup wizard: create admin account, add libraries:
# - Movies → /media/movies
# - TV Shows → /media/tv/shows
# - Anime → /media/tv/anime
# 3. Dashboard → Users → Add User for each family member
# 4. Per user → Parental Controls → set max rating (PG-13 for Ben, PG for Chloe)
# 5. Per user → set PIN if desired
apiVersion: apps/v1
kind: Deployment
metadata:
name: jellyfin
namespace: media
labels:
app: jellyfin
spec:
replicas: 0
strategy:
type: Recreate
selector:
matchLabels:
app: jellyfin
template:
metadata:
labels:
app: jellyfin
spec:
initContainers:
# Ensure all media subdirectories exist on the hostPath volume
- name: media-dirs
image: busybox:latest
command:
- sh
- -c
- |
mkdir -p \
/media/movies \
/media/tv/shows \
/media/tv/anime \
/media/documentaries \
/media/standup \
/media/concerts \
/media/kids \
/media/music \
/media/downloads/complete \
/media/downloads/incomplete
chown -R 1000:1000 /media
volumeMounts:
- name: media
mountPath: /media
containers:
- name: jellyfin
image: lscr.io/linuxserver/jellyfin:latest
env:
- name: PUID
value: "1000"
- name: PGID
value: "1000"
- name: TZ
value: "America/Chicago"
ports:
- containerPort: 8096
name: http
volumeMounts:
- name: config
mountPath: /config
- name: media
mountPath: /media
resources:
requests:
memory: 512Mi
cpu: 500m
limits:
memory: 4Gi
cpu: 2000m
livenessProbe:
httpGet:
path: /health
port: 8096
initialDelaySeconds: 60
periodSeconds: 30
readinessProbe:
httpGet:
path: /health
port: 8096
initialDelaySeconds: 30
periodSeconds: 10
volumes:
- name: config
persistentVolumeClaim:
claimName: jellyfin-config
- name: media
persistentVolumeClaim:
claimName: media-data
---
apiVersion: v1
kind: Service
metadata:
name: jellyfin
namespace: media
spec:
selector:
app: jellyfin
ports:
- name: http
port: 8096
targetPort: 8096
type: ClusterIP