Compare commits
64
Commits
jellyfin-2.1.0
...
2.7.0
No files matched your search
+10
-3
@@ -1,6 +1,13 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"github>jellyfin/.github//renovate-presets/default"
|
||||
"extends": ["github>jellyfin/.github//renovate-presets/default"],
|
||||
"customManagers": [
|
||||
{
|
||||
"customType": "regex",
|
||||
"fileMatch": ["charts/jellyfin/Chart.yaml"],
|
||||
"matchStrings": ["appVersion: (?<currentValue>.*?)\\n"],
|
||||
"datasourceTemplate": "docker",
|
||||
"depNameTemplate": "jellyfin/jellyfin"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -17,12 +17,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5
|
||||
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
|
||||
with:
|
||||
python-version: 3.x
|
||||
|
||||
|
||||
@@ -14,12 +14,12 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Helm Docs GitHub Action
|
||||
uses: losisin/helm-docs-github-action@57d2dc9379d9f0d5d22d2845a62c935d32cddfe2 # v1.3.3
|
||||
uses: losisin/helm-docs-github-action@a57fae5676e4c55a228ea654a1bcaec8dd3cf5b5 # v1.6.2
|
||||
with:
|
||||
git-push: true
|
||||
git-commit-message: "docs(charts): :memo: write updated reademe"
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -28,12 +28,12 @@ jobs:
|
||||
git config --global user.email "team@jellyfin.org"
|
||||
|
||||
- name: Install Helm
|
||||
uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 # v4
|
||||
uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4
|
||||
env:
|
||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@a917fd15b20e8b64b94d9158ad54cd6345335584 # v1.6.0
|
||||
uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
with:
|
||||
|
||||
@@ -7,7 +7,7 @@ This repository contains Helm charts for the jellyfin project.
|
||||
Each Helm chart is stored in its own directory. Each chart follows the standard Helm chart structure:
|
||||
|
||||
```plaintext
|
||||
hellyfin-helm/
|
||||
jellyfin-helm/
|
||||
├── jellyfin/
|
||||
│ ├── Chart.yaml
|
||||
│ ├── values.yaml
|
||||
|
||||
@@ -8,5 +8,5 @@ keywords:
|
||||
- jellyfin
|
||||
- media
|
||||
- self-hosted
|
||||
version: 2.1.0
|
||||
appVersion: 10.10.1
|
||||
version: 2.7.0
|
||||
appVersion: 10.11.5
|
||||
@@ -1,6 +1,6 @@
|
||||
# jellyfin
|
||||
|
||||
  
|
||||
  
|
||||
|
||||
A Helm chart for Jellyfin Media Server
|
||||
|
||||
@@ -53,7 +53,10 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| affinity | object | `{}` | Affinity rules for pod scheduling. |
|
||||
| deploymentAnnotations | object | `{}` | Annotations to add to the deployment. |
|
||||
| deploymentStrategy | object | `{"type":"RollingUpdate"}` | Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`. |
|
||||
| dnsConfig | object | `{}` | Define a dnsConfig. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config Use this to provide a custom DNS resolver configuration |
|
||||
| dnsPolicy | string | `""` | Define a dnsPolicy. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy |
|
||||
| extraContainers | list | `[]` | additional sidecar containers to run inside the pod. |
|
||||
| extraInitContainers | list | `[]` | additional init containers to run inside the pod. |
|
||||
| fullnameOverride | string | `""` | Override the default full name of the chart. |
|
||||
@@ -67,15 +70,16 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml
|
||||
| jellyfin.enableDLNA | bool | `false` | Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html |
|
||||
| jellyfin.env | list | `[]` | Additional environment variables for the container. |
|
||||
| livenessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure liveness probe for Jellyfin. |
|
||||
| metrics | object | `{"command":["bash","-c","sed 's,<EnableMetrics>false</EnableMetrics>,<EnableMetrics>true</EnableMetrics>,' -i /config/config/system.xml && /jellyfin/jellyfin"],"enabled":false,"serviceMonitor":{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}}` | Configuration for metrics collection and monitoring |
|
||||
| metrics | object | `{"enabled":false,"serviceMonitor":{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","port":8096,"relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}}` | Configuration for metrics collection and monitoring |
|
||||
| metrics.enabled | bool | `false` | Enable or disable metrics collection |
|
||||
| metrics.serviceMonitor | object | `{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}` | Configuration for the Prometheus ServiceMonitor |
|
||||
| metrics.serviceMonitor | object | `{"enabled":false,"interval":"30s","labels":{},"metricRelabelings":[],"namespace":"","path":"/metrics","port":8096,"relabelings":[],"scheme":"http","scrapeTimeout":"30s","targetLabels":[],"tlsConfig":{}}` | Configuration for the Prometheus ServiceMonitor |
|
||||
| metrics.serviceMonitor.enabled | bool | `false` | Enable or disable the creation of a ServiceMonitor resource |
|
||||
| metrics.serviceMonitor.interval | string | `"30s"` | Interval at which metrics should be scraped |
|
||||
| metrics.serviceMonitor.labels | object | `{}` | Labels to add to the ServiceMonitor resource |
|
||||
| metrics.serviceMonitor.metricRelabelings | list | `[]` | Relabeling rules for the metrics before ingestion |
|
||||
| metrics.serviceMonitor.namespace | string | `""` | Namespace where the ServiceMonitor resource should be created. Defaults to Release.Namespace |
|
||||
| metrics.serviceMonitor.path | string | `"/metrics"` | Path to scrape for metrics |
|
||||
| metrics.serviceMonitor.port | int | `8096` | Port to scrape for metrics |
|
||||
| metrics.serviceMonitor.relabelings | list | `[]` | Relabeling rules for the scraped metrics |
|
||||
| metrics.serviceMonitor.scheme | string | `"http"` | Scheme to use for scraping metrics (http or https) |
|
||||
| metrics.serviceMonitor.scrapeTimeout | string | `"30s"` | Timeout for scraping metrics |
|
||||
@@ -88,14 +92,21 @@ helm install my-jellyfin jellyfin/jellyfin -f values.yaml
|
||||
| persistence.config.enabled | bool | `true` | set to false to use emptyDir |
|
||||
| persistence.config.size | string | `"5Gi"` | |
|
||||
| persistence.config.storageClass | string | `""` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. |
|
||||
| persistence.media.accessMode | string | `"ReadWriteOnce"` | |
|
||||
| persistence.media.accessMode | string | `"ReadWriteOnce"` | PVC specific settings, only used if type is 'pvc'. |
|
||||
| persistence.media.annotations | object | `{}` | Custom annotations to be added to the PVC |
|
||||
| persistence.media.enabled | bool | `true` | set to false to use emptyDir |
|
||||
| persistence.media.hostPath | string | `""` | Path on the host node for media storage, only used if type is 'hostPath'. |
|
||||
| persistence.media.size | string | `"25Gi"` | |
|
||||
| persistence.media.storageClass | string | `""` | If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. |
|
||||
| persistence.media.type | string | `"pvc"` | Type of volume for media storage (pvc, hostPath, emptyDir). If 'enabled' is false, 'emptyDir' is used regardless of this setting. |
|
||||
| podAnnotations | object | `{}` | Annotations to add to the pod. |
|
||||
| podLabels | object | `{}` | Additional labels to add to the pod. |
|
||||
| podPrivileges | object | `{"hostIPC":false,"hostNetwork":false,"hostPID":false}` | Privileged pod settings for advanced use cases |
|
||||
| podPrivileges.hostIPC | bool | `false` | Enable hostIPC namespace. Required for NVIDIA MPS (Multi-Process Service) GPU sharing. See: https://docs.nvidia.com/deploy/mps/index.html |
|
||||
| podPrivileges.hostNetwork | bool | `false` | Enable hostNetwork. Allows pod to use the host's network namespace. |
|
||||
| podPrivileges.hostPID | bool | `false` | Enable hostPID namespace. Allows pod to see processes on the host. |
|
||||
| podSecurityContext | object | `{}` | Security context for the pod. |
|
||||
| priorityClassName | string | `""` | Define a priorityClassName for the pod. |
|
||||
| readinessProbe | object | `{"initialDelaySeconds":10,"tcpSocket":{"port":"http"}}` | Configure readiness probe for Jellyfin. |
|
||||
| replicaCount | int | `1` | Number of Jellyfin replicas to start. Should be left at 1. |
|
||||
| resources | object | `{}` | Resource requests and limits for the Jellyfin container. |
|
||||
|
||||
@@ -2,6 +2,10 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "jellyfin.fullname" . }}
|
||||
{{- with .Values.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "jellyfin.labels" . | nindent 4 }}
|
||||
spec:
|
||||
@@ -32,22 +36,24 @@ spec:
|
||||
serviceAccountName: {{ include "jellyfin.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
{{- if .Values.jellyfin.enableDLNA }}
|
||||
{{- if or .Values.jellyfin.enableDLNA .Values.podPrivileges.hostNetwork }}
|
||||
hostNetwork: true
|
||||
{{- end }}
|
||||
{{- if .Values.podPrivileges.hostIPC }}
|
||||
hostIPC: true
|
||||
{{- end }}
|
||||
{{- if .Values.podPrivileges.hostPID }}
|
||||
hostPID: true
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
{{- if and .Values.image.command (not .Values.metrics.enabled) }}
|
||||
{{- with .Values.jellyfin.command }}
|
||||
command:
|
||||
{{- toYaml .Values.jellyfin.command | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.metrics.enabled }}
|
||||
command:
|
||||
{{- toYaml .Values.metrics.command | nindent 12 }}
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.jellyfin.args }}
|
||||
args:
|
||||
@@ -57,6 +63,41 @@ spec:
|
||||
env:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if .Values.metrics.enabled }}
|
||||
lifecycle:
|
||||
postStart:
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- |
|
||||
echo "Waiting for system.xml to enable metrics..."
|
||||
timeout=300 # 5 minutes timeout
|
||||
interval=5 # Check every 5 seconds
|
||||
elapsed=0
|
||||
while [ ! -f /config/config/system.xml ]; do
|
||||
if [ $elapsed -ge $timeout ]; then
|
||||
echo "ERROR: Timed out waiting for /config/config/system.xml" >&2
|
||||
exit 1
|
||||
fi
|
||||
sleep $interval
|
||||
elapsed=$((elapsed + interval))
|
||||
done
|
||||
echo "Found /config/config/system.xml, enabling metrics..."
|
||||
# Check if metrics are already enabled before running sed
|
||||
if ! grep -q '<EnableMetrics>true</EnableMetrics>' /config/config/system.xml; then
|
||||
sed 's,<EnableMetrics>false</EnableMetrics>,<EnableMetrics>true</EnableMetrics>,' -i /config/config/system.xml
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Metrics enabled successfully."
|
||||
else
|
||||
echo "ERROR: Failed to enable metrics in /config/config/system.xml" >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Metrics already enabled."
|
||||
fi
|
||||
exit 0
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8096
|
||||
@@ -98,8 +139,16 @@ spec:
|
||||
{{- end }}
|
||||
- name: media
|
||||
{{- if .Values.persistence.media.enabled }}
|
||||
{{- if eq .Values.persistence.media.type "pvc" }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.media.existingClaim }}{{ .Values.persistence.media.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-media{{- end }}
|
||||
{{- else if eq .Values.persistence.media.type "hostPath" }}
|
||||
hostPath:
|
||||
path: {{ .Values.persistence.media.hostPath }}
|
||||
type: Directory
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
@@ -119,5 +168,15 @@ spec:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.runtimeClassName }}
|
||||
runtimeClassName: {{- . | quote }}
|
||||
runtimeClassName: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.priorityClassName }}
|
||||
priorityClassName: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .Values.dnsConfig }}
|
||||
dnsConfig:
|
||||
{{- toYaml . | nindent 8}}
|
||||
{{- end }}
|
||||
{{- with .Values.dnsPolicy }}
|
||||
dnsPolicy: {{ . | quote }}
|
||||
{{- end }}
|
||||
@@ -21,7 +21,7 @@ spec:
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- if and .Values.persistence.media.enabled (not .Values.persistence.media.existingClaim) }}
|
||||
{{- if and .Values.persistence.media.enabled (eq .Values.persistence.media.type "pvc") (not .Values.persistence.media.existingClaim) }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
|
||||
@@ -47,7 +47,7 @@ spec:
|
||||
externalTrafficPolicy: {{ . }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: {{ .Values.service.portName | default "http" }}
|
||||
- name: {{ .Values.service.name | default "http" }}
|
||||
port: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
targetPort: http
|
||||
|
||||
@@ -14,7 +14,7 @@ metadata:
|
||||
{{- end }}
|
||||
spec:
|
||||
endpoints:
|
||||
- port: {{ .Values.service.name }}
|
||||
- port: {{ .Values.service.name | default "http" }}
|
||||
{{- with .Values.metrics.serviceMonitor.interval }}
|
||||
interval: {{ . }}
|
||||
{{- end }}
|
||||
|
||||
@@ -53,11 +53,35 @@ securityContext: {}
|
||||
# -- Define a custom runtimeClassName for the pod.
|
||||
runtimeClassName: ''
|
||||
|
||||
# -- Define a priorityClassName for the pod.
|
||||
priorityClassName: ""
|
||||
|
||||
# -- Define a dnsConfig. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config
|
||||
# Use this to provide a custom DNS resolver configuration
|
||||
dnsConfig: {}
|
||||
# nameservers:
|
||||
# - 192.0.2.1
|
||||
# searches:
|
||||
# - ns1.svc.cluster-domain.example
|
||||
# - my.dns.search.suffix
|
||||
# options:
|
||||
# - name: ndots
|
||||
# value: "2"
|
||||
# - name: edns0
|
||||
|
||||
# -- Define a dnsPolicy. See https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy
|
||||
dnsPolicy: ""
|
||||
|
||||
# -- Deployment strategy configuration. See `kubectl explain deployment.spec.strategy`.
|
||||
deploymentStrategy:
|
||||
type: RollingUpdate
|
||||
|
||||
# -- Annotations to add to the deployment.
|
||||
deploymentAnnotations: {}
|
||||
|
||||
service:
|
||||
# # -- Custom name for the service port
|
||||
# name: http
|
||||
# -- Service type (ClusterIP, NodePort, or LoadBalancer).
|
||||
type: ClusterIP
|
||||
# -- Configure dual-stack IP family policy. See: https://kubernetes.io/docs/concepts/services-networking/dual-stack/
|
||||
@@ -151,6 +175,15 @@ tolerations: []
|
||||
# -- Affinity rules for pod scheduling.
|
||||
affinity: {}
|
||||
|
||||
# -- Privileged pod settings for advanced use cases
|
||||
podPrivileges:
|
||||
# -- Enable hostIPC namespace. Required for NVIDIA MPS (Multi-Process Service) GPU sharing. See: https://docs.nvidia.com/deploy/mps/index.html
|
||||
hostIPC: false
|
||||
# -- Enable hostNetwork. Allows pod to use the host's network namespace.
|
||||
hostNetwork: false
|
||||
# -- Enable hostPID namespace. Allows pod to see processes on the host.
|
||||
hostPID: false
|
||||
|
||||
jellyfin:
|
||||
# -- Enable DLNA. Requires host network. See: https://jellyfin.org/docs/general/networking/dlna.html
|
||||
enableDLNA: false
|
||||
@@ -176,6 +209,11 @@ persistence:
|
||||
media:
|
||||
# -- set to false to use emptyDir
|
||||
enabled: true
|
||||
# -- Type of volume for media storage (pvc, hostPath, emptyDir). If 'enabled' is false, 'emptyDir' is used regardless of this setting.
|
||||
type: pvc
|
||||
# -- Path on the host node for media storage, only used if type is 'hostPath'.
|
||||
hostPath: ""
|
||||
# -- PVC specific settings, only used if type is 'pvc'.
|
||||
accessMode: ReadWriteOnce
|
||||
size: 25Gi
|
||||
# -- Custom annotations to be added to the PVC
|
||||
@@ -189,12 +227,6 @@ persistence:
|
||||
metrics:
|
||||
# -- Enable or disable metrics collection
|
||||
enabled: false
|
||||
command:
|
||||
- bash
|
||||
- '-c'
|
||||
- >-
|
||||
sed 's,<EnableMetrics>false</EnableMetrics>,<EnableMetrics>true</EnableMetrics>,' -i /config/config/system.xml &&
|
||||
/jellyfin/jellyfin
|
||||
# -- Configuration for the Prometheus ServiceMonitor
|
||||
serviceMonitor:
|
||||
# -- Enable or disable the creation of a ServiceMonitor resource
|
||||
@@ -209,6 +241,8 @@ metrics:
|
||||
scrapeTimeout: 30s
|
||||
# -- Path to scrape for metrics
|
||||
path: /metrics
|
||||
# -- Port to scrape for metrics
|
||||
port: 8096
|
||||
# -- Scheme to use for scraping metrics (http or https)
|
||||
scheme: http
|
||||
# -- TLS configuration for scraping metrics
|
||||
@@ -224,4 +258,4 @@ metrics:
|
||||
extraInitContainers: []
|
||||
|
||||
# -- additional sidecar containers to run inside the pod.
|
||||
extraContainers: []
|
||||
extraContainers: []
|
||||
Reference in new issue
Block a user