diff --git a/charts/libretranslate/Chart.yaml b/charts/libretranslate/Chart.yaml index 2fd0e4c..c4b4d6b 100644 --- a/charts/libretranslate/Chart.yaml +++ b/charts/libretranslate/Chart.yaml @@ -6,4 +6,4 @@ sources: - https://github.com/LibreTranslate/LibreTranslate/ - https://github.com/LibreTranslate/helm-chart/ icon: https://libretranslate.com/static/favicon.ico -version: 0.4.1 +version: 0.4.2 diff --git a/charts/libretranslate/README.md b/charts/libretranslate/README.md index 70a7bb1..6649391 100644 --- a/charts/libretranslate/README.md +++ b/charts/libretranslate/README.md @@ -1,58 +1,95 @@ -# 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) \ No newline at end of file +# libretranslate + +![Version: 0.4.1](https://img.shields.io/badge/Version-0.4.1-informational?style=flat-square) + +A Helm chart for Kubernetes to deploy LibreTranslate API + +**Homepage:** + +## Source Code + +* +* + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| adminUser.auth | string | `"YWRtaW46JGFwcjEkYlpydmYvUFYkSHBHSlhqZU1EN0ZON2kyYndsMVRNMQoK"` | copy the output from the htpasswd command here as a reference | +| adminUser.existingSecret | string | `""` | use an existing secret for admin user | +| adminUser.name | string | `"YWRtaW4K"` | copy the username in base64 as a reference | +| adminUser.password | string | `"bXlTZWNyZXRQYXNzd29yZAo="` | copy the password as base64 for the admin user here as a reference | +| adminUser.secretKeys.auth | string | `"auth"` | | +| adminUser.secretKeys.name | string | `"name"` | | +| adminUser.secretKeys.password | string | `"password"` | | +| annotations | object | `{}` | Extra annotations | +| appConfig.apiKeysDbPath | string | `"/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) | +| appConfig.apiKeysDbPathMount | string | `"/app/db"` | Use a specific path inside the container for the local database. Must be the same as apiKeysDbPath (Default: /app/db) | +| appConfig.apiKeysRemote | string | `""` | Use this remote endpoint to query for valid API keys instead of using the local database (Default: Empty (use local db instead)) | +| appConfig.batchLimit | string | `"null"` | Set maximum number of texts to translate in a batch request (Default: No limit) | +| appConfig.charLimit | string | `"null"` | Set character limit (Default: No limit) | +| appConfig.frontendLanguageSource | string | `"auto"` | Set frontend default language - source (Default: auto) | +| appConfig.frontendLanguageTarget | string | `"locale"` | Set frontend default language - target (Default: locale (match site's locale)) | +| appConfig.frontendTimeout | string | `"500"` | Set frontend translation timeout (Default: 500) | +| appConfig.gaId | string | `""` | Enable Google Analytics on the API client page by providing an ID (Default: Empty (no tracking)) | +| appConfig.getApiKeyLink | string | `""` | Show a link in the UI where to direct users to get an API key (Default: Empty (no link shown on web ui)) | +| appConfig.host | string | `"0.0.0.0"` | Set host to bind the server to (Default: 127.0.0.1) | +| appConfig.loadOnly | string | `""` | Set available languages (Default: Empty (use all from argostranslate)) | +| appConfig.metricsAuthToken | string | `""` | Protect the /metrics endpoint by allowing only clients that have a valid Authorization Bearer token (Default: Empty (no auth required)) | +| appConfig.port | string | `"5000"` | Set port to bind the server to (Default: 5000) | +| appConfig.reqLimit | string | `"null"` | Set maximum number of requests per minute per client (outside of limits set by api keys) (Default: No limit) | +| appConfig.reqLimitStorage | string | `"memory://"` | Storage URI to use for request limit data storage. See Flask Limiter (Default: memory://) | +| appConfig.sharedStorage | string | `"memory://"` | Shared storage URI to use for multi-process data sharing (e.g. when using gunicorn) (Default: memory://) | +| appConfig.threads | string | `"4"` | Set number of threads (Default: 4) | +| appConfig.urlPrefix | string | `""` | Add prefix to URL: example.com:5000/url-prefix/ (Default: /) | +| appSettings.apiKeys | string | `"false"` | | +| appSettings.debug | string | `"false"` | Enable debug environment (Default: Disabled) | +| appSettings.disableFilesTranslation | string | `"false"` | Disable files translation (Default: File translation allowed) | +| appSettings.disableWebUi | string | `"false"` | Disable web ui (Default: Web Ui enabled) | +| appSettings.existingSecret | string | `""` | use an existing secret for api key origin and secret | +| appSettings.metrics | string | `"false"` | Enable the /metrics endpoint for exporting Prometheus usage metrics (Default: Disabled) | +| appSettings.requireApiKeyOrigin | string | `""` | 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) | +| appSettings.requireApiKeySecret | string | `""` | Require use of an API key for programmatic access to the API, unless the client also sends a secret match (Default: No secrets required) | +| appSettings.secretKeys.apiKeyorigin | string | `""` | | +| appSettings.secretKeys.apiKeysecret | string | `"secret"` | | +| appSettings.ssl | string | `"false"` | Enable SSL (Default: Disabled) | +| appSettings.suggestions | string | `"false"` | Allow user suggestions (Default: Disabled) | +| appSettings.updateModels | string | `"false"` | Update language models at startup (Default: Only on if no models found) | +| fullnameOverride | string | `""` | Full name of the deployment to override the default one | +| image.pullPolicy | string | `"Always"` | | +| image.repository | string | `"libretranslate/libretranslate"` | | +| image.tag | string | `"latest"` | | +| imagePullSecrets | list | `[]` | | +| ingress.annotations."nginx.ingress.kubernetes.io/proxy-body-size" | string | `"10m"` | | +| ingress.className | string | `""` | set this to the name of the ingress controller class to use like nginx | +| ingress.enabled | bool | `false` | | +| ingress.hosts[0].host | string | `"translate.example.com"` | | +| ingress.hosts[0].paths[0].path | string | `"/"` | | +| ingress.hosts[0].paths[0].pathType | string | `"Prefix"` | | +| initContainerSecurityContext.runAsGroup | int | `0` | | +| initContainerSecurityContext.runAsUser | int | `0` | | +| livenessProbe | object | `{}` | Liveness probe for kubernetes | +| nameOverride | string | `""` | Chart name override | +| persistence.db.accessMode | string | `"ReadWriteOnce"` | | +| persistence.db.size | string | `"1Gi"` | | +| persistence.db.storageClass | string | `""` | | +| persistence.enabled | bool | `false` | | +| persistence.models.accessMode | string | `"ReadWriteOnce"` | | +| persistence.models.size | string | `"10Gi"` | as of August 2023, the models are about 6.6GB in size for all languages | +| persistence.models.storageClass | string | `""` | | +| podAnnotations | object | `{}` | Extra annotations for pods | +| podSecurityContext.runAsGroup | int | `1032` | | +| podSecurityContext.runAsUser | int | `1032` | | +| readinessProbe | object | `{}` | Readiness probe for kubernetes | +| replicaCount | int | `1` | Number of replicas | +| resources.limits.cpu | int | `1` | | +| resources.limits.memory | string | `"2Gi"` | | +| resources.requests.cpu | string | `"500m"` | | +| resources.requests.memory | string | `"1Gi"` | | +| securityContext.fsGroup | int | `1032` | | +| service.port | int | `5000` | | +| service.type | string | `"ClusterIP"` | | +| tolerations | list | `[]` | Extra tolerations for pods | + +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/charts/libretranslate/values.yaml b/charts/libretranslate/values.yaml index 1351a16..54db6bd 100644 --- a/charts/libretranslate/values.yaml +++ b/charts/libretranslate/values.yaml @@ -1,21 +1,21 @@ # values.yaml -# Number of replicas +# -- Number of replicas replicaCount: 1 -# Extra annotations for pods +# -- Extra annotations for pods podAnnotations: {} -# Extra annotations +# -- Extra annotations annotations: {} -# Extra tolerations for pods +# -- Extra tolerations for pods tolerations: [] -# Chart name override +# -- Chart name override nameOverride: "" -# Full name of the deployment to override the default one +# -- Full name of the deployment to override the default one fullnameOverride: "" # Image settings @@ -38,7 +38,8 @@ service: # Ingress settings ingress: enabled: false - className: "" # set this to the name of the ingress controller class to use like nginx + # -- set this to the name of the ingress controller class to use like nginx + className: "" annotations: # cert-manager.io/cluster-issuer: "letsencrypt-prod" nginx.ingress.kubernetes.io/proxy-body-size: 10m @@ -84,7 +85,8 @@ persistence: models: storageClass: "" accessMode: "ReadWriteOnce" - size: "10Gi" # as of August 2023, the models are about 6.6GB in size for all languages + # -- as of August 2023, the models are about 6.6GB in size for all languages + size: "10Gi" # Resource limits @@ -96,7 +98,7 @@ resources: cpu: 500m memory: 1Gi -# Readiness probe for kubernetes +# -- Readiness probe for kubernetes readinessProbe: {} # exec: # command: @@ -105,7 +107,7 @@ readinessProbe: {} # initialDelaySeconds: 10 # periodSeconds: 5 -# Liveness probe for kubernetes +# -- Liveness probe for kubernetes livenessProbe: {} # exec: # command: @@ -124,10 +126,14 @@ livenessProbe: {} # 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 - existingSecret: "" # use an existing secret for admin user + # -- copy the username in base64 as a reference + name: "YWRtaW4K" + # -- copy the output from the htpasswd command here as a reference + auth: "YWRtaW46JGFwcjEkYlpydmYvUFYkSHBHSlhqZU1EN0ZON2kyYndsMVRNMQoK" + # -- copy the password as base64 for the admin user here as a reference + password: "bXlTZWNyZXRQYXNzd29yZAo=" + # -- use an existing secret for admin user + existingSecret: "" # key in existing secret secretKeys: name: "name" @@ -136,17 +142,28 @@ adminUser: # 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) - existingSecret: "" # use an existing secret for api key origin and secret + # -- Enable debug environment (Default: Disabled) + debug: "false" + # -- Enable SSL (Default: Disabled) + ssl: "false" + # -- Enable API keys database for per-client rate limits when --req-limit is reached (Default: Don't use API keys) + apiKeys: "false" + # -- 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) + requireApiKeyOrigin: "" + # -- Require use of an API key for programmatic access to the API, unless the client also sends a secret match (Default: No secrets required) + requireApiKeySecret: "" + # -- Allow user suggestions (Default: Disabled) + suggestions: "false" + # -- Disable files translation (Default: File translation allowed) + disableFilesTranslation: "false" + # -- Disable web ui (Default: Web Ui enabled) + disableWebUi: "false" + # -- Update language models at startup (Default: Only on if no models found) + updateModels: "false" + # -- Enable the /metrics endpoint for exporting Prometheus usage metrics (Default: Disabled) + metrics: "false" + # -- use an existing secret for api key origin and secret + existingSecret: "" # keys in existing secret secretKeys: apiKeyorigin: "" @@ -155,22 +172,41 @@ appSettings: # 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: /) + # -- Set host to bind the server to (Default: 127.0.0.1) + host: "0.0.0.0" + # -- Set port to bind the server to (Default: 5000) + port: "5000" + # -- Set character limit (Default: No limit) + charLimit: "null" + # -- Set maximum number of requests per minute per client (outside of limits set by api keys) (Default: No limit) + reqLimit: "null" + # -- Storage URI to use for request limit data storage. See Flask Limiter (Default: memory://) + reqLimitStorage: "memory://" + # -- Set maximum number of texts to translate in a batch request (Default: No limit) + batchLimit: "null" + # -- Enable Google Analytics on the API client page by providing an ID (Default: Empty (no tracking)) + gaId: "" + # -- Set frontend default language - source (Default: auto) + frontendLanguageSource: "auto" + # -- Set frontend default language - target (Default: locale (match site's locale)) + frontendLanguageTarget: "locale" + # -- Set frontend translation timeout (Default: 500) + frontendTimeout: "500" + # -- Use a specific path inside the container for the local database. Can be absolute or relative (Default: /app/db/api_keys.db) + apiKeysDbPath: "/app/db/api_keys.db" + # -- Use a specific path inside the container for the local database. Must be the same as apiKeysDbPath (Default: /app/db) + apiKeysDbPathMount: "/app/db" + # -- Use this remote endpoint to query for valid API keys instead of using the local database (Default: Empty (use local db instead)) + apiKeysRemote: "" + # -- Show a link in the UI where to direct users to get an API key (Default: Empty (no link shown on web ui)) + getApiKeyLink: "" + # -- Shared storage URI to use for multi-process data sharing (e.g. when using gunicorn) (Default: memory://) + sharedStorage: "memory://" + # -- Set available languages (Default: Empty (use all from argostranslate)) + loadOnly: "" + # -- Set number of threads (Default: 4) + threads: "4" + # -- Protect the /metrics endpoint by allowing only clients that have a valid Authorization Bearer token (Default: Empty (no auth required)) + metricsAuthToken: "" + # -- Add prefix to URL: example.com:5000/url-prefix/ (Default: /) + urlPrefix: ""