2 Commits

Author SHA1 Message Date
Paul Payne
c2efd6359a Adds jellyfin app (untested). 2025-08-16 08:05:35 -07:00
Paul Payne
6e3b50c217 Removes jellyfin app (to be updated in a branch). 2025-08-16 08:04:25 -07:00
7 changed files with 86 additions and 128 deletions

View File

@@ -1,12 +0,0 @@
# Config
JELLYFIN_DOMAIN=jellyfin.$DOMAIN
JELLYFIN_CONFIG_STORAGE=1Gi
JELLYFIN_CACHE_STORAGE=10Gi
JELLYFIN_MEDIA_STORAGE=100Gi
TZ=UTC
# Docker Images
JELLYFIN_IMAGE=jellyfin/jellyfin:latest
# Jellyfin Configuration
JELLYFIN_PublishedServerUrl=https://jellyfin.$DOMAIN

View File

@@ -1,49 +1,73 @@
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: jellyfin name: jellyfin
namespace: jellyfin
spec: spec:
replicas: 1 replicas: 1
selector:
matchLabels:
app: jellyfin
strategy: strategy:
type: Recreate type: Recreate
selector:
matchLabels:
component: web
template: template:
metadata: metadata:
labels: labels:
app: jellyfin component: web
spec: spec:
securityContext:
runAsNonRoot: true
runAsUser: 999
runAsGroup: 999
seccompProfile:
type: RuntimeDefault
containers: containers:
- image: jellyfin/jellyfin:latest - name: jellyfin
name: jellyfin image: "{{ .apps.jellyfin.image }}"
imagePullPolicy: IfNotPresent
ports: ports:
- containerPort: 8096 - name: http
containerPort: 8096
protocol: TCP protocol: TCP
envFrom:
- configMapRef:
name: config
env: env:
- name: TZ - name: TZ
valueFrom: value: "{{ .apps.jellyfin.timezone }}"
configMapKeyRef: - name: JELLYFIN_PublishedServerUrl
key: TZ value: "{{ .apps.jellyfin.publishedServerUrl }}"
name: config securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: false
volumeMounts: volumeMounts:
- mountPath: /config - name: config
name: jellyfin-config mountPath: /config
- mountPath: /cache - name: cache
name: jellyfin-cache mountPath: /cache
- mountPath: /media - name: media
name: jellyfin-media mountPath: /media
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
volumes: volumes:
- name: jellyfin-config - name: config
persistentVolumeClaim: persistentVolumeClaim:
claimName: jellyfin-config-pvc claimName: jellyfin-config
- name: jellyfin-cache - name: cache
persistentVolumeClaim: persistentVolumeClaim:
claimName: jellyfin-cache-pvc claimName: jellyfin-cache
- name: jellyfin-media - name: media
persistentVolumeClaim: persistentVolumeClaim:
claimName: jellyfin-media-pvc claimName: jellyfin-media

View File

@@ -1,14 +1,14 @@
---
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: jellyfin-public name: jellyfin-public
namespace: jellyfin
annotations: annotations:
external-dns.alpha.kubernetes.io/target: your.jellyfin.domain external-dns.alpha.kubernetes.io/target: "{{ .cloud.domain }}"
external-dns.alpha.kubernetes.io/cloudflare-proxied: "false" external-dns.alpha.kubernetes.io/cloudflare-proxied: "false"
spec: spec:
rules: rules:
- host: your.jellyfin.domain - host: "{{ .apps.jellyfin.domain }}"
http: http:
paths: paths:
- path: / - path: /
@@ -17,8 +17,8 @@ spec:
service: service:
name: jellyfin name: jellyfin
port: port:
number: 8096 number: {{ .apps.jellyfin.port }}
tls: tls:
- secretName: wildcard-internal-wild-cloud-tls - secretName: "{{ .apps.jellyfin.tlsSecretName }}"
hosts: hosts:
- your.jellyfin.domain - "{{ .apps.jellyfin.domain }}"

