Switch Plex → Jellyfin, fix gluetun IPv6 VPN issue
This commit is contained in:
@@ -23,7 +23,7 @@ spec:
|
|||||||
# Ensure /dev/net/tun exists on the node
|
# Ensure /dev/net/tun exists on the node
|
||||||
- name: tun-setup
|
- name: tun-setup
|
||||||
image: busybox:latest
|
image: busybox:latest
|
||||||
command: ["sh", "-c", "mkdir -p /dev/net && [ -c /dev/net/tun ] || mknod /dev/net/tun c 10 200 && chmod 666 /dev/net/tun"]
|
command: ["sh", "-c", "mkdir -p /dev/net && [ -c /dev/net/tun ] || mknod /dev/net/tun c 10 200 && chmod 666 /dev/net/tun && sysctl -w net.ipv6.conf.all.disable_ipv6=1 || true"]
|
||||||
securityContext:
|
securityContext:
|
||||||
privileged: true
|
privileged: true
|
||||||
containers:
|
containers:
|
||||||
|
|||||||
@@ -156,13 +156,13 @@ spec:
|
|||||||
port:
|
port:
|
||||||
number: 5055
|
number: 5055
|
||||||
---
|
---
|
||||||
# plex.nook.family → Plex
|
# plex.nook.family → Jellyfin (replaced Plex)
|
||||||
# NOTE: Also add in Cloudflare Zero Trust:
|
# NOTE: Also add in Cloudflare Zero Trust:
|
||||||
# Hostname: plex.nook.family | Service: http://traefik.kube-system:80
|
# Hostname: plex.nook.family | Service: http://traefik.kube-system:80
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: plex
|
name: jellyfin
|
||||||
namespace: media
|
namespace: media
|
||||||
annotations:
|
annotations:
|
||||||
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
@@ -181,6 +181,6 @@ spec:
|
|||||||
pathType: Prefix
|
pathType: Prefix
|
||||||
backend:
|
backend:
|
||||||
service:
|
service:
|
||||||
name: plex
|
name: jellyfin
|
||||||
port:
|
port:
|
||||||
number: 32400
|
number: 8096
|
||||||
|
|||||||
@@ -1,41 +1,36 @@
|
|||||||
# Plex Media Server
|
# Jellyfin Media Server (replaced Plex — no account or subscription required)
|
||||||
# BEFORE FIRST DEPLOY: add claim token to Vault
|
|
||||||
# 1. Go to https://www.plex.tv/claim (token expires in 4 minutes)
|
|
||||||
# 2. vault kv put secret/plex claim_token=<token>
|
|
||||||
# 3. Then push and let Argo CD deploy
|
|
||||||
# After first startup the token is stored in config and can be left as-is
|
|
||||||
#
|
#
|
||||||
# Post-deploy setup:
|
# Post-deploy setup:
|
||||||
# 1. Access via plex.nook.family or port-forward :32400
|
# 1. Access via plex.nook.family or jellyfin.nook.family
|
||||||
# 2. Add libraries:
|
# 2. Run the setup wizard: create admin account, add libraries:
|
||||||
# - Movies → /media/movies
|
# - Movies → /media/movies
|
||||||
# - TV Shows → /media/tv/shows
|
# - TV Shows → /media/tv/shows
|
||||||
# - Anime (TV Shows) → /media/tv/anime
|
# - Anime → /media/tv/anime
|
||||||
# 3. Settings > Manage > Users & Sharing → create Plex Home managed users
|
# 3. Dashboard → Users → Add User for each family member
|
||||||
# 4. Set content rating limits per child profile (G/PG/PG-13)
|
# 4. Per user → Parental Controls → set max rating (PG-13 for Ben, PG for Chloe)
|
||||||
# 5. Enable PIN on adult profiles
|
# 5. Per user → set PIN if desired
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: plex
|
name: jellyfin
|
||||||
namespace: media
|
namespace: media
|
||||||
labels:
|
labels:
|
||||||
app: plex
|
app: jellyfin
|
||||||
spec:
|
spec:
|
||||||
replicas: 1
|
replicas: 1
|
||||||
strategy:
|
strategy:
|
||||||
type: Recreate
|
type: Recreate
|
||||||
selector:
|
selector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app: plex
|
app: jellyfin
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app: plex
|
app: jellyfin
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: plex
|
- name: jellyfin
|
||||||
image: lscr.io/linuxserver/plex:latest
|
image: lscr.io/linuxserver/jellyfin:latest
|
||||||
env:
|
env:
|
||||||
- name: PUID
|
- name: PUID
|
||||||
value: "1000"
|
value: "1000"
|
||||||
@@ -43,19 +38,9 @@ spec:
|
|||||||
value: "1000"
|
value: "1000"
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: "America/Chicago"
|
value: "America/Chicago"
|
||||||
- name: VERSION
|
|
||||||
value: "docker"
|
|
||||||
- name: PLEX_CLAIM
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: media-secrets
|
|
||||||
key: PLEX_CLAIM
|
|
||||||
optional: true # safe after first boot
|
|
||||||
- name: ADVERTISE_IP
|
|
||||||
value: "https://plex.nook.family:443"
|
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 32400
|
- containerPort: 8096
|
||||||
name: plex
|
name: http
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /config
|
mountPath: /config
|
||||||
@@ -63,27 +48,27 @@ spec:
|
|||||||
mountPath: /media
|
mountPath: /media
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
memory: 1Gi
|
memory: 512Mi
|
||||||
cpu: 500m
|
cpu: 500m
|
||||||
limits:
|
limits:
|
||||||
memory: 4Gi
|
memory: 4Gi
|
||||||
cpu: 2000m
|
cpu: 2000m
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /identity
|
path: /health
|
||||||
port: 32400
|
port: 8096
|
||||||
initialDelaySeconds: 60
|
initialDelaySeconds: 60
|
||||||
periodSeconds: 30
|
periodSeconds: 30
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
path: /identity
|
path: /health
|
||||||
port: 32400
|
port: 8096
|
||||||
initialDelaySeconds: 30
|
initialDelaySeconds: 30
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
volumes:
|
volumes:
|
||||||
- name: config
|
- name: config
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: plex-config
|
claimName: jellyfin-config
|
||||||
- name: media
|
- name: media
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: media-data
|
claimName: media-data
|
||||||
@@ -91,13 +76,13 @@ spec:
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
name: plex
|
name: jellyfin
|
||||||
namespace: media
|
namespace: media
|
||||||
spec:
|
spec:
|
||||||
selector:
|
selector:
|
||||||
app: plex
|
app: jellyfin
|
||||||
ports:
|
ports:
|
||||||
- name: plex
|
- name: http
|
||||||
port: 32400
|
port: 8096
|
||||||
targetPort: 32400
|
targetPort: 8096
|
||||||
type: ClusterIP
|
type: ClusterIP
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ spec:
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: PersistentVolumeClaim
|
kind: PersistentVolumeClaim
|
||||||
metadata:
|
metadata:
|
||||||
name: plex-config
|
name: jellyfin-config
|
||||||
namespace: media
|
namespace: media
|
||||||
spec:
|
spec:
|
||||||
storageClassName: local-path
|
storageClassName: local-path
|
||||||
|
|||||||
Reference in New Issue
Block a user