mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2024-11-15 04:00:11 +01:00
Merge pull request #557 from drivard/main
Removed helm chart directory. It is moved to its own repository. Upda…
This commit is contained in:
commit
c6be02a0c2
12
README.md
12
README.md
@ -225,20 +225,24 @@ You can pass application arguments directly to Gunicorn via:
|
|||||||
gunicorn --bind 0.0.0.0:5000 'wsgi:app(api_keys=True)'
|
gunicorn --bind 0.0.0.0:5000 'wsgi:app(api_keys=True)'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run with Kubernetes
|
## Kubernetes Deployment
|
||||||
|
|
||||||
See [Medium article by JM Robles](https://jmrobles.medium.com/libretranslate-your-own-translation-service-on-kubernetes-b46c3e1af630) and the improved [k8s.yaml](https://github.com/LibreTranslate/LibreTranslate/blob/main/k8s.yaml) by @rasos.
|
See [Medium article by JM Robles](https://jmrobles.medium.com/libretranslate-your-own-translation-service-on-kubernetes-b46c3e1af630) and the improved [k8s.yaml](https://github.com/LibreTranslate/LibreTranslate/blob/main/k8s.yaml) by @rasos.
|
||||||
|
|
||||||
|
|
||||||
### Helm Chart
|
### Helm Chart
|
||||||
|
|
||||||
Based on @rasos work you can now install LibreTranslate on Kubernetes using Helm.
|
Based on @rasos work you can now install LibreTranslate on Kubernetes using Helm.
|
||||||
A Helm chart is available in the [chart](chart) directory where you can read the [README](chart/README.md) file for more details.
|
|
||||||
|
A Helm chart is now available in the [helm-chart](https://github.com/LibreTranslate/helm-chart/) repository where you can find more details.
|
||||||
|
|
||||||
You can quickly install LibreTranslate on Kubernetes using Helm with the following command:
|
You can quickly install LibreTranslate on Kubernetes using Helm with the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
helm install libretranslate ./chart --namespace libretranslate --create-namespace
|
helm repo add libretranslate https://libretranslate.github.io/helm-chart/
|
||||||
|
helm repo update
|
||||||
|
helm search repo libretranslate
|
||||||
|
|
||||||
|
helm install libretranslate libretranslate/libretranslate --namespace libretranslate --create-namespace
|
||||||
```
|
```
|
||||||
|
|
||||||
## Manage API Keys
|
## Manage API Keys
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
apiVersion: v2
|
|
||||||
name: libretranslate
|
|
||||||
description: A Helm chart for Kubernetes to deploy LibreTranslate API
|
|
||||||
version: 0.1.0
|
|
@ -1,58 +0,0 @@
|
|||||||
# LibreTranslate Helm Chart
|
|
||||||
|
|
||||||
This Helm chart deploys a LibreTranslate instance on a Kubernetes cluster using the Helm package manager.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Kubernetes 1.12+
|
|
||||||
- Helm 3.0+
|
|
||||||
|
|
||||||
## Installing the Chart
|
|
||||||
|
|
||||||
To install the chart with the release name `libretranslate`:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm install libretranslate ./chart --namespace libretranslate --create-namespace
|
|
||||||
```
|
|
||||||
|
|
||||||
This command deploys LibreTranslate on the Kubernetes cluster with the default configuration. The [values.yaml](values.yaml) file lists the parameters that can be configured during installation.
|
|
||||||
|
|
||||||
> **Tip**: List all releases using `helm list`
|
|
||||||
|
|
||||||
## Uninstalling the Chart
|
|
||||||
|
|
||||||
To uninstall/delete the `libretranslate` deployment:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm delete libretranslate
|
|
||||||
```
|
|
||||||
|
|
||||||
This command removes all the Kubernetes components associated with the chart and deletes the release.
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
See [values.yaml](values.yaml) for the full list of parameters that can be configured. You can specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm install libretranslate ./chart --namespace libretranslate --create-namespace --set service.port=8080
|
|
||||||
```
|
|
||||||
|
|
||||||
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm install libretranslate ./chart --namespace libretranslate --create-namespace -f values.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
## Upgrade
|
|
||||||
|
|
||||||
Run the following command to upgrade your LibreTranslate installation. This command will use the Helm chart in the ./chart directory, apply the custom values from values.yaml, and deploy the upgrade to the `libretranslate` namespace:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
helm upgrade --install libretranslate ./chart --namespace libretranslate -f values.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Tip**: You can use the default [values.yaml](values.yaml)
|
|
||||||
|
|
||||||
# References
|
|
||||||
- [https://jmrobles.medium.com/libretranslate-your-own-translation-service-on-kubernetes-b46c3e1af630](https://jmrobles.medium.com/libretranslate-your-own-translation-service-on-kubernetes-b46c3e1af630)
|
|
||||||
- [https://github.com/LibreTranslate/LibreTranslate](https://github.com/LibreTranslate/LibreTranslate)
|
|
@ -1,45 +0,0 @@
|
|||||||
1. Get the application URL by running these commands:
|
|
||||||
{{- if .Values.ingress.enabled }}
|
|
||||||
http{{ if .Values.ingress.tls }}s{{ end }}://{{ index .Values.ingress.hosts 0 "host" }}{{ index .Values.ingress.hosts 0 "paths" 0 "path" }}
|
|
||||||
{{- if .name }}
|
|
||||||
- http{{ if .Values.ingress.tls }}s{{ end }}://{{ .name }}{{ .path }}
|
|
||||||
{{- end }}
|
|
||||||
{{- else if contains "NodePort" .Values.service.type }}
|
|
||||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "libretranslate.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 svc -w {{ include "libretranslate.fullname" . }}'
|
|
||||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "libretranslate.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 "libretranslate.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
|
||||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
|
||||||
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:{{ .Values.service.port }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
2. Get your admin username and password:
|
|
||||||
|
|
||||||
USER=$(kubectl get secret {{ include "libretranslate.fullname" . }}-auth -o jsonpath="{.data.username}" | base64 --decode)
|
|
||||||
PASSWORD=$(kubectl get secret {{ include "libretranslate.fullname" . }}-auth -o jsonpath="{.data.password}" | base64 --decode)
|
|
||||||
|
|
||||||
echo "Username: $USER"
|
|
||||||
echo "Password: $PASSWORD"
|
|
||||||
|
|
||||||
3. Manage your LibreTranslate API keys:
|
|
||||||
|
|
||||||
If you setted `--api-keys true` to use the api keys in the StatefulSet, you can manage them with the following commands:
|
|
||||||
|
|
||||||
# this will add an api key with a limit of 120 requests per minute
|
|
||||||
kubectl exec -it {{ include "libretranslate.fullname" . }}-0 -c {{ include "libretranslate.fullname" . }} -- /bin/bash -c "source ./venv/bin/activate && ltmanage keys add --key req-limit-120 120"
|
|
||||||
|
|
||||||
# returns a list of all api keys
|
|
||||||
kubectl exec -it {{ include "libretranslate.fullname" . }}-0 -c {{ include "libretranslate.fullname" . }} -- /bin/bash -c "source ./venv/bin/activate && ltmanage keys"
|
|
||||||
|
|
||||||
# remove an api key
|
|
||||||
kubectl exec -it {{ include "libretranslate.fullname" . }}-0 -c {{ include "libretranslate.fullname" . }} -- /bin/bash -c "source ./venv/bin/activate && ltmanage keys remove req-limit-120"
|
|
||||||
|
|
||||||
*** Be aware that the api keys are stored in a sqlite database in the pod. If you scale the pod to multiple replicas, the api keys will not be synced between the pods. You can use a shared storage to sync the api keys between the pods. For example, you can use a NFS storage class with a ReadWriteMany access mode to store the api keys in a shared perspective. ***
|
|
||||||
|
|
||||||
```
|
|
@ -1,51 +0,0 @@
|
|||||||
{{/* vim: set filetype=mustache: */}}
|
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
*/}}
|
|
||||||
{{- define "libretranslate.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).
|
|
||||||
*/}}
|
|
||||||
{{- define "libretranslate.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 "libretranslate.chart" -}}
|
|
||||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Common labels
|
|
||||||
*/}}
|
|
||||||
{{- define "libretranslate.labels" -}}
|
|
||||||
helm.sh/chart: {{ include "libretranslate.chart" . }}
|
|
||||||
{{ include "libretranslate.selectorLabels" . }}
|
|
||||||
{{- if .Chart.AppVersion }}
|
|
||||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
||||||
{{- end }}
|
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Selector labels
|
|
||||||
*/}}
|
|
||||||
{{- define "libretranslate.selectorLabels" -}}
|
|
||||||
app.kubernetes.io/name: {{ include "libretranslate.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
{{- end }}
|
|
@ -1,39 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: libretranslate-config
|
|
||||||
data:
|
|
||||||
host: {{ .Values.appConfig.host | squote }}
|
|
||||||
port: {{ .Values.appConfig.port | squote }}
|
|
||||||
charLimit: {{ .Values.appConfig.charLimit | squote }}
|
|
||||||
reqLimit: {{ .Values.appConfig.reqLimit | squote }}
|
|
||||||
reqLimitStorage: {{ .Values.appConfig.reqLimitStorage | squote }}
|
|
||||||
batchLimit: {{ .Values.appConfig.batchLimit | squote }}
|
|
||||||
gaId: {{ .Values.appConfig.gaId | squote }}
|
|
||||||
frontendLanguageSource: {{ .Values.appConfig.frontendLanguageSource | squote }}
|
|
||||||
frontendLanguageTarget: {{ .Values.appConfig.frontendLanguageTarget | squote }}
|
|
||||||
frontendTimeout: {{ .Values.appConfig.frontendTimeout | squote }}
|
|
||||||
apiKeysDbPath: {{ .Values.appConfig.apiKeysDbPath | squote }}
|
|
||||||
apiKeysRemote: {{ .Values.appConfig.apiKeysRemote | squote }}
|
|
||||||
getApiKeyLink: {{ .Values.appConfig.getApiKeyLink | squote }}
|
|
||||||
sharedStorage: {{ .Values.appConfig.sharedStorage | squote }}
|
|
||||||
loadOnly: {{ .Values.appConfig.loadOnly | squote }}
|
|
||||||
threads: {{ .Values.appConfig.threads | squote }}
|
|
||||||
metricsAuthToken: {{ .Values.appConfig.metricsAuthToken | squote }}
|
|
||||||
urlPrefix: {{ .Values.appConfig.urlPrefix | squote }}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
data:
|
|
||||||
debug: {{ .Values.appSettings.debug | squote }}
|
|
||||||
ssl: {{ .Values.appSettings.ssl | squote }}
|
|
||||||
apiKeys: {{ .Values.appSettings.apiKeys | squote }}
|
|
||||||
requireApiKeyOrigin: {{ .Values.appSettings.requireApiKeyOrigin | squote }}
|
|
||||||
requireApiKeySecret: {{ .Values.appSettings.requireApiKeySecret | squote }}
|
|
||||||
suggestions: {{ .Values.appSettings.suggestions | squote }}
|
|
||||||
disableFilesTranslation: {{ .Values.appSettings.disableFilesTranslation | squote }}
|
|
||||||
disableWebUi: {{ .Values.appSettings.disableWebUi | squote }}
|
|
||||||
updateModels: {{ .Values.appSettings.updateModels | squote }}
|
|
||||||
metrics: {{ .Values.appSettings.metrics | squote }}
|
|
@ -1,40 +0,0 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: {{ include "libretranslate.fullname" . }}
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.labels" . | nindent 4 }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml .Values.ingress.annotations | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
{{- if .Values.ingress.className }}
|
|
||||||
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:
|
|
||||||
{{- $fullName := include "libretranslate.fullname" $ }}
|
|
||||||
{{- range .paths }}
|
|
||||||
- path: {{ .path }}
|
|
||||||
pathType: {{ .pathType }}
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: {{ include "libretranslate.fullname" $ }}
|
|
||||||
port:
|
|
||||||
number: {{ $.Values.service.port }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
@ -1,36 +0,0 @@
|
|||||||
{{- if and .Values.persistence.enabled (eq .Values.persistence.db.accessMode "ReadWriteMany") }}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: db-volume
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: {{ include "libretranslate.name" . }}-pv
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- {{ .Values.persistence.db.accessMode }}
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: {{ .Values.persistence.db.size }}
|
|
||||||
{{- if .Values.persistence.db.storageClass }}
|
|
||||||
storageClassName: {{ .Values.persistence.db.storageClass | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.persistence.enabled (eq .Values.persistence.models.accessMode "ReadWriteMany") }}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: models-volume
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: {{ include "libretranslate.name" . }}-pvc
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- {{ .Values.persistence.models.accessMode }}
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: {{ .Values.persistence.models.size }}
|
|
||||||
{{- if .Values.persistence.models.storageClass }}
|
|
||||||
storageClassName: {{ .Values.persistence.models.storageClass | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
@ -1,9 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: {{ include "libretranslate.fullname" . }}-auth
|
|
||||||
type: Opaque
|
|
||||||
data:
|
|
||||||
auth: {{ .Values.adminUser.auth | quote }}
|
|
||||||
username: {{ .Values.adminUser.name | quote }}
|
|
||||||
password: {{ .Values.adminUser.password | quote }}
|
|
@ -1,15 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ include "libretranslate.fullname" . }}
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
type: {{ .Values.service.type }}
|
|
||||||
ports:
|
|
||||||
- port: {{ .Values.service.port }}
|
|
||||||
targetPort: http
|
|
||||||
protocol: TCP
|
|
||||||
name: http
|
|
||||||
selector:
|
|
||||||
{{- include "libretranslate.selectorLabels" . | nindent 4 }}
|
|
@ -1,344 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: StatefulSet
|
|
||||||
metadata:
|
|
||||||
name: {{ include "libretranslate.fullname" . }}
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.labels" . | nindent 4 }}
|
|
||||||
{{- if .Values.annotations }}
|
|
||||||
annotations:
|
|
||||||
{{- toYaml .Values.annotations | nindent 4 }}
|
|
||||||
{{- end }}
|
|
||||||
spec:
|
|
||||||
replicas: {{ .Values.replicaCount }}
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
{{- include "libretranslate.selectorLabels" . | nindent 6 }}
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
{{- if .Values.podAnnotations }}
|
|
||||||
{{- toYaml .Values.podAnnotations | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
|
||||||
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.selectorLabels" . | nindent 8 }}
|
|
||||||
spec:
|
|
||||||
{{- if .Values.imagePullSecrets }}
|
|
||||||
imagePullSecrets:
|
|
||||||
{{ toYaml .Values.imagePullSecrets | indent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.securityContext }}
|
|
||||||
# forces the mount of the volumes to be mounted as libretranslate user and group
|
|
||||||
# and set permissions to libretranslate:libretranslate
|
|
||||||
securityContext:
|
|
||||||
{{- toYaml .Values.securityContext | nindent 8 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.persistence.enabled }}
|
|
||||||
initContainers:
|
|
||||||
- name: volume-permissions-and-pre-install-models
|
|
||||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
|
||||||
command:
|
|
||||||
- /bin/bash
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
mkdir -p /home/libretranslate/.local/share/argos-translate/packages
|
|
||||||
chown -R 1032:1032 /home/libretranslate/.local /app/db
|
|
||||||
|
|
||||||
if [ ! "$(ls -A /home/libretranslate/.local/share/argos-translate/packages)" ]; then
|
|
||||||
echo "Installing models... this can take quite a while depending on your internet connection."
|
|
||||||
/app/venv/bin/python /app/scripts/install_models.py --load_only_lang_codes {{ .Values.appConfig.loadOnly | quote }}
|
|
||||||
else
|
|
||||||
echo "The models directory is not empty, skipping model installation."
|
|
||||||
fi
|
|
||||||
volumeMounts:
|
|
||||||
- name: models-volume
|
|
||||||
mountPath: /home/libretranslate/.local/share/argos-translate
|
|
||||||
- name: db-volume
|
|
||||||
mountPath: {{ .Values.appConfig.apiKeysDbPathMount }}
|
|
||||||
{{- if .Values.initContainerSecurityContext }}
|
|
||||||
securityContext:
|
|
||||||
# forces the mount of the volumes to be mounted as libretranslate user and group
|
|
||||||
# and set permissions to libretranslate:libretranslate
|
|
||||||
{{- toYaml .Values.initContainerSecurityContext | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
containers:
|
|
||||||
- name: {{ .Chart.Name }}
|
|
||||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
|
||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
containerPort: {{ .Values.service.port }}
|
|
||||||
protocol: TCP
|
|
||||||
resources:
|
|
||||||
{{- toYaml .Values.resources | nindent 12 }}
|
|
||||||
securityContext:
|
|
||||||
{{- if .Values.podSecurityContext }}
|
|
||||||
# forces the mount of the volumes to be mounted as libretranslate user and group
|
|
||||||
# and set permissions to libretranslate:libretranslate
|
|
||||||
{{- toYaml .Values.podSecurityContext | nindent 12 }}
|
|
||||||
{{- end }}
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
readinessProbe:
|
|
||||||
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
|
||||||
livenessProbe:
|
|
||||||
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
|
||||||
env:
|
|
||||||
{{- if and (.Values.appSettings.debug) (ne .Values.appSettings.debug "") }}
|
|
||||||
- name: LT_DEBUG
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: debug
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.ssl) (ne .Values.appSettings.ssl "") }}
|
|
||||||
- name: LT_SSL
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: ssl
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.apiKeys) (ne .Values.appSettings.apiKeys "") }}
|
|
||||||
- name: LT_API_KEYS
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: apiKeys
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.requireApiKeyOrigin) (ne .Values.appSettings.requireApiKeyOrigin "") }}
|
|
||||||
- name: LT_REQUIRE_API_KEY_ORIGIN
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: requireApiKeyOrigin
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.requireApiKeySecret) (ne .Values.appSettings.requireApiKeySecret "") }}
|
|
||||||
- name: LT_REQUIRE_API_KEY_SECRET
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: requireApiKeySecret
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.suggestions) (ne .Values.appSettings.suggestions "") }}
|
|
||||||
- name: LT_SUGGESTIONS
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: suggestions
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.disableFilesTranslation) (ne .Values.appSettings.disableFilesTranslation "") }}
|
|
||||||
- name: LT_DISABLE_FILES_TRANSLATION
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: disableFilesTranslation
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.disableWebUi) (ne .Values.appSettings.disableWebUi "") }}
|
|
||||||
- name: LT_DISABLE_WEB_UI
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: disableWebUi
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.updateModels) (ne .Values.appSettings.updateModels "") }}
|
|
||||||
- name: LT_UPDATE_MODELS
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: updateModels
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.metrics) (ne .Values.appSettings.metrics "") }}
|
|
||||||
- name: LT_METRICS
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-appsettings
|
|
||||||
key: metrics
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.host) (ne .Values.appConfig.host "") }}
|
|
||||||
- name: LT_HOST
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: host
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.port) (ne .Values.appSettings.port "") }}
|
|
||||||
- name: LT_PORT
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: port
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.charLimit) (ne .Values.appConfig.charLimit "") }}
|
|
||||||
- name: LT_CHAR_LIMIT
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: charLimit
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.reqLimit) (ne .Values.appConfig.reqLimit "") }}
|
|
||||||
- name: LT_REQ_LIMIT
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: reqLimit
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.reqLimitStorage) (ne .Values.appConfig.reqLimitStorage "") }}
|
|
||||||
- name: LT_REQ_LIMIT_STORAGE
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: reqLimitStorage
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.batchLimit) (ne .Values.appConfig.batchLimit "") }}
|
|
||||||
- name: LT_BATCH_LIMIT
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: batchLimit
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.gaId) (ne .Values.appConfig.gaId "") }}
|
|
||||||
- name: LT_GA_ID
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: gaId
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.frontendLanguageSource) (ne .Values.appConfig.frontendLanguageSource "") }}
|
|
||||||
- name: LT_FRONTEND_LANGUAGE_SOURCE
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: frontendLanguageSource
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.frontendLanguageTarget) (ne .Values.appConfig.frontendLanguageTarget "") }}
|
|
||||||
- name: LT_FRONTEND_LANGUAGE_TARGET
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: frontendLanguageTarget
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.frontendTimeout) (ne .Values.appConfig.frontendTimeout "") }}
|
|
||||||
- name: LT_FRONTEND_TIMEOUT
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: frontendTimeout
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.apiKeysDbPath) (ne .Values.appSettings.apiKeysDbPath "") }}
|
|
||||||
- name: LT_API_KEYS_DB_PATH
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: apiKeysDbPath
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.apiKeysRemote) (ne .Values.appSettings.apiKeysRemote "") }}
|
|
||||||
- name: LT_API_KEYS_REMOTE
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: apiKeysRemote
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.getApiKeyLink) (ne .Values.appConfig.getApiKeyLink "") }}
|
|
||||||
- name: LT_GET_API_KEY_LINK
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: getApiKeyLink
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.sharedStorage) (ne .Values.appConfig.sharedStorage "") }}
|
|
||||||
- name: LT_SHARED_STORAGE
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: sharedStorage
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.loadOnly) (ne .Values.appConfig.loadOnly "") }}
|
|
||||||
- name: LT_LOAD_ONLY
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: loadOnly
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.threads) (ne .Values.appConfig.threads "") }}
|
|
||||||
- name: LT_THREADS
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: threads
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appSettings.metricsAuthToken) (ne .Values.appSettings.metricsAuthToken "") }}
|
|
||||||
- name: LT_METRICS_AUTH_TOKEN
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: metricsAuthToken
|
|
||||||
{{- end }}
|
|
||||||
{{- if and (.Values.appConfig.urlPrefix) (ne .Values.appConfig.urlPrefix "") }}
|
|
||||||
- name: LT_URL_PREFIX
|
|
||||||
valueFrom:
|
|
||||||
configMapKeyRef:
|
|
||||||
name: libretranslate-config
|
|
||||||
key: urlPrefix
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.persistence.enabled }}
|
|
||||||
volumeMounts:
|
|
||||||
- name: db-volume
|
|
||||||
mountPath: {{ .Values.appConfig.apiKeysDbPathMount }}
|
|
||||||
- name: models-volume
|
|
||||||
mountPath: /home/libretranslate/.local/share/argos-translate
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.persistence.enabled (or (eq .Values.persistence.models.accessMode "ReadWriteMany") (eq .Values.persistence.db.accessMode "ReadWriteMany")) }}
|
|
||||||
volumes:
|
|
||||||
{{- if eq .Values.persistence.db.accessMode "ReadWriteMany" }}
|
|
||||||
- name: db-volume
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: db-volume
|
|
||||||
{{- end }}
|
|
||||||
{{- if eq .Values.persistence.models.accessMode "ReadWriteMany" }}
|
|
||||||
- name: models-volume
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: models-volume
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if .Values.tolerations }}
|
|
||||||
tolerations:
|
|
||||||
{{- toYaml .Values.tolerations | nindent 6 }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .Values.persistence.enabled (or (eq .Values.persistence.models.accessMode "ReadWriteOnce") (eq .Values.persistence.db.accessMode "ReadWriteOnce")) }}
|
|
||||||
# still in beta, but this will allow us to delete the volumes when the statefulset is scaled down
|
|
||||||
persistentVolumeClaimRetentionPolicy:
|
|
||||||
whenDeleted: Retain
|
|
||||||
whenScaled: Delete
|
|
||||||
volumeClaimTemplates:
|
|
||||||
{{- if eq .Values.persistence.models.accessMode "ReadWriteOnce" }}
|
|
||||||
- metadata:
|
|
||||||
name: models-volume
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.labels" . | nindent 8 }}
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- {{ .Values.persistence.models.accessMode }}
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: {{ .Values.persistence.models.size }}
|
|
||||||
{{- if .Values.persistence.models.storageClass }}
|
|
||||||
storageClassName: {{ .Values.persistence.models.storageClass | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if eq .Values.persistence.db.accessMode "ReadWriteOnce" }}
|
|
||||||
- metadata:
|
|
||||||
name: db-volume
|
|
||||||
labels:
|
|
||||||
{{- include "libretranslate.labels" . | nindent 8 }}
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- {{ .Values.persistence.db.accessMode }}
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: {{ .Values.persistence.db.size }}
|
|
||||||
{{- if .Values.persistence.db.storageClass }}
|
|
||||||
storageClassName: {{ .Values.persistence.db.storageClass | quote }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
@ -1,164 +0,0 @@
|
|||||||
# values.yaml
|
|
||||||
|
|
||||||
# Number of replicas
|
|
||||||
replicaCount: 1
|
|
||||||
|
|
||||||
# Extra annotations for pods
|
|
||||||
podAnnotations: {}
|
|
||||||
|
|
||||||
# Extra annotations
|
|
||||||
annotations: {}
|
|
||||||
|
|
||||||
# Extra tolerations for pods
|
|
||||||
tolerations: []
|
|
||||||
|
|
||||||
# Chart name override
|
|
||||||
nameOverride: ""
|
|
||||||
|
|
||||||
# Full name of the deployment to override the default one
|
|
||||||
fullnameOverride: ""
|
|
||||||
|
|
||||||
# Image settings
|
|
||||||
image:
|
|
||||||
repository: libretranslate/libretranslate
|
|
||||||
pullPolicy: Always
|
|
||||||
tag: "latest"
|
|
||||||
# Using a Private Registry
|
|
||||||
# If you want to use a custom image from a private registry, you'll need to create an image pull secret with the registry's credentials:
|
|
||||||
# kubectl create secret docker-registry my-registry-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
|
|
||||||
# imagePullSecrets:
|
|
||||||
# - name: my-registry-secret
|
|
||||||
imagePullSecrets: []
|
|
||||||
|
|
||||||
# Service settings
|
|
||||||
service:
|
|
||||||
type: ClusterIP
|
|
||||||
port: 5000
|
|
||||||
|
|
||||||
# Ingress settings
|
|
||||||
ingress:
|
|
||||||
enabled: false
|
|
||||||
className: "" # set this to the name of the ingress controller class to use like nginx
|
|
||||||
annotations:
|
|
||||||
# cert-manager.io/cluster-issuer: "letsencrypt-prod"
|
|
||||||
nginx.ingress.kubernetes.io/proxy-body-size: 10m
|
|
||||||
# Check for the adminUser key below.
|
|
||||||
# This will enable basic auth for the whole site.
|
|
||||||
# nginx.ingress.kubernetes.io/auth-type: basic
|
|
||||||
# nginx.ingress.kubernetes.io/auth-secret: libretranslate-auth
|
|
||||||
# nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required'
|
|
||||||
hosts:
|
|
||||||
- host: translate.example.com
|
|
||||||
paths:
|
|
||||||
- path: /
|
|
||||||
pathType: Prefix
|
|
||||||
# tls:
|
|
||||||
# - secretName: libretranslate-secret-tls
|
|
||||||
# hosts:
|
|
||||||
# - translate.example.com
|
|
||||||
|
|
||||||
# Security Context
|
|
||||||
securityContext:
|
|
||||||
fsGroup: 1032
|
|
||||||
|
|
||||||
# Security Context for init container
|
|
||||||
initContainerSecurityContext:
|
|
||||||
runAsUser: 0
|
|
||||||
runAsGroup: 0
|
|
||||||
|
|
||||||
# Pod Security Context
|
|
||||||
podSecurityContext:
|
|
||||||
runAsUser: 1032
|
|
||||||
runAsGroup: 1032
|
|
||||||
|
|
||||||
# Persistent settings
|
|
||||||
# if you don't want to download a copy of the models per pod, you can use a shared storage like an nfs storage class
|
|
||||||
# and set it to ReadWriteMany. this way if you scale the pods later on, they will all use the same models and won't
|
|
||||||
# duplicate the space and download requests.
|
|
||||||
persistence:
|
|
||||||
enabled: false
|
|
||||||
db:
|
|
||||||
storageClass: ""
|
|
||||||
accessMode: "ReadWriteOnce"
|
|
||||||
size: "1Gi"
|
|
||||||
models:
|
|
||||||
storageClass: ""
|
|
||||||
accessMode: "ReadWriteOnce"
|
|
||||||
size: "10Gi" # as of August 2023, the models are about 6.6GB in size for all languages
|
|
||||||
|
|
||||||
|
|
||||||
# Resource limits
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: 1
|
|
||||||
memory: 2Gi
|
|
||||||
requests:
|
|
||||||
cpu: 500m
|
|
||||||
memory: 1Gi
|
|
||||||
|
|
||||||
# Readiness probe for kubernetes
|
|
||||||
readinessProbe:
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- /app/venv/bin/python
|
|
||||||
- /app/scripts/healthcheck.py
|
|
||||||
initialDelaySeconds: 10
|
|
||||||
periodSeconds: 5
|
|
||||||
|
|
||||||
# Liveness probe for kubernetes
|
|
||||||
livenessProbe:
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- /app/venv/bin/python
|
|
||||||
- scripts/healthcheck.py
|
|
||||||
initialDelaySeconds: 10
|
|
||||||
periodSeconds: 5
|
|
||||||
|
|
||||||
# Auth secret for basic authentication
|
|
||||||
# generate base64-user-password-pair with:
|
|
||||||
# htpasswd -nb <username> <password> | base64
|
|
||||||
#
|
|
||||||
# e.g.:
|
|
||||||
#
|
|
||||||
# htpasswd -nb admin mySecretPassword | base64
|
|
||||||
# This is used by the nginx ingress controller to enable basic auth for the whole site.
|
|
||||||
# It will create a secret with the name libretranslate-auth.
|
|
||||||
adminUser:
|
|
||||||
name: "YWRtaW4K" # copy the username in base64 as a reference
|
|
||||||
auth: "YWRtaW46JGFwcjEkYlpydmYvUFYkSHBHSlhqZU1EN0ZON2kyYndsMVRNMQoK" # copy the output from the htpasswd command here as a reference
|
|
||||||
password: "bXlTZWNyZXRQYXNzd29yZAo=" # copy the password as base64 for the admin user here as a reference
|
|
||||||
|
|
||||||
# Settings / Flags
|
|
||||||
appSettings:
|
|
||||||
debug: "false" # Enable debug environment (Default: Disabled)
|
|
||||||
ssl: "false" # Enable SSL (Default: Disabled)
|
|
||||||
apiKeys: "false" # Enable API keys database for per-client rate limits when --req-limit is reached (Default: Don't use API keys)
|
|
||||||
requireApiKeyOrigin: "" # Require use of an API key for programmatic access to the API, unless the request origin matches this domain (Default: No restrictions on domain origin)
|
|
||||||
requireApiKeySecret: "" # Require use of an API key for programmatic access to the API, unless the client also sends a secret match (Default: No secrets required)
|
|
||||||
suggestions: "false" # Allow user suggestions (Default: Disabled)
|
|
||||||
disableFilesTranslation: "false" # Disable files translation (Default: File translation allowed)
|
|
||||||
disableWebUi: "false" # Disable web ui (Default: Web Ui enabled)
|
|
||||||
updateModels: "false" # Update language models at startup (Default: Only on if no models found)
|
|
||||||
metrics: "false" # Enable the /metrics endpoint for exporting Prometheus usage metrics (Default: Disabled)
|
|
||||||
|
|
||||||
# Configuration Parameters
|
|
||||||
appConfig:
|
|
||||||
host: "0.0.0.0" # Set host to bind the server to (Default: 127.0.0.1)
|
|
||||||
port: "5000" # Set port to bind the server to (Default: 5000)
|
|
||||||
charLimit: "null" # Set character limit (Default: No limit)
|
|
||||||
reqLimit: "null" # Set maximum number of requests per minute per client (outside of limits set by api keys) (Default: No limit)
|
|
||||||
reqLimitStorage: "memory://" # Storage URI to use for request limit data storage. See Flask Limiter (Default: memory://)
|
|
||||||
batchLimit: "null" # Set maximum number of texts to translate in a batch request (Default: No limit)
|
|
||||||
gaId: "" # Enable Google Analytics on the API client page by providing an ID (Default: Empty (no tracking))
|
|
||||||
frontendLanguageSource: "auto" # Set frontend default language - source (Default: auto)
|
|
||||||
frontendLanguageTarget: "locale" # Set frontend default language - target (Default: locale (match site's locale))
|
|
||||||
frontendTimeout: "500" # Set frontend translation timeout (Default: 500)
|
|
||||||
apiKeysDbPath: "/app/db/api_keys.db" # Use a specific path inside the container for the local database. Can be absolute or relative (Default: /app/db/api_keys.db)
|
|
||||||
apiKeysDbPathMount: "/app/db" # Use a specific path inside the container for the local database. Must be the same as apiKeysDbPath (Default: /app/db)
|
|
||||||
apiKeysRemote: "" # Use this remote endpoint to query for valid API keys instead of using the local database (Default: Empty (use local db instead))
|
|
||||||
getApiKeyLink: "" # Show a link in the UI where to direct users to get an API key (Default: Empty (no link shown on web ui))
|
|
||||||
sharedStorage: "memory://" # Shared storage URI to use for multi-process data sharing (e.g. when using gunicorn) (Default: memory://)
|
|
||||||
loadOnly: "" # Set available languages (Default: Empty (use all from argostranslate))
|
|
||||||
threads: "4" # Set number of threads (Default: 4)
|
|
||||||
metricsAuthToken: "" # Protect the /metrics endpoint by allowing only clients that have a valid Authorization Bearer token (Default: Empty (no auth required))
|
|
||||||
urlPrefix: "" # Add prefix to URL: example.com:5000/url-prefix/ (Default: /)
|
|
Loading…
Reference in New Issue
Block a user