View File

@@ -8,75 +8,8 @@ labels:
managedBy: kustomize managedBy: kustomize
partOf: wild-cloud partOf: wild-cloud
resources: resources:
- deployment.yaml
- ingress.yaml
- namespace.yaml - namespace.yaml
- pvc.yaml - deployment.yaml
- service.yaml - service.yaml
configMapGenerator: - ingress.yaml
- name: config - pvc.yaml
envs:
- config/config.env
replacements:
- source:
kind: ConfigMap
name: config
fieldPath: data.DOMAIN
targets:
- select:
kind: Ingress
name: jellyfin-public
fieldPaths:
- metadata.annotations.[external-dns.alpha.kubernetes.io/target]
- source:
kind: ConfigMap
name: config
fieldPath: data.JELLYFIN_DOMAIN
targets:
- select:
kind: Ingress
name: jellyfin-public
fieldPaths:
- spec.rules.0.host
- spec.tls.0.hosts.0
- source:
kind: ConfigMap
name: config
fieldPath: data.JELLYFIN_CONFIG_STORAGE
targets:
- select:
kind: PersistentVolumeClaim
name: jellyfin-config-pvc
fieldPaths:
- spec.resources.requests.storage
- source:
kind: ConfigMap
name: config
fieldPath: data.JELLYFIN_CACHE_STORAGE
targets:
- select:
kind: PersistentVolumeClaim
name: jellyfin-cache-pvc
fieldPaths:
- spec.resources.requests.storage
- source:
kind: ConfigMap
name: config
fieldPath: data.JELLYFIN_MEDIA_STORAGE
targets:
- select:
kind: PersistentVolumeClaim
name: jellyfin-media-pvc
fieldPaths:
- spec.resources.requests.storage
- source:
kind: ConfigMap
name: config
fieldPath: data.JELLYFIN_IMAGE
targets:
- select:
kind: Deployment
name: jellyfin
fieldPaths:
- spec.template.spec.containers.0.image

View File

@@ -0,0 +1,16 @@
name: jellyfin
description: Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files
version: 10.10.3
icon: https://jellyfin.org/images/banner-light.svg
requires: []
defaultConfig:
image: jellyfin/jellyfin:10.10.3
domain: jellyfin.{{ .cloud.domain }}
tlsSecretName: wildcard-wild-cloud-tls
port: 8096
configStorage: 1Gi
cacheStorage: 10Gi
mediaStorage: 100Gi
timezone: UTC
publishedServerUrl: "https://jellyfin.{{ .cloud.domain }}"
requiredSecrets: []

View File

@@ -1,32 +1,31 @@
---
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: jellyfin-config-pvc name: jellyfin-config
namespace: jellyfin namespace: jellyfin
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
resources: resources:
requests: requests:
storage: 1Gi storage: "{{ .apps.jellyfin.configStorage }}"
--- ---
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: jellyfin-cache-pvc name: jellyfin-cache
namespace: jellyfin namespace: jellyfin
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
resources: resources:
requests: requests:
storage: 10Gi storage: "{{ .apps.jellyfin.cacheStorage }}"
--- ---
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: jellyfin-media-pvc name: jellyfin-media
namespace: jellyfin namespace: jellyfin
spec: spec:
accessModes: accessModes:
@@ -34,4 +33,4 @@ spec:
storageClassName: nfs storageClassName: nfs
resources: resources:
requests: requests:
storage: 100Gi storage: "{{ .apps.jellyfin.mediaStorage }}"

View File

@@ -1,15 +1,13 @@
---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: jellyfin name: jellyfin
namespace: jellyfin namespace: jellyfin
labels:
app: jellyfin
spec: spec:
ports: ports:
- port: 8096 - name: http
targetPort: 8096 port: {{ .apps.jellyfin.port }}
targetPort: http
protocol: TCP protocol: TCP
selector: selector:
app: jellyfin component: web