add the media stack

This commit is contained in:
tsvetkov
2026-02-27 00:55:03 +00:00
commit 179dca7339
18 changed files with 1689 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: dispatcharr
namespace: media
labels:
app: dispatcharr
app.kubernetes.io/name: dispatcharr
app.kubernetes.io/component: iptv-proxy
vpn: "true"
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: dispatcharr
template:
metadata:
labels:
app: dispatcharr
vpn: "true"
spec:
containers:
# Gluetun VPN Sidecar
- name: gluetun
image: qmcgaw/gluetun:latest
securityContext:
capabilities:
add:
- NET_ADMIN
env:
- name: TZ
valueFrom:
configMapKeyRef:
name: media-config
key: TZ
- name: WIREGUARD_PRIVATE_KEY
valueFrom:
secretKeyRef:
name: mullvad-vpn
key: WIREGUARD_PRIVATE_KEY
- name: WIREGUARD_ADDRESSES
valueFrom:
secretKeyRef:
name: mullvad-vpn
key: WIREGUARD_ADDRESSES
# Dispatcharr needs to serve streams to Jellyfin inside cluster
- name: FIREWALL_OUTBOUND_SUBNETS
value: "10.0.0.0/24,10.96.0.0/12"
envFrom:
- configMapRef:
name: gluetun-config
volumeMounts:
- name: tun-device
mountPath: /dev/net/tun
- name: gluetun-data
mountPath: /gluetun
ports:
- name: http
containerPort: 9191
protocol: TCP
- name: http-proxy
containerPort: 8888
protocol: TCP
resources:
requests:
memory: "128Mi"
cpu: "50m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
exec:
command:
- /gluetun-entrypoint
- healthcheck
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
readinessProbe:
exec:
command:
- /gluetun-entrypoint
- healthcheck
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 5
# Dispatcharr
- name: dispatcharr
image: ghcr.io/dispatcharr/dispatcharr:latest
env:
- name: DISPATCHARR_ENV
value: "aio"
- name: REDIS_HOST
value: "localhost"
- name: CELERY_BROKER_URL
value: "redis://localhost:6379/0"
- name: DISPATCHARR_LOG_LEVEL
value: "info"
- name: TZ
valueFrom:
configMapKeyRef:
name: media-config
key: TZ
volumeMounts:
- name: config
mountPath: /data
subPath: dispatcharr
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
tcpSocket:
port: 9191
initialDelaySeconds: 90
periodSeconds: 30
timeoutSeconds: 10
readinessProbe:
tcpSocket:
port: 9191
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
volumes:
- name: tun-device
hostPath:
path: /dev/net/tun
type: CharDevice
- name: gluetun-data
emptyDir: {}
- name: config
persistentVolumeClaim:
claimName: media-config
---
apiVersion: v1
kind: Service
metadata:
name: dispatcharr
namespace: media
labels:
app: dispatcharr
spec:
type: NodePort
selector:
app: dispatcharr
ports:
- name: http
port: 9191
targetPort: 9191
nodePort: 30191
protocol: TCP