+ ![]() Jean Baptiste Detroyes + + |
+
+ ![]() Nathan Tréhout + + |
+
+
+This Helm chart is a lightweight way to configure and run the official [apache/tika][] Docker image.
+
+We recommend that the Helm chart version is aligned to the version Tika (and subsequently the
+version of the [Tika Docker image][]) you want to deploy.
+This will ensure that you using a chart version that has been tested against the corresponding
+production version. This will also ensure that the documentation and examples for the chart
+will work with the version of Tika you are installing.
+
+
+**Warning**: This branch is used for development, please use the [latest release][] for released version.
+
+
+
+
+
+- [Requirements](#requirements)
+- [Installing](#installing)
+ - [Install released version using Helm repository](#install-released-version-using-helm-repository)
+ - [Install development version using master branch](#install-development-version-using-master-branch)
+- [Upgrading](#upgrading)
+- [Usage notes](#usage-notes)
+- [Configuration](#configuration)
+ - [Deprecated](#deprecated)
+- [FAQ](#faq)
+- [Contributing](#contributing)
+
+
+
+
+
+
+## Requirements
+
+* Kubernetes >= 1.14
+* [Helm][] >= v3.4.2
+
+## Installing
+
+### Install released version using Helm repository
+
+**N.B.** You may or may not need/wish to install the chart into a specific **namespace**,
+in which case you may need to augment the commands below.
+
+* Add the Tika Helm charts repo:
+`helm repo add tika https://apache.jfrog.io/artifactory/tika`
+
+* Install it:
+ - with Helm 3: `helm install tika tika/tika --set image.tag=${release.version} -n tika-test`, you will see something like
+```
+helm install tika tika/tika --set image.tag=latest-full -n tika-test
+
+...
+NAME: tika
+LAST DEPLOYED: Mon Jan 24 13:38:01 2022
+NAMESPACE: tika-test
+STATUS: deployed
+REVISION: 1
+NOTES:
+1. Get the application URL by running these commands:
+ export POD_NAME=$(kubectl get pods --namespace tika-test -l "app.kubernetes.io/name=tika,app.kubernetes.io/instance=tika" -o jsonpath="{.items[0].metadata.name}")
+ export CONTAINER_PORT=$(kubectl get pod --namespace tika-test $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+ echo "Visit http://127.0.0.1:9998 to use your application"
+ kubectl --namespace tika-test port-forward $POD_NAME 9998:$CONTAINER_PORT
+```
+You may notice that the _kubectl port forwarding_ experiences a _timeout issue_ which ultimately kills the app. In this case you can run port formarding in a loop
+```
+while true; do kubectl --namespace tika-test port-forward $POD_NAME 9998:$CONTAINER_PORT ; done
+```
+... this should keep `kubectl` reconnecting on connection lost.
+
+### Install development version using master branch
+
+* Clone the git repo: `git clone git@github.com:apache/tika-helm.git`
+
+* Install it:
+ - with Helm 3: `helm install tika . --set image.tag=latest-full`
+
+## Upgrading
+
+Please always check [CHANGELOG.md][] and [BREAKING_CHANGES.md][] before
+upgrading to a new chart version.
+
+
+## Usage notes
+
+* TODO
+
+
+## Configuration
+
+| Parameter | Description | Default |
+|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------|
+| `...` | ... | ... |
+
+### Deprecated
+
+| Parameter | Description | Default |
+|----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
+| `...` | ... | `...` |
+
+## FAQ
+
+None yet...
+
+## Contributing
+
+Please check [CONTRIBUTING][] before any contribution or for any questions
+about our development and testing process.
+
+## More Information
+
+For more infomation on Apache Tika Server, go to the [Apache Tika Server documentation][].
+
+For more information on Apache Tika, go to the official [Apache Tika][] project website.
+
+For more information on the Apache Software Foundation, go to the [Apache Software Foundation][] website.
+
+## Authors
+
+Apache Tika Dev Team (dev@tika.apache.org)
+
+# License
+The code is licensed permissively under the [Apache License v2.0][].
+
+[Apache License v2.0]: https://www.apache.org/licenses/LICENSE-2.0.html
+[Apache Software Foundation]: http://apache.org
+[Apache Tika]: https://tika.apache.org
+[Apache Tika Server documentation]: https://cwiki.apache.org/confluence/display/TIKA/TikaServer
+[BREAKING_CHANGES.md]: https://github.com/apache/tika-helm/blob/master/BREAKING_CHANGES.md
+[CHANGELOG.md]: https://github.com/apache/tika-helm/blob/master/CHANGELOG.md
+[CONTRIBUTING]: https://github.com/apache/tika#contributing-via-github
+[apache/tika]: https://github.com/apache/tika-docker
+[Helm chart]: https://helm.sh/docs/topics/charts/
+[Kubernetes]: https://kubernetes.io/
+[Tika Docker image]: https://hub.docker.com/r/apache/tika/tags?page=1&ordering=last_updated
+[helm]: https://helm.sh
+[latest release]: https://github.com/apache/tika-helm/releases
diff --git a/charts/open-webui/charts/tika/templates/NOTES.txt b/charts/open-webui/charts/tika/templates/NOTES.txt
new file mode 100644
index 0000000..21fb4d6
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/NOTES.txt
@@ -0,0 +1,22 @@
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range $host := .Values.ingress.hosts }}
+ {{- range .paths }}
+ http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
+ {{- end }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "tika-helm.fullname" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "tika-helm.fullname" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "tika-helm.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+ echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "tika-helm.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+ echo "Visit http://127.0.0.1:9998 to use your application"
+ kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 9998:$CONTAINER_PORT
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/_helpers.tpl b/charts/open-webui/charts/tika/templates/_helpers.tpl
new file mode 100644
index 0000000..da7b610
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/_helpers.tpl
@@ -0,0 +1,62 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "tika-helm.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "tika-helm.fullname" -}}
+{{- if .Values.fullnameOverride }}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "tika-helm.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "tika-helm.labels" -}}
+helm.sh/chart: {{ include "tika-helm.chart" . }}
+{{ include "tika-helm.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "tika-helm.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "tika-helm.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Create the name of the service account to use
+*/}}
+{{- define "tika-helm.serviceAccountName" -}}
+{{- if .Values.serviceAccount.create }}
+{{- default (include "tika-helm.fullname" .) .Values.serviceAccount.name }}
+{{- else }}
+{{- default "default" .Values.serviceAccount.name }}
+{{- end }}
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/deployment.yaml b/charts/open-webui/charts/tika/templates/deployment.yaml
new file mode 100644
index 0000000..44cec3e
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/deployment.yaml
@@ -0,0 +1,95 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "tika-helm.fullname" . }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+spec:
+ {{- if not .Values.autoscaling.enabled }}
+ replicas: {{ .Values.replicaCount }}
+ {{- end }}
+ selector:
+ matchLabels:
+ {{- include "tika-helm.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- with .Values.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "tika-helm.selectorLabels" . | nindent 8 }}
+ spec:
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ serviceAccountName: {{ include "tika-helm.serviceAccountName" . }}
+ securityContext:
+ {{- toYaml .Values.podSecurityContext | nindent 8 }}
+ volumes:
+ - name: sec-ctx-vol
+ emptyDir: {}
+ containers:
+ - name: {{ .Chart.Name }}
+ securityContext:
+ {{- toYaml .Values.securityContext | nindent 12 }}
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ volumeMounts:
+ - name: sec-ctx-vol
+ mountPath: /tmp
+ ports:
+ - name: http
+ containerPort: {{ .Values.service.port }}
+ protocol: TCP
+ livenessProbe:
+ httpGet:
+ path: {{if .Values.config.base_url }}{{- with urlParse (tpl .Values.config.base_url .) }}{{ .path }}{{end}}{{else}}/{{end}}
+ port: {{ .Values.service.port }}
+ scheme: {{ .Values.livenessProbe.scheme | default "http" }}
+ initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds | default 15 }}
+ timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds | default 30 }}
+ failureThreshold: {{ .Values.livenessProbe.failureThreshold | default 20 }}
+ periodSeconds: {{ .Values.livenessProbe.periodSeconds | default 5 }}
+ readinessProbe:
+ httpGet:
+ path: {{if .Values.config.base_url }}{{- with urlParse (tpl .Values.config.base_url .) }}{{ .path }}{{end}}{{else}}/{{end}}
+ port: {{ .Values.service.port }}
+ scheme: {{ .Values.readinessProbe.scheme | default "http" }}
+ initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds | default 15 }}
+ timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds | default 30 }}
+ failureThreshold: {{ .Values.readinessProbe.failureThreshold | default 20 }}
+ periodSeconds: {{ .Values.readinessProbe.periodSeconds | default 5 }}
+ resources:
+ {{- toYaml .Values.resources | nindent 12 }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
diff --git a/charts/open-webui/charts/tika/templates/hpa.yaml b/charts/open-webui/charts/tika/templates/hpa.yaml
new file mode 100644
index 0000000..3c162ed
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/hpa.yaml
@@ -0,0 +1,65 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+{{- if .Values.autoscaling.enabled }}
+apiVersion: {{ .Values.autoscaling.apiVersion }}
+kind: HorizontalPodAutoscaler
+metadata:
+ name: {{ include "tika-helm.fullname" . }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: {{ include "tika-helm.fullname" . }}
+ minReplicas: {{ .Values.autoscaling.minReplicas }}
+ maxReplicas: {{ .Values.autoscaling.maxReplicas }}
+ metrics:
+ {{- if eq .Values.autoscaling.apiVersion "autoscaling/v2" }}
+ {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: memory
+ target:
+ type: Utilization
+ averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ {{- end }}
+ {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: cpu
+ target:
+ type: Utilization
+ averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
+ {{- end }}
+ {{- else }}
+ {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: memory
+ targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}
+ {{- end }}
+ {{- if .Values.autoscaling.targetCPUUtilizationPercentage }}
+ - type: Resource
+ resource:
+ name: cpu
+ targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/ingress.yaml b/charts/open-webui/charts/tika/templates/ingress.yaml
new file mode 100644
index 0000000..716fd6d
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/ingress.yaml
@@ -0,0 +1,79 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+{{- if .Values.ingress.enabled -}}
+{{- $fullName := include "tika-helm.fullname" . -}}
+{{- $svcPort := .Values.service.port -}}
+{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }}
+ {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }}
+ {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}}
+ {{- end }}
+{{- end }}
+{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1
+{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
+apiVersion: networking.k8s.io/v1beta1
+{{- else -}}
+apiVersion: extensions/v1beta1
+{{- end }}
+kind: Ingress
+metadata:
+ name: {{ $fullName }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+ {{- with .Values.ingress.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }}
+ ingressClassName: {{ .Values.ingress.className }}
+ {{- end }}
+ {{- if .Values.ingress.tls }}
+ tls:
+ {{- range .Values.ingress.tls }}
+ - hosts:
+ {{- range .hosts }}
+ - {{ . | quote }}
+ {{- end }}
+ secretName: {{ .secretName }}
+ {{- end }}
+ {{- end }}
+ rules:
+ {{- range .Values.ingress.hosts }}
+ - host: {{ .host | quote }}
+ http:
+ paths:
+ {{- range .paths }}
+ - path: {{ .path }}
+ {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }}
+ pathType: {{ .pathType }}
+ {{- end }}
+ backend:
+ {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }}
+ service:
+ name: {{ $fullName }}
+ port:
+ number: {{ $svcPort }}
+ {{- else }}
+ serviceName: {{ $fullName }}
+ servicePort: {{ $svcPort }}
+ {{- end }}
+ {{- end }}
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/networkpolicy.yaml b/charts/open-webui/charts/tika/templates/networkpolicy.yaml
new file mode 100644
index 0000000..5a2089f
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/networkpolicy.yaml
@@ -0,0 +1,23 @@
+{{- if .Values.networkPolicy.enabled }}
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+ name: {{ template "tika-helm.fullname" . }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+spec:
+ podSelector:
+ matchLabels:
+ {{- include "tika-helm.selectorLabels" . | nindent 6 }}
+ egress:
+ - {}
+ ingress:
+ - ports:
+ - port: {{ .Values.service.port }}
+ {{- if not .Values.networkPolicy.allowExternal }}
+ from:
+ - podSelector:
+ matchLabels:
+ {{ template "tika-helm.fullname" . }}-client: "true"
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/service.yaml b/charts/open-webui/charts/tika/templates/service.yaml
new file mode 100644
index 0000000..d99b4b2
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/service.yaml
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "tika-helm.fullname" . }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - port: {{ .Values.service.port }}
+ targetPort: http
+ protocol: TCP
+ name: http
+ selector:
+ {{- include "tika-helm.selectorLabels" . | nindent 4 }}
diff --git a/charts/open-webui/charts/tika/templates/serviceaccount.yaml b/charts/open-webui/charts/tika/templates/serviceaccount.yaml
new file mode 100644
index 0000000..0f708f2
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/serviceaccount.yaml
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+{{- if .Values.serviceAccount.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ include "tika-helm.serviceAccountName" . }}
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/charts/tika/templates/tests/test-connection.yaml b/charts/open-webui/charts/tika/templates/tests/test-connection.yaml
new file mode 100644
index 0000000..5de0a4c
--- /dev/null
+++ b/charts/open-webui/charts/tika/templates/tests/test-connection.yaml
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+---
+apiVersion: v1
+kind: Pod
+metadata:
+ name: "{{ include "tika-helm.fullname" . }}-test-connection"
+ labels:
+ {{- include "tika-helm.labels" . | nindent 4 }}
+ annotations:
+ "helm.sh/hook": test
+spec:
+ containers:
+ - name: wget
+ image: busybox
+ command: ['wget']
+ args: ['{{ include "tika-helm.fullname" . }}:{{ .Values.service.port }}']
+ restartPolicy: Never
diff --git a/charts/open-webui/charts/tika/values.yaml b/charts/open-webui/charts/tika/values.yaml
new file mode 100644
index 0000000..8d38f46
--- /dev/null
+++ b/charts/open-webui/charts/tika/values.yaml
@@ -0,0 +1,67 @@
+affinity: {}
+autoscaling:
+ apiVersion: autoscaling/v2beta1
+ enabled: false
+ maxReplicas: 100
+ minReplicas: 1
+ targetCPUUtilizationPercentage: 80
+ targetMemoryUtilizationPercentage: 80
+config:
+ base_url: http://localhost/
+fullnameOverride: ""
+image:
+ pullPolicy: IfNotPresent
+ repository: apache/tika
+ tag: 2.9.0.0
+imagePullSecrets: []
+ingress:
+ annotations: {}
+ enabled: false
+ hosts:
+ - host: chart-example.local
+ paths: []
+ tls: []
+livenessProbe:
+ failureThreshold: 20
+ initialDelaySeconds: 15
+ periodSeconds: 5
+ scheme: HTTP
+ timeoutSeconds: 30
+nameOverride: ""
+networkPolicy:
+ allowExternal: false
+ enabled: false
+nodeSelector: {}
+podAnnotations: {}
+podSecurityContext: {}
+readinessProbe:
+ failureThreshold: 20
+ initialDelaySeconds: 15
+ periodSeconds: 5
+ scheme: HTTP
+ timeoutSeconds: 30
+replicaCount: 1
+resources:
+ limits:
+ cpu: "2"
+ memory: 2000Mi
+ requests:
+ cpu: "1"
+ memory: 1500Mi
+securityContext:
+ allowPrivilegeEscalation: true
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ runAsGroup: 35002
+ runAsNonRoot: true
+ runAsUser: 35002
+service:
+ port: 9998
+ type: ClusterIP
+serviceAccount:
+ annotations: {}
+ create: true
+ name: ""
+tolerations: []
diff --git a/charts/open-webui/custom-values.yaml b/charts/open-webui/custom-values.yaml
new file mode 100644
index 0000000..2ca6316
--- /dev/null
+++ b/charts/open-webui/custom-values.yaml
@@ -0,0 +1,57 @@
+ollama:
+ enabled: false
+tika:
+ enabled: false
+websocket:
+ enabled: false
+redis-cluster:
+ enabled: false
+ingress:
+ enabled: true
+ annotations:
+ cert-manager.io/cluster-issuer: "root-ca-issuer"
+ host: "open-webui.example.com"
+ tls: true
+ existingSecret: "open-webui-tls-secret"
+persistence:
+ enabled: true
+ size: 2Gi
+ existingClaim: ""
+ subPath: ""
+ accessModes:
+ - ReadWriteOnce
+ storageClass: ""
+ selector: {}
+ annotations: {}
+extraEnvVars:
+ - name: OPENAI_API_KEY
+ value: "0p3n-w3bu!"
+ - name: OAUTH_CLIENT_ID
+ value: open-webui
+ - name: OAUTH_CLIENT_SECRET
+ value: UXVwsmPSbWZ0pZkxwdgeY88vl9JJZJLQ
+ - name: OPENID_PROVIDER_URL
+ value: https://keycloak.examole.com/auth/realms/paasup/.well-known/openid-configuration
+ - name: OAUTH_PROVIDER_NAME
+ value: paasup
+ - name: OAUTH_SCOPES
+ value: 'openid email profile'
+ - name: ENABLE_LOGIN_FORM
+ value: 'true'
+ - name: SSL_CERT_FILE
+ value: '/etc/ssl/certs/keycloak/ca.crt'
+ - name: ENABLE_OAUTH_SIGNUP
+ value: 'true'
+ - name: OAUTH_MERGE_ACCOUNTS_BY_EMAIL
+ value: 'true'
+
+volumeMounts:
+ initContainer: []
+ container:
+ - name: "keycloak-tls"
+ mountPath: "/etc/ssl/certs/keycloak"
+
+volumes:
+- name: "keycloak-tls"
+ secret:
+ secretName: keycloak-tls-secret
diff --git a/charts/open-webui/templates/NOTES.txt b/charts/open-webui/templates/NOTES.txt
new file mode 100644
index 0000000..1fe5e46
--- /dev/null
+++ b/charts/open-webui/templates/NOTES.txt
@@ -0,0 +1,77 @@
+{{- `
+🎉 Welcome to Open WebUI!!
+ ___ __ __ _ _ _ ___
+ / _ \ _ __ ___ _ __ \ \ / /__| |__ | | | |_ _|
+| | | | '_ \ / _ \ '_ \ \ \ /\ / / _ \ '_ \| | | || |
+| |_| | |_) | __/ | | | \ V V / __/ |_) | |_| || |
+ \___/| .__/ \___|_| |_| \_/\_/ \___|_.__/ \___/|___|
+ |_|
+` }}
+v{{ .Chart.AppVersion }} - building the best open-source AI user interface.
+ - Chart Version: v{{ .Chart.Version }}
+ - Project URL 1: {{ .Chart.Home }}
+ - Project URL 2: https://github.com/open-webui/open-webui
+ - Documentation: https://docs.openwebui.com/
+ - Chart URL: https://github.com/open-webui/helm-charts
+
+Open WebUI is a web-based user interface that works with Ollama, OpenAI, Claude 3, Gemini and more.
+This interface allows you to easily interact with local AI models.
+
+1. Deployment Information:
+ - Chart Name: {{ .Chart.Name }}
+ - Release Name: {{ .Release.Name }}
+ - Namespace: {{ .Release.Namespace }}
+
+2. Access the Application:
+{{- if contains "ClusterIP" .Values.service.type }}
+ Access via ClusterIP service:
+
+ export LOCAL_PORT=8080
+ export POD_NAME=$(kubectl get pods -n {{ .Release.Namespace }} -l "app.kubernetes.io/component={{ include "open-webui.name" . }}" -o jsonpath="{.items[0].metadata.name}")
+ export CONTAINER_PORT=$(kubectl get pod -n {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+ kubectl -n {{ .Release.Namespace }} port-forward $POD_NAME $LOCAL_PORT:$CONTAINER_PORT
+ echo "Visit http://127.0.0.1:$LOCAL_PORT to use your application"
+
+ Then, access the application at: http://127.0.0.1:$LOCAL_PORT or http://localhost:8080
+
+{{- else if contains "NodePort" .Values.service.type }}
+ Access via NodePort service:
+ export NODE_PORT=$(kubectl get -n {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "open-webui.name" . }})
+ export NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+
+{{- else if contains "LoadBalancer" .Values.service.type }}
+ Access via LoadBalancer service:
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ NOTE: The external address format depends on your cloud provider:
+ - AWS: Will return a hostname (e.g., xxx.elb.amazonaws.com)
+ - GCP/Azure: Will return an IP address
+ You can watch the status by running:
+
+ kubectl get -n {{ .Release.Namespace }} svc {{ include "open-webui.name" . }} --watch
+ export EXTERNAL_IP=$(kubectl get -n {{ .Release.Namespace }} svc {{ include "open-webui.name" . }} -o jsonpath="{.status.loadBalancer.ingress[0].hostname:-.status.loadBalancer.ingress[0].ip}")
+ echo http://$EXTERNAL_IP:{{ .Values.service.port }}
+{{- end }}
+
+{{- if .Values.ingress.enabled }}
+
+ Ingress is enabled. Access the application at: http{{ if .Values.ingress.tls }}s{{ end }}://{{ .Values.ingress.host }}
+{{- end }}
+
+3. Useful Commands:
+ - Check deployment status:
+ helm status {{ .Release.Name }} -n {{ .Release.Namespace }}
+
+ - Get detailed information:
+ helm get all {{ .Release.Name }} -n {{ .Release.Namespace }}
+
+ - View logs:
+ {{- if .Values.persistence.enabled }}
+ kubectl logs -f statefulset/{{ include "open-webui.name" . }} -n {{ .Release.Namespace }}
+ {{- else }}
+ kubectl logs -f deployment/{{ include "open-webui.name" . }} -n {{ .Release.Namespace }}
+ {{- end }}
+
+4. Cleanup:
+ - Uninstall the deployment:
+ helm uninstall {{ .Release.Name }} -n {{ .Release.Namespace }}
diff --git a/charts/open-webui/templates/_helpers.tpl b/charts/open-webui/templates/_helpers.tpl
new file mode 100644
index 0000000..953244b
--- /dev/null
+++ b/charts/open-webui/templates/_helpers.tpl
@@ -0,0 +1,171 @@
+{{/*
+Allow the release namespace to be overridden for multi-namespace deployments in combined charts
+*/}}
+{{- define "open-webui.namespace" -}}
+ {{- if .Values.namespaceOverride -}}
+ {{- .Values.namespaceOverride -}}
+ {{- else -}}
+ {{- .Release.Namespace -}}
+ {{- end -}}
+{{- end -}}
+
+{{/*
+Set the name of the Open WebUI resources
+*/}}
+{{- define "open-webui.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
+{{- end -}}
+
+{{/*
+Set the name of the integrated Ollama resources
+*/}}
+{{- define "ollama.name" -}}
+open-webui-ollama
+{{- end -}}
+
+{{/*
+Set the name of the integrated Pipelines resources
+*/}}
+{{- define "pipelines.name" -}}
+open-webui-pipelines
+{{- end -}}
+
+{{/*
+Constructs a semicolon-separated string of Ollama API endpoint URLs from the ollamaUrls list
+defined in the values.yaml file
+*/}}
+{{- define "ollamaUrls" -}}
+{{- if .Values.ollamaUrls }}
+{{- join ";" .Values.ollamaUrls | trimSuffix "/" }}
+{{- end }}
+{{- end }}
+
+{{/*
+Generates the URL for accessing the Ollama service within the Kubernetes cluster when the
+ollama.enabled value is set to true, which means that the Ollama Helm chart is being installed
+as a dependency of the Open WebUI chart
+*/}}
+{{- define "ollamaLocalUrl" -}}
+{{- if .Values.ollama.enabled -}}
+{{- $clusterDomain := .Values.clusterDomain }}
+{{- $ollamaServicePort := .Values.ollama.service.port | toString }}
+{{- printf "http://%s.%s.svc.%s:%s" (default .Values.ollama.name .Values.ollama.fullnameOverride) (.Release.Namespace) $clusterDomain $ollamaServicePort }}
+{{- end }}
+{{- end }}
+
+{{/*
+Constructs a string containing the URLs of the Ollama API endpoints that the Open WebUI
+application should use based on which values are set for Ollama/ whether the Ollama
+subchart is in use
+*/}}
+{{- define "ollamaBaseUrls" -}}
+{{- $ollamaLocalUrl := include "ollamaLocalUrl" . }}
+{{- $ollamaUrls := include "ollamaUrls" . }}
+{{- if and .Values.ollama.enabled .Values.ollamaUrls }}
+{{- printf "%s;%s" $ollamaUrls $ollamaLocalUrl }}
+{{- else if .Values.ollama.enabled }}
+{{- printf "%s" $ollamaLocalUrl }}
+{{- else if .Values.ollamaUrls }}
+{{- printf "%s" $ollamaUrls }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create the chart name and version for the chart label
+*/}}
+{{- define "chart.name" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create the base labels to include on chart resources
+*/}}
+{{- define "base.labels" -}}
+helm.sh/chart: {{ include "chart.name" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Create selector labels to include on all resources
+*/}}
+{{- define "base.selectorLabels" -}}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end -}}
+
+{{/*
+Create selector labels to include on all Open WebUI resources
+*/}}
+{{- define "open-webui.selectorLabels" -}}
+{{ include "base.selectorLabels" . }}
+app.kubernetes.io/component: {{ .Chart.Name }}
+{{- end }}
+
+{{/*
+Create labels to include on chart all Open WebUI resources
+*/}}
+{{- define "open-webui.labels" -}}
+{{ include "base.labels" . }}
+{{ include "open-webui.selectorLabels" . }}
+{{- end }}
+
+{{/*
+Create selector labels to include on chart all Ollama resources
+*/}}
+{{- define "ollama.selectorLabels" -}}
+{{ include "base.selectorLabels" . }}
+app.kubernetes.io/component: {{ include "ollama.name" . }}
+{{- end }}
+
+{{/*
+Create labels to include on chart all Ollama resources
+*/}}
+{{- define "ollama.labels" -}}
+{{ include "base.labels" . }}
+{{ include "ollama.selectorLabels" . }}
+{{- end }}
+
+{{/*
+Create selector labels to include on chart all Pipelines resources
+*/}}
+{{- define "pipelines.selectorLabels" -}}
+{{ include "base.selectorLabels" . }}
+app.kubernetes.io/component: {{ include "pipelines.name" . }}
+{{- end }}
+
+{{/*
+Create labels to include on chart all Pipelines resources
+*/}}
+{{- define "pipelines.labels" -}}
+{{ include "base.labels" . }}
+{{ include "pipelines.selectorLabels" . }}
+{{- end }}
+
+{{/*
+Create the service endpoint to use for Pipelines if the subchart is used
+*/}}
+{{- define "pipelines.serviceEndpoint" -}}
+{{- if .Values.pipelines.enabled -}}
+{{- $clusterDomain := .Values.clusterDomain }}
+{{- $pipelinesServicePort := .Values.pipelines.service.port | toString }}
+{{- printf "http://%s.%s.svc.%s:%s" (include "pipelines.name" .) (.Release.Namespace) $clusterDomain $pipelinesServicePort }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create selector labels to include on chart all websocket resources
+*/}}
+{{- define "websocket.redis.selectorLabels" -}}
+{{ include "base.selectorLabels" . }}
+app.kubernetes.io/component: {{ .Values.websocket.redis.name }}
+{{- end }}
+
+{{/*
+Create labels to include on chart all websocket resources
+*/}}
+{{- define "websocket.redis.labels" -}}
+{{ include "base.labels" . }}
+{{ include "websocket.redis.selectorLabels" . }}
+{{- end }}
diff --git a/charts/open-webui/templates/extra-resources.yaml b/charts/open-webui/templates/extra-resources.yaml
new file mode 100644
index 0000000..5124a0b
--- /dev/null
+++ b/charts/open-webui/templates/extra-resources.yaml
@@ -0,0 +1,6 @@
+{{- if .Values.extraResources }}
+{{- range .Values.extraResources }}
+---
+{{ toYaml . | nindent 0 }}
+{{- end }}
+{{- end }}
diff --git a/charts/open-webui/templates/ingress.yaml b/charts/open-webui/templates/ingress.yaml
new file mode 100644
index 0000000..6b89ff4
--- /dev/null
+++ b/charts/open-webui/templates/ingress.yaml
@@ -0,0 +1,49 @@
+{{- if .Values.ingress.enabled }}
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: {{ include "open-webui.name" . }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "open-webui.labels" . | nindent 4 }}
+ {{- with .Values.ingress.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ {{- with .Values.ingress.class }}
+ ingressClassName: {{ . }}
+ {{- end }}
+ {{- if .Values.ingress.tls }}
+ tls:
+ - hosts:
+ - {{ .Values.ingress.host | quote }}
+ {{- range .Values.ingress.additionalHosts }}
+ - {{ . | quote }}
+ {{- end }}
+ secretName: {{ default (printf "%s-tls" .Release.Name) .Values.ingress.existingSecret }}
+ {{- end }}
+ rules:
+ - host: {{ .Values.ingress.host }}
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: {{ include "open-webui.name" . }}
+ port:
+ name: http
+ {{- range .Values.ingress.additionalHosts }}
+ - host: {{ . | quote }}
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: {{ include "open-webui.name" $ }}
+ port:
+ name: http
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/templates/pvc.yaml b/charts/open-webui/templates/pvc.yaml
new file mode 100644
index 0000000..c412e7f
--- /dev/null
+++ b/charts/open-webui/templates/pvc.yaml
@@ -0,0 +1,28 @@
+{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: {{ include "open-webui.name" . }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "open-webui.selectorLabels" . | nindent 4 }}
+ {{- with .Values.persistence.annotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+spec:
+ accessModes:
+ {{- range .Values.persistence.accessModes }}
+ - {{ . | quote }}
+ {{- end }}
+ resources:
+ requests:
+ storage: {{ .Values.persistence.size }}
+ {{- if .Values.persistence.storageClass }}
+ storageClassName: {{ .Values.persistence.storageClass }}
+ {{- end }}
+ {{- with .Values.persistence.selector }}
+ selector:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/templates/service-account.yaml b/charts/open-webui/templates/service-account.yaml
new file mode 100644
index 0000000..ecea069
--- /dev/null
+++ b/charts/open-webui/templates/service-account.yaml
@@ -0,0 +1,14 @@
+{{- if .Values.serviceAccount.enable }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: {{ .Values.serviceAccount.name | default (include "open-webui.name" .) }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "open-webui.labels" . | nindent 4 }}
+ {{- with .Values.serviceAccount.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
+{{- end }}
\ No newline at end of file
diff --git a/charts/open-webui/templates/service.yaml b/charts/open-webui/templates/service.yaml
new file mode 100644
index 0000000..bce51b6
--- /dev/null
+++ b/charts/open-webui/templates/service.yaml
@@ -0,0 +1,36 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "open-webui.name" . }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "open-webui.labels" . | nindent 4 }}
+ {{- with .Values.service.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ {{- with .Values.service.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ {{- include "open-webui.selectorLabels" . | nindent 4 }}
+ type: {{ .Values.service.type | default "ClusterIP" }}
+ ports:
+ - protocol: TCP
+ name: http
+ port: {{ .Values.service.port }}
+ targetPort: http
+ {{- if .Values.service.nodePort }}
+ nodePort: {{ .Values.service.nodePort | int }}
+ {{- end }}
+ {{- if .Values.service.loadBalancerClass }}
+ loadBalancerClass: {{ .Values.service.loadBalancerClass | quote }}
+ {{- end }}
+ {{- if and (eq .Values.service.type "ClusterIP") (.Values.service.clusterIP) }}
+ clusterIP: {{ .Values.service.clusterIP }}
+ {{- end }}
+ {{- if and (eq .Values.service.type "LoadBalancer") (.Values.service.loadBalancerIP) }}
+ loadBalancerIP: {{ .Values.service.loadBalancerIP }}
+ {{- end }}
+
diff --git a/charts/open-webui/templates/websocket-redis.yaml b/charts/open-webui/templates/websocket-redis.yaml
new file mode 100644
index 0000000..5e95dc8
--- /dev/null
+++ b/charts/open-webui/templates/websocket-redis.yaml
@@ -0,0 +1,71 @@
+{{- if and .Values.websocket.enabled .Values.websocket.redis.enabled }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ .Values.websocket.redis.name }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "websocket.redis.labels" . | nindent 4 }}
+ {{- with .Values.websocket.redis.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ annotations:
+ {{- with .Values.websocket.redis.annotations }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ matchLabels:
+ {{- include "websocket.redis.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ labels:
+ {{- include "websocket.redis.labels" . | nindent 8 }}
+ spec:
+ containers:
+ - name: {{ .Values.websocket.redis.name }}
+ image: "{{ .Values.websocket.redis.image.repository }}:{{ .Values.websocket.redis.image.tag }}"
+ imagePullPolicy: {{ .Values.websocket.redis.image.pullPolicy }}
+ {{- with .Values.websocket.redis.command }}
+ command:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.websocket.redis.args }}
+ args:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ ports:
+ - name: http
+ containerPort: {{ .Values.websocket.redis.service.containerPort }}
+ {{- with .Values.websocket.redis.resources }}
+ resources:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Values.websocket.redis.name }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "websocket.redis.labels" . | nindent 4 }}
+ {{- with .Values.websocket.redis.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ annotations:
+ {{- with .Values.websocket.redis.service.annotations }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ selector:
+ {{- include "websocket.redis.selectorLabels" . | nindent 4 }}
+ type: {{ .Values.websocket.redis.service.type | default "ClusterIP" }}
+ ports:
+ - protocol: TCP
+ name: http
+ port: {{ .Values.websocket.redis.service.port }}
+ targetPort: http
+ {{- if .Values.websocket.redis.service.nodePort }}
+ nodePort: {{ .Values.websocket.redis.service.nodePort | int }}
+ {{- end }}
+{{- end }}
diff --git a/charts/open-webui/templates/workload-manager.yaml b/charts/open-webui/templates/workload-manager.yaml
new file mode 100644
index 0000000..97fcabe
--- /dev/null
+++ b/charts/open-webui/templates/workload-manager.yaml
@@ -0,0 +1,178 @@
+apiVersion: apps/v1
+{{- if .Values.persistence.enabled }}
+kind: StatefulSet
+{{- else }}
+kind: Deployment
+{{- end }}
+metadata:
+ name: {{ include "open-webui.name" . }}
+ namespace: {{ include "open-webui.namespace" . }}
+ labels:
+ {{- include "open-webui.labels" . | nindent 4 }}
+ {{- with .Values.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ replicas: {{ .Values.replicaCount }}
+ {{- if .Values.persistence.enabled }}
+ serviceName: {{ include "open-webui.name" . }}
+ {{- end }}
+ selector:
+ matchLabels:
+ {{- include "open-webui.selectorLabels" . | nindent 6 }}
+ {{- if .Values.strategy }}
+ {{- if .Values.persistence.enabled }}
+ updateStrategy:
+ {{- toYaml .Values.strategy | nindent 4 }}
+ {{- else }}
+ strategy:
+ {{- toYaml .Values.strategy | nindent 4 }}
+ {{- end }}
+ {{- end }}
+ template:
+ metadata:
+ labels:
+ {{- include "open-webui.labels" . | nindent 8 }}
+ {{- with .Values.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.imagePullSecrets }}
+ imagePullSecrets:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ initContainers:
+ - name: copy-app-data
+ {{- with .Values.image }}
+ image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }}
+ imagePullPolicy: {{ .pullPolicy }}
+ {{- end }}
+ command: ['sh', '-c', 'cp -R -n /app/backend/data/* /tmp/app-data/']
+ {{- with .Values.containerSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.copyAppData.resources }}
+ resources: {{- toYaml . | nindent 10 }}
+ {{- end }}
+ volumeMounts:
+ - name: data
+ mountPath: /tmp/app-data
+ {{- if .Values.persistence.subPath }}
+ subPath: {{ .Values.persistence.subPath }}
+ {{- end }}
+ {{- with .Values.volumeMounts.initContainer }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ enableServiceLinks: false
+ automountServiceAccountToken: {{ .Values.serviceAccount.automountServiceAccountToken }}
+ {{- if .Values.serviceAccount.enable }}
+ serviceAccountName: {{ .Values.serviceAccount.name | default (include "open-webui.name" .) }}
+ {{- end }}
+ {{- with .Values.podSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ containers:
+ - name: {{ .Chart.Name }}
+ {{- with .Values.image }}
+ image: {{ .repository }}:{{ .tag | default $.Chart.AppVersion }}
+ imagePullPolicy: {{ .pullPolicy }}
+ {{- end }}
+ ports:
+ - name: http
+ containerPort: {{ .Values.service.containerPort }}
+ {{- with .Values.livenessProbe }}
+ livenessProbe: {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.readinessProbe }}
+ readinessProbe: {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.startupProbe }}
+ startupProbe: {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.resources }}
+ resources: {{- toYaml . | nindent 10 }}
+ {{- end }}
+ {{- with .Values.containerSecurityContext }}
+ securityContext:
+ {{- toYaml . | nindent 10 }}
+ {{- end }}
+ volumeMounts:
+ - name: data
+ mountPath: /app/backend/data
+ {{- if .Values.persistence.subPath }}
+ subPath: {{ .Values.persistence.subPath }}
+ {{- end }}
+ {{- with .Values.volumeMounts.container }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ env:
+ {{- if or .Values.ollamaUrls .Values.ollama.enabled }}
+ - name: "OLLAMA_BASE_URLS"
+ value: {{ include "ollamaBaseUrls" . | quote }}
+ {{- else }}
+ - name: "ENABLE_OLLAMA_API"
+ value: "False"
+ {{- end }}
+ - name: "OPENAI_API_BASE_URL"
+ {{- if .Values.pipelines.enabled }}
+ value: {{ include "pipelines.serviceEndpoint" . }}
+ {{- else if .Values.openaiBaseApiUrl }}
+ value: {{ .Values.openaiBaseApiUrl | quote }}
+ {{- end }}
+ {{- if .Values.extraEnvVars }}
+ {{- toYaml .Values.extraEnvVars | nindent 8 }}
+ {{- end }}
+ {{- if .Values.tika.enabled }}
+ - name: "CONTENT_EXTRACTION_ENGINE"
+ value: "Tika"
+ - name: "TIKA_SERVER_URL"
+ value: http://{{ .Chart.Name }}-tika:9998
+ {{- end }}
+ {{- if .Values.websocket.enabled }}
+ - name: "ENABLE_WEBSOCKET_SUPPORT"
+ value: "True"
+ - name: "WEBSOCKET_MANAGER"
+ value: {{ .Values.websocket.manager | default "redis" | quote }}
+ - name: "WEBSOCKET_REDIS_URL"
+ value: {{ .Values.websocket.url | quote }}
+ {{- end }}
+ tty: true
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.affinity }}
+ affinity:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.topologySpreadConstraints }}
+ topologySpreadConstraints:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ volumes:
+ {{- if and .Values.persistence.enabled .Values.persistence.existingClaim }}
+ - name: data
+ persistentVolumeClaim:
+ claimName: {{ .Values.persistence.existingClaim }}
+ {{- else if not .Values.persistence.enabled }}
+ - name: data
+ emptyDir: {}
+ {{- else if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }}
+ - name: data
+ persistentVolumeClaim:
+ claimName: {{ include "open-webui.name" . }}
+ {{- end }}
+ {{- with .Values.volumes }}
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
diff --git a/charts/open-webui/values.yaml b/charts/open-webui/values.yaml
new file mode 100644
index 0000000..77bc2e6
--- /dev/null
+++ b/charts/open-webui/values.yaml
@@ -0,0 +1,276 @@
+nameOverride: ""
+namespaceOverride: ""
+
+ollama:
+ # -- Automatically install Ollama Helm chart from https://otwld.github.io/ollama-helm/. Use [Helm Values](https://github.com/otwld/ollama-helm/#helm-values) to configure
+ enabled: true
+ # -- If enabling embedded Ollama, update fullnameOverride to your desired Ollama name value, or else it will use the default ollama.name value from the Ollama chart
+ fullnameOverride: "open-webui-ollama"
+ # -- Example Ollama configuration with nvidia GPU enabled, automatically downloading a model, and deploying a PVC for model persistence
+ # ollama:
+ # gpu:
+ # enabled: true
+ # type: 'nvidia'
+ # number: 1
+ # models:
+ # - llama3
+ # runtimeClassName: nvidia
+ # persistentVolume:
+ # enabled: true
+ # volumeName: "example-pre-existing-pv-created-by-smb-csi"
+
+pipelines:
+ # -- Automatically install Pipelines chart to extend Open WebUI functionality using Pipelines: https://github.com/open-webui/pipelines
+ enabled: true
+ # -- This section can be used to pass required environment variables to your pipelines (e.g. Langfuse hostname)
+ extraEnvVars: []
+
+tika:
+ # -- Automatically install Apache Tika to extend Open WebUI
+ enabled: false
+
+# -- A list of Ollama API endpoints. These can be added in lieu of automatically installing the Ollama Helm chart, or in addition to it.
+ollamaUrls: []
+
+websocket:
+ # -- Enables websocket support in Open WebUI with env `ENABLE_WEBSOCKET_SUPPORT`
+ enabled: false
+ # -- Specifies the websocket manager to use with env `WEBSOCKET_MANAGER`: redis (default)
+ manager: redis
+ # -- Specifies the URL of the Redis instance for websocket communication. Template with `redis://[: