An open API service indexing awesome lists of open source software.

https://github.com/onlyoffice/kubernetes-docs

ONLYOFFICE Docs for Kubernetes
https://github.com/onlyoffice/kubernetes-docs

docs kubernetes onlyoffice

Last synced: 10 months ago
JSON representation

ONLYOFFICE Docs for Kubernetes

Awesome Lists containing this project

README

          

# ONLYOFFICE Docs for Kubernetes

This repository contains a set of files to deploy ONLYOFFICE Docs into a Kubernetes cluster or OpenShift cluster.

## Contents
- [Introduction](#introduction)
- [Deploy prerequisites](#deploy-prerequisites)
* [1. Add Helm repositories](#1-add-helm-repositories)
* [2. Install Persistent Storage](#2-install-persistent-storage)
* [3. Deploy RabbitMQ](#3-deploy-rabbitmq)
* [4. Deploy Redis](#4-deploy-redis)
* [5. Deploy Database](#5-deploy-database)
* [6. Deploy StatsD exporter](#6-deploy-statsd-exporter)
+ [6.1 Add Helm repositories](#61-add-helm-repositories)
+ [6.2 Installing Prometheus](#62-installing-prometheus)
+ [6.3 Installing StatsD exporter](#63-installing-statsd-exporter)
* [7. Make changes to Node-config configuration files](#7-make-changes-to-Node-config-configuration-files)
+ [7.1 Create a ConfigMap containing a json file](#71-create-a-configmap-containing-a-json-file)
+ [7.2 Specify parameters when installing ONLYOFFICE Docs](#72-specify-parameters-when-installing-onlyoffice-docs)
* [8. Add custom Fonts](#8-add-custom-fonts)
* [9. Add Plugins](#9-add-plugins)
* [10. Add custom dictionaries](#10-add-custom-dictionaries)
* [11. Change interface themes](#11-change-interface-themes)
+ [11.1 Create a ConfigMap containing a json file](#111-create-a-configmap-containing-a-json-file)
+ [11.2 Specify parameters when installing ONLYOFFICE Docs](#112-specify-parameters-when-installing-onlyoffice-docs)
* [12. Connecting Amazon S3 bucket as a cache to ONLYOFFICE Helm Docs](#12-connecting-amazon-s3-bucket-as-a-cache-to-onlyoffice-helm-docs)
- [Deploy ONLYOFFICE Docs](#deploy-onlyoffice-docs)
* [1. Deploy the ONLYOFFICE Docs license](#1-deploy-the-onlyoffice-docs-license)
+ [1.1 Create secret](#11-create-secret)
+ [1.2 Specify parameters when installing ONLYOFFICE Docs](#12-specify-parameters-when-installing-onlyoffice-docs)
* [2. Deploy ONLYOFFICE Docs](#2-deploy-onlyoffice-docs)
* [3. Uninstall ONLYOFFICE Docs](#3-uninstall-onlyoffice-docs)
* [4. Parameters](#4-parameters)
* [5. Configuration and installation details](#5-configuration-and-installation-details)
* [5.1 Example deployment (optional)](#51-example-deployment-optional)
* [5.2 Metrics deployment (optional)](#52-metrics-deployment-optional)
* [5.3 Expose ONLYOFFICE Docs](#53-expose-onlyoffice-docs)
+ [5.3.1 Expose ONLYOFFICE Docs via Service (HTTP Only)](#531-expose-onlyoffice-docs-via-service-http-only)
+ [5.3.2 Expose ONLYOFFICE Docs via Ingress](#532-expose-onlyoffice-docs-via-ingress)
+ [5.3.2.1 Installing the Kubernetes Nginx Ingress Controller](#5321-installing-the-kubernetes-nginx-ingress-controller)
+ [5.3.2.2 Expose ONLYOFFICE Docs via HTTP](#5322-expose-onlyoffice-docs-via-http)
+ [5.3.2.3 Expose ONLYOFFICE Docs via HTTPS](#5323-expose-onlyoffice-docs-via-https)
+ [5.3.2.4 Expose ONLYOFFICE Docs via HTTPS using the Let's Encrypt certificate](#5324-expose-onlyoffice-docs-via-https-using-the-lets-encrypt-certificate)
+ [5.3.2.5 Expose ONLYOFFICE Docs on a virtual path](#5325-expose-onlyoffice-docs-on-a-virtual-path)
+ [5.3.3 Expose ONLYOFFICE Docs via route in OpenShift](#533-expose-onlyoffice-docs-via-route-in-openshift)
* [6. Scale ONLYOFFICE Docs (optional)](#6-scale-onlyoffice-docs-optional)
+ [6.1 Horizontal Pod Autoscaling](#61-horizontal-pod-autoscaling)
+ [6.2 Manual scaling](#62-manual-scaling)
* [7. Update ONLYOFFICE Docs](#7-update-onlyoffice-docs)
* [8. Shutdown ONLYOFFICE Docs (optional)](#8-shutdown-onlyoffice-docs-optional)
* [9. Update ONLYOFFICE Docs license (optional)](#9-update-onlyoffice-docs-license-optional)
* [10. ONLYOFFICE Docs installation test (optional)](#10-onlyoffice-docs-installation-test-optional)
* [11. Run Jobs in a private k8s cluster (optional)](#11-run-jobs-in-a-private-k8s-cluster-optional)
* [12. Access to the info page (optional)](#12-access-to-the-info-page-optional)
- [Using Grafana to visualize metrics (optional)](#using-grafana-to-visualize-metrics-optional)
* [1. Deploy Grafana](#1-deploy-grafana)
+ [1.1 Deploy Grafana without installing ready-made dashboards](#11-deploy-grafana-without-installing-ready-made-dashboards)
+ [1.2 Deploy Grafana with the installation of ready-made dashboards](#12-deploy-grafana-with-the-installation-of-ready-made-dashboards)
* [2 Access to Grafana via Ingress](#2-access-to-grafana-via-ingress)
* [3. View gathered metrics in Grafana](#3-view-gathered-metrics-in-grafana)

## Introduction

- You must have a Kubernetes or OpenShift cluster installed. Please, checkout [the reference](https://kubernetes.io/docs/setup/) to set up Kubernetes. Please, checkout [the reference](https://docs.openshift.com/container-platform/4.7/installing/index.html) to setup OpenShift.
- You should also have a local configured copy of `kubectl`. See [this](https://kubernetes.io/docs/tasks/tools/install-kubectl/) guide how to install and configure `kubectl`.
- You should install Helm v3.7+. Please follow the instruction [here](https://helm.sh/docs/intro/install/) to install it.
- If you use OpenShift, you can use both `oc` and `kubectl` to manage deploy.
- If the installation of components external to ‘Docs’ is performed from Helm Chart in an OpenShift cluster, then it is recommended to install them from a user who has the `cluster-admin` role, in order to avoid possible problems with access rights. See [this](https://docs.openshift.com/container-platform/4.7/authentication/using-rbac.html) guide to add the necessary roles to the user.

## Deploy prerequisites

Note: It may be required to apply `SecurityContextConstraints` policy when installing into OpenShift cluster, which adds permission to run containers from a user whose `ID = 1001`.

To do this, run the following commands:
```
$ oc apply -f https://raw.githubusercontent.com/ONLYOFFICE/Kubernetes-Docs/master/sources/scc/helm-components.yaml
$ oc adm policy add-scc-to-group scc-helm-components system:authenticated
```

Alternatively, you can specify the allowed range of users and groups from the target namespace, see the parameters `runAsUser` and `fsGroup` while installing dependencies, such as RabbitMQ, Redis, PostgreSQL, etc.

### 1. Add Helm repositories

```bash
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo add nfs-server-provisioner https://kubernetes-sigs.github.io/nfs-ganesha-server-and-external-provisioner
$ helm repo add onlyoffice https://download.onlyoffice.com/charts/stable
$ helm repo update
```

### 2. Install Persistent Storage

*If you want to use [Amazon S3 as a cache](#12-connecting-amazon-s3-bucket-as-a-cache-to-onlyoffice-helm-docs), please skip this step.*

Install NFS Server Provisioner

Note: When installing NFS Server Provisioner, Storage Classes - `NFS` is created. When installing to an OpenShift cluster, the user must have a role that allows you to create Storage Classes in the cluster. Read more [here](https://docs.openshift.com/container-platform/4.7/storage/dynamic-provisioning.html).

```bash
$ helm install nfs-server nfs-server-provisioner/nfs-server-provisioner \
--set persistence.enabled=true \
--set persistence.storageClass=PERSISTENT_STORAGE_CLASS \
--set persistence.size=PERSISTENT_SIZE
```

- `PERSISTENT_STORAGE_CLASS` is a Persistent Storage Class available in your Kubernetes cluster.

Persistent Storage Classes for different providers:
- Amazon EKS: `gp2`
- Digital Ocean: `do-block-storage`
- IBM Cloud: Default `ibmc-file-bronze`. [More storage classes](https://cloud.ibm.com/docs/containers?topic=containers-file_storage)
- Yandex Cloud: `yc-network-hdd` or `yc-network-ssd`. [More details](https://cloud.yandex.ru/docs/managed-kubernetes/operations/volumes/manage-storage-class)
- minikube: `standard`

- `PERSISTENT_SIZE` is the total size of all Persistent Storages for the nfs Persistent Storage Class. You can express the size as a plain integer with one of these suffixes: `T`, `G`, `M`, `Ti`, `Gi`, `Mi`. For example: `9Gi`.

See more details about installing NFS Server Provisioner via Helm [here](https://github.com/kubernetes-sigs/nfs-ganesha-server-and-external-provisioner/tree/master/charts/nfs-server-provisioner).

Configure a Persistent Volume Claim

Note: The default `nfs` Persistent Volume Claim is 8Gi. You can change it in the [values.yaml](values.yaml) file in the `persistence.storageClass` and `persistence.size` section. It should be less than `PERSISTENT_SIZE` at least by about 5%. It's recommended to use 8Gi or more for persistent storage for every 100 active users of ONLYOFFICE Docs.

*The PersistentVolume type to be used for PVC placement must support Access Mode [ReadWriteMany](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes).*
*Also, PersistentVolume must have as the owner the user from whom the ONLYOFFICE Docs will be started. By default it is `ds` (101:101).*

Note: If you want to enable `WOPI`, please set the parameter `wopi.enabled=true`. In this case Persistent Storage must be connected to the cluster nodes with the disabled caching attributes for the mounted directory for the clients. For NFS Server Provisioner it can be achieved by adding `noac` option to the parameter `storageClass.mountOptions`. Please find more information [here](https://github.com/kubernetes-sigs/nfs-ganesha-server-and-external-provisioner/blob/master/charts/nfs-server-provisioner/values.yaml#L83).
### 3. Deploy RabbitMQ

To install RabbitMQ to your cluster, run the following command:

```bash
$ helm install rabbitmq --version 16.0.14 bitnami/rabbitmq \
--set persistence.storageClass=PERSISTENT_STORAGE_CLASS \
--set resourcesPreset=none \
--set image.repository=bitnamilegacy/rabbitmq \
--set image.tag=4.1.3-debian-12-r1 \
--set global.security.allowInsecureImages=true \
--set metrics.enabled=false
```

Note: Set the `metrics.enabled=true` to enable exposing RabbitMQ metrics to be gathered by Prometheus.

See more details about installing RabbitMQ via Helm [here](https://github.com/bitnami/charts/tree/main/bitnami/rabbitmq#rabbitmq).

### 4. Deploy Redis

To install Redis to your cluster, run the following command:

```bash
$ helm install redis --version 22.0.7 bitnami/redis \
--set architecture=standalone \
--set master.persistence.storageClass=PERSISTENT_STORAGE_CLASS \
--set master.resourcesPreset=none \
--set global.security.allowInsecureImages=true \
--set image.repository=bitnamilegacy/redis \
--set image.tag=8.2.1-debian-12-r0 \
--set metrics.enabled=false
```

Note: Set the `metrics.enabled=true` to enable exposing Redis metrics to be gathered by Prometheus. Also add the following parameters: `metrics.image.repository=bitnamilegacy/redis-exporter` and `metrics.image.tag=1.76.0-debian-12-r0`.

See more details about installing Redis via Helm [here](https://github.com/bitnami/charts/tree/main/bitnami/redis).

### 5. Deploy Database

As a database server, you can use PostgreSQL, MySQL or MariaDB

**If PostgreSQL is selected as the database server, then follow these steps**

To install PostgreSQL to your cluster, run the following command:

```
$ helm install postgresql --version 16.7.27 bitnami/postgresql \
--set auth.database=postgres \
--set primary.persistence.storageClass=PERSISTENT_STORAGE_CLASS \
--set primary.persistence.size=PERSISTENT_SIZE \
--set primary.resourcesPreset=none \
--set image.repository=bitnamilegacy/postgresql \
--set global.security.allowInsecureImages=true \
--set image.tag=17.6.0-debian-12-r2 \
--set metrics.enabled=false
```

Note: Set the `metrics.enabled=true` to enable exposing Database metrics to be gathered by Prometheus. Also add the following parameters: `metrics.image.repository=bitnamilegacy/postgres-exporter` and `metrics.image.tag=0.17.1-debian-12-r16`.

See more details about installing PostgreSQL via Helm [here](https://github.com/bitnami/charts/tree/main/bitnami/postgresql#postgresql).

**If MySQL is selected as the database server, then follow these steps**

To install MySQL to your cluster, run the following command:

```
$ helm install mysql --version 14.0.3 bitnami/mysql \
--set auth.database=onlyoffice \
--set auth.username=onlyoffice \
--set primary.persistence.storageClass=PERSISTENT_STORAGE_CLASS \
--set primary.persistence.size=PERSISTENT_SIZE \
--set primary.resourcesPreset=none \
--set image.repository=bitnamilegacy/mysql \
--set global.security.allowInsecureImages=true \
--set image.tag=9.4.0-debian-12-r1 \
--set metrics.enabled=false
```

See more details about installing MySQL via Helm [here](https://github.com/bitnami/charts/tree/main/bitnami/mysql).

Here `PERSISTENT_SIZE` is a size for the Database persistent volume. For example: `8Gi`.

It's recommended to use at least 2Gi of persistent storage for every 100 active users of ONLYOFFICE Docs.

Note: Set the `metrics.enabled=true` to enable exposing Database metrics to be gathered by Prometheus. Also add the following parameters: `metrics.image.repository=bitnamilegacy/mysqld-exporter` and `metrics.image.tag=0.17.2-debian-12-r16`.

### 6. Deploy StatsD exporter

*This step is optional. You can skip step [#6](#6-deploy-statsd-exporter) entirely if you don't want to run StatsD exporter*

#### 6.1 Add Helm repositories

```bash
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics
$ helm repo update
```

#### 6.2 Installing Prometheus

To install Prometheus to your cluster, run the following command:

```bash
$ helm install prometheus -f https://raw.githubusercontent.com/ONLYOFFICE/Kubernetes-Docs/master/sources/extraScrapeConfigs.yaml prometheus-community/prometheus \
--set server.global.scrape_interval=1m
```

To change the scrape interval, specify the `server.global.scrape_interval` parameter.

See more details about installing Prometheus via Helm [here](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus).

#### 6.3 Installing StatsD exporter

To install StatsD exporter to your cluster, run the following command:

```
$ helm install statsd-exporter prometheus-community/prometheus-statsd-exporter \
--set statsd.udpPort=8125 \
--set statsd.tcpPort=8126 \
--set statsd.eventFlushInterval=30000ms
```

See more details about installing Prometheus StatsD exporter via Helm [here](https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-statsd-exporter).

To allow the StatsD metrics in ONLYOFFICE Docs, follow step [5.2](#52-metrics-deployment-optional)

### 7. Make changes to Node-config configuration files

*This step is optional. You can skip step [#7](#7-make-changes-to-node-config-configuration-files) entirely if you don't need to make changes to the configuration files*

#### 7.1 Create a ConfigMap containing a json file

In order to create a ConfigMap from a file that contains the `local.json` structure, you need to run the following command:

```bash
$ kubectl create configmap local-config \
--from-file=./local.json
```

Note: Any name can be used instead of `local-config`.

#### 7.2 Specify parameters when installing ONLYOFFICE Docs

When installing ONLYOFFICE Docs, specify the `extraConf.configMap=local-config` and `extraConf.filename=local.json` parameters

Note: If you need to add a configuration file after the ONLYOFFICE Docs is already installed, you need to execute step [7.1](#71-create-a-configmap-containing-a-json-file)
and then run the `helm upgrade documentserver onlyoffice/docs --set extraConf.configMap=local-config --set extraConf.filename=local.json --no-hooks` command or
`helm upgrade documentserver -f ./values.yaml onlyoffice/docs --no-hooks` if the parameters are specified in the `values.yaml` file.

### 8. Add custom Fonts

*This step is optional. You can skip step [#8](#8-add-custom-fonts) entirely if you don't need to add your fonts*

In order to add fonts to images, you need to rebuild the images. Refer to the relevant steps in [this](https://github.com/ONLYOFFICE/Docker-Docs#building-onlyoffice-docs) manual.
Then specify your images when installing the ONLYOFFICE Docs.

### 9. Add Plugins

*This step is optional. You can skip step [#9](#9-add-plugins) entirely if you don't need to add plugins*

In order to add plugins to images, you need to rebuild the images. Refer to the relevant steps in [this](https://github.com/ONLYOFFICE/Docker-Docs#building-onlyoffice-docs) manual.
Then specify your images when installing the ONLYOFFICE Docs.

### 10. Add custom dictionaries

*This step is optional. You can skip step [#10](#10-add-custom-dictionaries) entirely if you don't need to add your dictionaries*

In order to add your custom dictionaries to images, you need to rebuild the images. Refer to the relevant steps in [this](https://github.com/ONLYOFFICE/Docker-Docs#building-onlyoffice-docs) manual.
Then specify your images when installing the ONLYOFFICE Docs.

### 11. Change interface themes

*This step is optional. You can skip step [#11](#11-change-interface-themes) entirely if you don't need to change the interface themes*

#### 11.1 Create a ConfigMap containing a json file

To create a ConfigMap with a json file that contains the interface themes, you need to run the following command:

```bash
$ kubectl create configmap custom-themes \
--from-file=./custom-themes.json
```

Note: Instead of `custom-themes` and `custom-themes.json` you can use any other names.

#### 11.2 Specify parameters when installing ONLYOFFICE Docs

When installing ONLYOFFICE Docs, specify the `extraThemes.configMap=custom-themes` and `extraThemes.filename=custom-themes.json` parameters.

Note: If you need to add interface themes after the ONLYOFFICE Docs is already installed, you need to execute step [11.1](#111-create-a-configmap-containing-a-json-file)
and then run the `helm upgrade documentserver onlyoffice/docs --set extraThemes.configMap=custom-themes --set extraThemes.filename=custom-themes.json --no-hooks` command or
`helm upgrade documentserver -f ./values.yaml onlyoffice/docs --no-hooks` if the parameters are specified in the `values.yaml` file.

### 12. Connecting Amazon S3 bucket as a cache to ONLYOFFICE Helm Docs
In order to connect Amazon S3 bucket as a cache, you need to [create](#7-make-changes-to-node-config-configuration-files) a configuration file or edit the existing one in accordance with [this guide](https://helpcenter.onlyoffice.com/ru/installation/docs-connect-amazon.aspx) and change the value of the parameter `persistence.storageS3` to `true`.

## Deploy ONLYOFFICE Docs

Note: It may be required to apply `SecurityContextConstraints` policy when installing into OpenShift cluster, which adds permission to run containers from a user whose `ID = 101`.

To do this, run the following commands:

```
$ oc apply -f https://raw.githubusercontent.com/ONLYOFFICE/Kubernetes-Docs/master/sources/scc/docs-components.yaml
$ oc adm policy add-scc-to-group scc-docs-components system:authenticated
```

Alternatively, you can apply the `nonroot-v2` `SecurityContextConstraints` (SCC) policy in the `commonAnnotations` or `annotations` for all resources that describe the podTemplate. Ensure that both the user and the service account have the necessary permissions to use this SCC. To verify who has permission to use the `nonroot-v2`, execute the following command: `oc adm policy who-can use scc nonroot-v2`

```bash
helm install documentserver onlyoffice/docs --set commonAnnotations."openshift\.io/required-scc"="nonroot-v2"
```

If required set `podSecurityContext.enabled` and `.containerSecurityContext.enabled` to `true`

### 1. Deploy the ONLYOFFICE Docs license

#### 1.1. Create secret

If you have a valid ONLYOFFICE Docs license, create a secret `license` from the file:

```
$ kubectl create secret generic [SECRET_LICENSE_NAME] --from-file=path/to/license.lic
```

- Where `SECRET_LICENSE_NAME` is the name of a future secret with a license

Note: The source license file name should be 'license.lic' because this name would be used as a field in the created secret.

Note: If the installation is performed without creating a secret with the existing license file, an empty secret `license` will be automatically created. For information on how to update an existing secret with a license, see [here](#9-update-onlyoffice-docs-license-optional).

#### 1.2. Specify parameters when installing ONLYOFFICE Docs

When installing ONLYOFFICE Docs, specify the `license.existingSecret=[SECRET_LICENSE_NAME]` parameter.

```
$ helm install documentserver onlyoffice/docs --set license.existingSecret=[SECRET_LICENSE_NAME]
```

Note: If you need to add license after the ONLYOFFICE Docs is already installed, you need to execute step [1.1](#11-create-secret) and then run the `helm upgrade documentserver onlyoffice/docs --set license.existingSecret=[SECRET_LICENSE_NAME] --no-hooks` command or `helm upgrade documentserver -f ./values.yaml onlyoffice/docs --no-hooks` if the parameters are specified in the `values.yaml` file.

### 2. Deploy ONLYOFFICE Docs

To deploy ONLYOFFICE Docs with the release name `documentserver`:

```bash
$ helm install documentserver onlyoffice/docs
```

The command deploys ONLYOFFICE Docs on the Kubernetes cluster in the default configuration. The [Parameters](#4-parameters) section lists the parameters that can be configured during installation.

Note: When installing ONLYOFFICE Docs in a private k8s cluster behind a Web proxy or with no internet access, see the [notes](#11-run-jobs-in-a-private-k8s-cluster-optional) below.

### 3. Uninstall ONLYOFFICE Docs

To uninstall/delete the `documentserver` deployment:

```bash
$ helm delete documentserver
```

Executing the `helm delete` command launches hooks, which perform some preparatory actions before completely deleting the ONLYOFFICE Docs, which include stopping the server, cleaning up the used PVC and database tables.
The default hook execution time is 300s. The execution time can be changed using `--timeout [time]`, for example:

```bash
$ helm delete documentserver --timeout 25m
```

Note: When deleting ONLYOFFICE Docs in a private k8s cluster behind a Web proxy or with no internet access, see the [notes](#11-run-jobs-in-a-private-k8s-cluster-optional) below.

If you want to delete the ONLYOFFICE Docs without any preparatory actions, run the following command:

```bash
$ helm delete documentserver --no-hooks
```

The `helm delete` command removes all the Kubernetes components associated with the chart and deletes the release.

### 4. Parameters

| Parameter | Description | Default |
|-------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|
| `connections.dbType` | The database type. Possible values are `postgres`, `mariadb`, `mysql`, `oracle`, `mssql` or `dameng` | `postgres` |
| `connections.dbHost` | The IP address or the name of the Database host | `postgresql` |
| `connections.dbUser` | Database user | `postgres` |
| `connections.dbPort` | Database server port number | `5432` |
| `connections.dbName` | Name of the Database database the application will be connected with | `postgres` |
| `connections.dbPassword` | Database user password. If set to, it takes priority over the `connections.dbExistingSecret` | `""` |
| `connections.dbSecretKeyName` | The name of the key that contains the Database user password | `postgres-password` |
| `connections.dbExistingSecret` | Name of existing secret to use for Database passwords. Must contain the key specified in `connections.dbSecretKeyName` | `postgresql` |
| `connections.redisConnectorName` | Defines which connector to use to connect to Redis. If you need to connect to Redis Sentinel, set the value `ioredis` | `redis` |
| `connections.redistHost` | The IP address or the name of the Redis host. Not used if the values are set in `connections.redisClusterNodes` and `connections.redisSentinelNodes` | `redis-master` |
| `connections.redisPort` | The Redis server port number. Not used if the values are set in `connections.redisClusterNodes` and `connections.redisSentinelNodes` | `6379` |
| `connections.redisUser` | The Redis [user](https://redis.io/docs/management/security/acl/) name. The value in this parameter overrides the value set in the `options` object in `local.json` if you add custom configuration file | `default` |
| `connections.redisDBNum` | Number of the redis logical database to be [selected](https://redis.io/commands/select/). The value in this parameter overrides the value set in the `options` object in `local.json` if you add custom configuration file | `0` |
| `connections.redisClusterNodes` | List of nodes in the Redis cluster. There is no need to specify every node in the cluster, 3 should be enough. You can specify multiple values. It must be specified in the `host:port` format | `[]` |
| `connections.redisPassword` | The password set for the Redis account. If set to, it takes priority over the `connections.redisExistingSecret`. The value in this parameter overrides the value set in the `options` object in `local.json` if you add custom configuration file | `""` |
| `connections.redisSecretKeyName` | The name of the key that contains the Redis user password | `redis-password` |
| `connections.redisExistingSecret` | Name of existing secret to use for Redis passwords. Must contain the key specified in `connections.redisSecretKeyName`. The password from this secret overrides password set in the `options` object in `local.json` | `redis` |
| `connections.redisNoPass` | Defines whether to use a Redis auth without a password. If the connection to Redis server does not require a password, set the value to `true` | `false` |
| `connections.redisSentinelNodes` | List of Redis Sentinel Nodes. There is no need to specify every node, 3 should be enough. You can specify multiple values. It must be specified in the `host:port` format. Used if `connections.redisConnectorName` is set to `ioredis` | `[]` |
| `connections.redisSentinelGroupName` | Name of a group of Redis instances composed of a master and one or more slaves. Used if `connections.redisConnectorName` is set to `ioredis` | `mymaster` |
| `connections.redisSentinelExistingSecret` | Name of existing secret to use for Redis Sentinel password. Must contain the key specified in `connections.redisSentinelSecretKeyName`. The password from this secret overrides the value for the password set in the `iooptions` object in `local.json` | "" |
| `connections.redisSentinelSecretKeyName` | The name of the key that contains the Redis Sentinel user password. If you set a password in `redisSentinelPassword`, a secret will be automatically created, the key name of which will be the value set here | `sentinel-password` |
| `connections.redisSentinelPassword` | The password set for the Redis Sentinel account. If set to, it takes priority over the `connections.redisSentinelExistingSecret`. The value in this parameter overrides the value set in the `iooptions` object in `local.json` | `""` |
| `connections.redisSentinelNoPass` | Defines whether to use a Redis Sentinel auth without a password. If the connection to Redis Sentinel does not require a password, set the value to `true` | `true` |
| `connections.amqpType` | Defines the AMQP server type. Possible values are `rabbitmq` or `activemq` | `rabbitmq` |
| `connections.amqpHost` | The IP address or the name of the AMQP server | `rabbitmq` |
| `connections.amqpPort` | The port for the connection to AMQP server | `5672` |
| `connections.amqpVhost` | The virtual host for the connection to AMQP server | `/` |
| `connections.amqpUser` | The username for the AMQP server account | `user` |
| `connections.amqpProto` | The protocol for the connection to AMQP server | `amqp` |
| `connections.amqpPassword` | AMQP server user password. If set to, it takes priority over the `connections.amqpExistingSecret` | `""` |
| `connections.amqpSecretKeyName` | The name of the key that contains the AMQP server user password | `rabbitmq-password` |
| `connections.amqpExistingSecret` | The name of existing secret to use for AMQP server passwords. Must contain the key specified in `connections.amqpSecretKeyName` | `rabbitmq` |
| `persistence.existingClaim` | Name of an existing PVC to use. If not specified, a PVC named "ds-files" will be created | `""` |
| `persistence.annotations` | Defines annotations that will be additionally added to "ds-files" PVC. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `persistence.storageClass` | PVC Storage Class for Onlyoffice Docs data and runtime config volumes | `nfs` |
| `persistence.size` | PVC Storage Request for ONLYOFFICE Docs volume | `8Gi` |
| `persistence.storageS3` | Defines whether S3 will be used as cache storage. Set to `true` if you will use S3 as cache storage | `false` |
| `persistence.runtimeConfig.enabled` | Defines whether to use PVC and whether to mount it in containers | `true` |
| `persistence.runtimeConfig.existingClaim` | The name of the existing PVC used to store the runtime config. If not specified, a PVC named "ds-runtime-config" will be created | `""` |
| `persistence.runtimeConfig.annotations` | Defines annotations that will be additionally added to "ds-runtime-config" PVC. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `persistence.runtimeConfig.size` | PVC Storage Request for runtime config volume | `1Gi` |
| `commonNameSuffix` | The name that will be added to the name of all created resources as a suffix | `""` |
| `namespaceOverride` | The name of the namespace in which Onlyoffice Docs will be deployed. If not set, the name will be taken from `.Release.Namespace` | `""` |
| `commonLabels` | Defines labels that will be additionally added to all the deployed resources. You can also use `tpl` as the value for the key | `{}` |
| `commonAnnotations` | Defines annotations that will be additionally added to all the deployed resources. You can also use `tpl` as the value for the key. Some resources may override the values specified here with their own | `{}` |
| `serviceAccount.create` | Enable ServiceAccount creation | `false` |
| `serviceAccount.name` | Name of the ServiceAccount to be used. If not set and `serviceAccount.create` is `true` the name will be taken from `.Release.Name` or `serviceAccount.create` is `false` the name will be "default" | `""` |
| `serviceAccount.annotations` | Map of annotations to add to the ServiceAccount. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `serviceAccount.automountServiceAccountToken` | Enable auto mount of ServiceAccountToken on the serviceAccount created. Used only if `serviceAccount.create` is `true` | `true` |
| `license.existingSecret` | Name of the existing secret that contains the license. Must contain the key `license.lic` | `""` |
| `license.existingClaim` | Name of the existing PVC in which the license is stored. Must contain the file `license.lic` | `""` |
| `log.level` | Defines the type and severity of a logged event. Possible values are `ALL`, `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`, `MARK`, `OFF` | `WARN` |
| `log.type` | Defines the format of a logged event. Possible values are `pattern`, `json`, `basic`, `coloured`, `messagePassThrough`, `dummy` | `pattern` |
| `log.pattern` | Defines the log [pattern](https://github.com/log4js-node/log4js-node/blob/master/docs/layouts.md#pattern-format) if `log.type=pattern` | `[%d] [%p] %c - %.10000m` |
| `wopi.enabled` | Defines if `WOPI` is enabled. If the parameter is enabled, then caching attributes for the mounted directory (`PVC`) should be disabled for the client | `false` |
| `wopi.keys.generation` | Defines whether to generate API keys. Used if you set `wopi.enabled` to `true` | `true` |
| `wopi.keys.newKeysExistingSecret` | Name of existing secret containing the WOPI keys. Must contain the keys `WOPI_PRIVATE_KEY`, `WOPI_PUBLIC_KEY`, `WOPI_MODULUS_KEY` and `WOPI_EXPONENT_KEY`. If not set, new keys will be generated and a secret will be created from them | `""` |
| `wopi.keys.oldKeysExistingSecret` | Name of existing secret containing the old WOPI keys. Must contain the keys `WOPI_PRIVATE_KEY_OLD`, `WOPI_PUBLIC_KEY_OLD`, `WOPI_MODULUS_KEY_OLD` and `WOPI_EXPONENT_KEY_OLD`. If not set, new keys will be generated and a secret will be created from them | `""` |
| `metrics.enabled` | Specifies the enabling StatsD for ONLYOFFICE Docs | `false` |
| `metrics.host` | Defines StatsD listening host | `statsd-exporter-prometheus-statsd-exporter` |
| `metrics.port` | Defines StatsD listening port | `8125` |
| `metrics.prefix` | Defines StatsD metrics prefix for backend services | `ds.` |
| `extraConf.configMap` | The name of the ConfigMap containing the json file that override the default values | `""` |
| `extraConf.filename` | The name of the json file that contains custom values. Must be the same as the `key` name in `extraConf.ConfigMap` | `local.json` |
| `extraThemes.configMap` | The name of the ConfigMap containing the json file that contains the interface themes | `""` |
| `extraThemes.filename` | The name of the json file that contains custom interface themes. Must be the same as the `key` name in `extraThemes.configMap` | `custom-themes.json` |
| `podAntiAffinity.type` | Types of Pod antiaffinity. Allowed values: `soft` or `hard` | `soft` |
| `podAntiAffinity.topologyKey` | Node label key to match | `kubernetes.io/hostname` |
| `podAntiAffinity.weight` | Priority when selecting node. It is in the range from 1 to 100 | `100` |
| `nodeSelector` | Node labels for pods assignment. Each ONLYOFFICE Docs services can override the values specified here with its own | `{}` |
| `tolerations` | Tolerations for pods assignment. Each ONLYOFFICE Docs services can override the values specified here with its own | `[]` |
| `imagePullSecrets` | Container image registry secret name | `""` |
| `requestFilteringAgent.allowPrivateIPAddress` | Defines if it is allowed to connect private IP address or not. `requestFilteringAgent` parameters are used if JWT is disabled: `jwt.enabled=false` | `false` |
| `requestFilteringAgent.allowMetaIPAddress` | Defines if it is allowed to connect meta address or not | `false` |
| `requestFilteringAgent.allowIPAddressList` | Defines the list of IP addresses allowed to connect. This values are preferred than `requestFilteringAgent.denyIPAddressList` | `[]` |
| `requestFilteringAgent.denyIPAddressList` | Defines the list of IP addresses allowed to connect | `[]` |
| `docservice.annotations` | Defines annotations that will be additionally added to Docservice Deployment. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `docservice.podAnnotations` | Map of annotations to add to the Docservice deployment pods | `rollme: "{{ randAlphaNum 5 \| quote }}"` |
| `docservice.replicas` | Docservice replicas quantity. If the `docservice.autoscaling.enabled` parameter is enabled, it is ignored | `2` |
| `docservice.updateStrategy.type` | Docservice deployment update strategy type | `Recreate` |
| `docservice.customPodAntiAffinity` | Prohibiting the scheduling of Docservice Pods relative to other Pods containing the specified labels on the same node | `{}` |
| `docservice.podAffinity` | Defines [Pod affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) rules for Docservice Pods scheduling by nodes relative to other Pods | `{}` |
| `docservice.nodeAffinity` | Defines [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) rules for Docservice Pods scheduling by nodes | `{}` |
| `docservice.nodeSelector` | Node labels for Docservice Pods assignment. If set to, it takes priority over the `nodeSelector` | `{}` |
| `docservice.tolerations` | Tolerations for Docservice Pods assignment. If set to, it takes priority over the `tolerations` | `[]` |
| `docservice.terminationGracePeriodSeconds` | The time to terminate gracefully during which the Docservice Pod will have the `Terminating` status | `30` |
| `docservice.hostAliases` | Adds [additional entries](https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/) to the hosts file in the Docservice and Proxy containers | `[]` |
| `docservice.initContainers` | Defines containers that run before docservice and proxy containers in the Docservice deployment pod. For example, a container that changes the owner of the PersistentVolume | `[]` |
| `docservice.image.repository` | Docservice container image repository* | `onlyoffice/docs-docservice-de` |
| `docservice.image.tag` | Docservice container image tag | `9.0.4-1` |
| `docservice.image.pullPolicy` | Docservice container image pull policy | `IfNotPresent` |
| `docservice.containerSecurityContext.enabled` | Enable security context for the Docservice container | `false` |
| `docservice.lifecycleHooks` | Defines the Docservice [container lifecycle hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks). It is used to trigger events to run at certain points in a container's lifecycle | `{}` |
| `docservice.resources.requests` | The requested resources for the Docservice container | `{}` |
| `docservice.resources.limits` | The resources limits for the Docservice container | `{}` |
| `docservice.extraEnvVars` | An array with extra env variables for the Docservice container | `[]` |
| `docservice.extraVolumes` | An array with extra volumes for the Docservice Pod | `[]` |
| `docservice.extraVolumeMounts` | An array with extra volume mounts for the Docservice container | `[]` |
| `docservice.readinessProbe.enabled` | Enable readinessProbe for Docservice container | `true` |
| `docservice.livenessProbe.enabled` | Enable livenessProbe for Docservice container | `true` |
| `docservice.startupProbe.enabled` | Enable startupProbe for Docservice container | `true` |
| `docservice.autoscaling.enabled` | Enable Docservice deployment autoscaling | `false` |
| `docservice.autoscaling.annotations` | Defines annotations that will be additionally added to Docservice deployment HPA. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `docservice.autoscaling.minReplicas` | Docservice deployment autoscaling minimum number of replicas | `2` |
| `docservice.autoscaling.maxReplicas` | Docservice deployment autoscaling maximum number of replicas | `4` |
| `docservice.autoscaling.targetCPU.enabled` | Enable autoscaling of Docservice deployment by CPU usage percentage | `true` |
| `docservice.autoscaling.targetCPU.utilizationPercentage` | Docservice deployment autoscaling target CPU percentage | `70` |
| `docservice.autoscaling.targetMemory.enabled` | Enable autoscaling of Docservice deployment by memory usage percentage | `false` |
| `docservice.autoscaling.targetMemory.utilizationPercentage` | Docservice deployment autoscaling target memory percentage | `70` |
| `docservice.autoscaling.customMetricsType` | Custom, additional or external autoscaling metrics for the Docservice deployment | `[]` |
| `docservice.autoscaling.behavior` | Configuring Docservice deployment scaling behavior policies for the `scaleDown` and `scaleUp` fields | `{}` |
| `proxy.accessLog` | Defines the nginx config [access_log](https://nginx.org/en/docs/http/ngx_http_log_module.html#access_log) format directive | `off` |
| `proxy.logFormat` | Defines the [format](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) of log entries using text and various variables | `'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'` |
| `proxy.gzipProxied` | Defines the nginx config [gzip_proxied](https://nginx.org/en/docs/http/ngx_http_gzip_module.html#gzip_proxied) directive | `off` |
| `proxy.clientMaxBodySize` | Defines the nginx config [client_max_body_size](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size) directive | `100m` |
| `proxy.workerConnections` | Defines the nginx config [worker_connections](https://nginx.org/en/docs/ngx_core_module.html#worker_connections) directive | `4096` |
| `proxy.secureLinkSecret` | Defines secret for the nginx config directive [secure_link_md5](https://nginx.org/en/docs/http/ngx_http_secure_link_module.html#secure_link_md5). If the value is empty, a random one will be generated, which will be used later in the upgrade. If a value is set, it will be used | `""` |
| `proxy.secureLinkExistingSecret` | Name of existing secret to use for secure_link. If set to, it takes priority over the `proxy.secureLinkSecret` | `""` |
| `proxy.infoAllowedIP` | Defines ip addresses for accessing the info page | `[]` |
| `proxy.infoAllowedUser` | Defines user name for accessing the info page. If not set to, Nginx [Basic Authentication](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html) will not be applied to access the info page. For more details, see [here](#12-access-to-the-info-page-optional) | `""` |
| `proxy.infoAllowedPassword` | Defines user password for accessing the info page. Used if `proxy.infoAllowedUser` is set. If the value is empty, a random one will be generated, which will be used later in the upgrade. If a value is set, it will be used | `""` |
| `proxy.infoAllowedSecretKeyName` | The name of the key that contains the info auth user password. Used if `proxy.infoAllowedUser` is set | `info-auth-password` |
| `proxy.infoAllowedExistingSecret` | Name of existing secret to use for info auth password. Used if `proxy.infoAllowedUser` is set. Must contain the key specified in `proxy.infoAllowedSecretKeyName`. If set to, it takes priority over the `proxy.infoAllowedPassword` | `""` |
| `proxy.welcomePage.enabled` | Defines whether the welcome page will be displayed | `true` |
| `proxy.image.repository` | Docservice Proxy container image repository* | `onlyoffice/docs-proxy-de` |
| `proxy.image.tag` | Docservice Proxy container image tag | `9.0.4-1` |
| `proxy.image.pullPolicy` | Docservice Proxy container image pull policy | `IfNotPresent` |
| `proxy.containerSecurityContext.enabled` | Enable security context for the Proxy container | `false` |
| `proxy.lifecycleHooks` | Defines the Proxy [container lifecycle hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks). It is used to trigger events to run at certain points in a container's lifecycle | `{}` |
| `proxy.resources.requests` | The requested resources for the Proxy container | `{}` |
| `proxy.resources.limits` | The resources limits for the Proxy container | `{}` |
| `proxy.extraEnvVars` | An array with extra env variables for the Proxy container | `[]` |
| `proxy.extraVolumeMounts` | An array with extra volume mounts for the Proxy container | `[]` |
| `proxy.readinessProbe.enabled` | Enable readinessProbe for Proxy container | `true` |
| `proxy.livenessProbe.enabled` | Enable livenessProbe for Proxy container | `true` |
| `proxy.startupProbe.enabled` | Enable startupProbe for Proxy container | `true` |
| `converter.annotations` | Defines annotations that will be additionally added to Converter Deployment. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `converter.podAnnotations` | Map of annotations to add to the Converter deployment pods | `rollme: "{{ randAlphaNum 5 \| quote }}"` |
| `converter.replicas` | Converter replicas quantity. If the `converter.autoscaling.enabled` parameter is enabled, it is ignored | `2` |
| `converter.updateStrategy.type` | Converter deployment update strategy type | `Recreate` |
| `converter.customPodAntiAffinity` | Prohibiting the scheduling of Converter Pods relative to other Pods containing the specified labels on the same node | `{}` |
| `converter.podAffinity` | Defines [Pod affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) rules for Converter Pods scheduling by nodes relative to other Pods | `{}` |
| `converter.nodeAffinity` | Defines [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) rules for Converter Pods scheduling by nodes | `{}` |
| `converter.nodeSelector` | Node labels for Converter Pods assignment. If set to, it takes priority over the `nodeSelector` | `{}` |
| `converter.tolerations` | Tolerations for Converter Pods assignment. If set to, it takes priority over the `tolerations` | `[]` |
| `converter.terminationGracePeriodSeconds` | The time to terminate gracefully during which the Converter Pod will have the `Terminating` status | `30` |
| `converter.hostAliases` | Adds [additional entries](https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/) to the hosts file in the Converter container | `[]` |
| `converter.initContainers` | Defines containers that run before Converter container in the Converter deployment pod. For example, a container that changes the owner of the PersistentVolume | `[]` |
| `converter.image.repository` | Converter container image repository* | `onlyoffice/docs-converter-de` |
| `converter.image.tag` | Converter container image tag | `9.0.4-1` |
| `converter.image.pullPolicy` | Converter container image pull policy | `IfNotPresent` |
| `converter.containerSecurityContext.enabled` | Enable security context for the Converter container | `false` |
| `converter.lifecycleHooks` | Defines the Converter [container lifecycle hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks). It is used to trigger events to run at certain points in a container's lifecycle | `{}` |
| `converter.resources.requests` | The requested resources for the Converter container | `{}` |
| `converter.resources.limits` | The resources limits for the Converter container | `{}` |
| `converter.extraEnvVars` | An array with extra env variables for the Converter container | `[]` |
| `converter.extraVolumes` | An array with extra volumes for the Converter Pod | `[]` |
| `converter.extraVolumeMounts` | An array with extra volume mounts for the Converter container | `[]` |
| `converter.autoscaling.enabled` | Enable Converter deployment autoscaling | `false` |
| `converter.autoscaling.annotations` | Defines annotations that will be additionally added to Converter deployment HPA. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `converter.autoscaling.minReplicas` | Converter deployment autoscaling minimum number of replicas | `2` |
| `converter.autoscaling.maxReplicas` | Converter deployment autoscaling maximum number of replicas | `16` |
| `converter.autoscaling.targetCPU.enabled` | Enable autoscaling of converter deployment by CPU usage percentage | `true` |
| `converter.autoscaling.targetCPU.utilizationPercentage` | Converter deployment autoscaling target CPU percentage | `70` |
| `converter.autoscaling.targetMemory.enabled` | Enable autoscaling of Converter deployment by memory usage percentage | `false` |
| `converter.autoscaling.targetMemory.utilizationPercentage` | Converter deployment autoscaling target memory percentage | `70` |
| `converter.autoscaling.customMetricsType` | Custom, additional or external autoscaling metrics for the Converter deployment | `[]` |
| `converter.autoscaling.behavior` | Configuring Converter deployment scaling behavior policies for the `scaleDown` and `scaleUp` fields | `{}` |
| `example.enabled` | Enables the installation of Example | `false` |
| `example.annotations` | Defines annotations that will be additionally added to Example StatefulSet. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `example.podAnnotations` | Map of annotations to add to the example pod | `rollme: "{{ randAlphaNum 5 \| quote }}"` |
| `example.updateStrategy.type` | Example StatefulSet update strategy type | `RollingUpdate` |
| `example.customPodAntiAffinity` | Prohibiting the scheduling of Example Pod relative to other Pods containing the specified labels on the same node | `{}` |
| `example.podAffinity` | Defines [Pod affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) rules for Example Pod scheduling by nodes relative to other Pods | `{}` |
| `example.nodeAffinity` | Defines [Node affinity](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) rules for Example Pod scheduling by nodes | `{}` |
| `example.nodeSelector` | Node labels for Example Pods assignment. If set to, it takes priority over the `nodeSelector` | `{}` |
| `example.tolerations` | Tolerations for Example Pods assignment. If set to, it takes priority over the `tolerations` | `[]` |
| `example.terminationGracePeriodSeconds` | The time to terminate gracefully during which the Example Pod will have the `Terminating` status | `30` |
| `example.hostAliases` | Adds [additional entries](https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/) to the hosts file in the Example container | `[]` |
| `example.initContainers` | Defines containers that run before Example container in the Pod | `[]` |
| `example.image.repository` | Example container image name | `onlyoffice/docs-example` |
| `example.image.tag` | Example container image tag | `9.0.4-1` |
| `example.image.pullPolicy` | Example container image pull policy | `IfNotPresent` |
| `example.containerSecurityContext.enabled` | Enable security context for the Example container | `false` |
| `example.dsUrl` | ONLYOFFICE Docs external address. It should be changed only if it is necessary to check the operation of the conversion in Example (e.g. http://\/) | `/` |
| `example.resources.requests` | The requested resources for the Example container | `{}` |
| `example.resources.limits` | The resources limits for the Example container | `{}` |
| `example.extraEnvVars` | An array with extra env variables for the Example container | `[]` |
| `example.extraConf.configMap` | The name of the ConfigMap containing the json file that override the default values. See an example of creation [here](https://github.com/ONLYOFFICE/Kubernetes-Docs?tab=readme-ov-file#71-create-a-configmap-containing-a-json-file) | `""` |
| `example.extraConf.filename` | The name of the json file that contains custom values. Must be the same as the `key` name in `example.extraConf.ConfigMap` | `local.json` |
| `example.extraVolumes` | An array with extra volumes for the Example Pod | `[]` |
| `example.extraVolumeMounts` | An array with extra volume mounts for the Example container | `[]` |
| `jwt.enabled` | Specifies the enabling the JSON Web Token validation by the ONLYOFFICE Docs. Common for inbox and outbox requests | `true` |
| `jwt.secret` | Defines the secret key to validate the JSON Web Token in the request to the ONLYOFFICE Docs. Common for inbox and outbox requests. If the value is empty, a random one will be generated, which will be used later in the upgrade. If a value is set, it will be used | `""` |
| `jwt.header` | Defines the http header that will be used to send the JSON Web Token. Common for inbox and outbox requests | `Authorization` |
| `jwt.inBody` | Specifies the enabling the token validation in the request body to the ONLYOFFICE Docs | `false` |
| `jwt.inbox` | JSON Web Token validation parameters for inbox requests only. If not specified, the values of the parameters of the common `jwt` are used | `{}` |
| `jwt.outbox` | JSON Web Token validation parameters for outbox requests only. If not specified, the values of the parameters of the common `jwt` are used | `{}` |
| `jwt.existingSecret` | The name of an existing secret containing variables for jwt. If not specified, a secret named `jwt` will be created | `""` |
| `service.existing` | The name of an existing service for ONLYOFFICE Docs. If not specified, a service named `documentserver` will be created | `""` |
| `service.annotations` | Map of annotations to add to the ONLYOFFICE Docs service. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `service.type` | ONLYOFFICE Docs service type | `ClusterIP` |
| `service.port` | ONLYOFFICE Docs service port | `8888` |
| `service.sessionAffinity` | [Session Affinity](https://kubernetes.io/docs/reference/networking/virtual-ips/#session-affinity) for ONLYOFFICE Docs service. If not set, `None` will be set as the default value | `""` |
| `service.sessionAffinityConfig` | [Configuration](https://kubernetes.io/docs/reference/networking/virtual-ips/#session-stickiness-timeout) for ONLYOFFICE Docs service Session Affinity. Used if the `service.sessionAffinity` is set | `{}` |
| `ingress.enabled` | Enable the creation of an ingress for the ONLYOFFICE Docs | `false` |
| `ingress.annotations` | Map of annotations to add to the Ingress. If set to, it takes priority over the `commonAnnotations` | `nginx.ingress.kubernetes.io/proxy-body-size: 100m` |
| `ingress.ingressClassName` | Used to reference the IngressClass that should be used to implement this Ingress | `nginx` |
| `ingress.controllerName` | Used to distinguish between controllers with the same IngressClassName but from different vendors | `ingress-nginx` |
| `ingress.host` | Ingress hostname for the ONLYOFFICE Docs ingress | `""` |
| `ingress.tenants` | Ingress hostnames if you need to use more than one name. For example, for multitenancy. If set to, it takes priority over the `ingress.host`. If `ingress.ssl.enabled` is set to `true`, it is assumed that the certificate for all specified domains is kept secret by `ingress.ssl.secret` | `[]` |
| `ingress.ssl.enabled` | Enable ssl for the ONLYOFFICE Docs ingress | `false` |
| `ingress.ssl.secret` | Secret name for ssl to mount into the Ingress | `tls` |
| `ingress.path` | Specifies the path where ONLYOFFICE Docs will be available | `/` |
| `ingress.pathType` | Specifies the path type for the ONLYOFFICE Docs ingress resource. Allowed values are `Exact`, `Prefix` or `ImplementationSpecific` | `ImplementationSpecific` |
| `ingress.letsencrypt.enabled` | Enabling certificate request creation in Let's Encrypt. Used if `ingress.enabled` is set to `true` | `false` |
| `ingress.letsencrypt.clusterIssuerName` | ClusterIssuer Name | `letsencrypt-prod` |
| `ingress.letsencrypt.email` | Your email address used for ACME registration | `""` |
| `ingress.letsencrypt.server` | The address of the Let's Encrypt server to which requests for certificates will be sent | `https://acme-v02.api.letsencrypt.org/directory` |
| `ingress.letsencrypt.secretName` | Name of a secret used to store the ACME account private key | `letsencrypt-prod-private-key` |
| `openshift.route.enabled` | Enable the creation of an OpenShift Route for the ONLYOFFICE Docs | `false` |
| `openshift.route.annotations` | Map of annotations to add to the OpenShift Route. If set to, it takes priority over the `commonAnnotations` | `{}` |
| `openshift.route.host` | OpenShift Route hostname for the ONLYOFFICE Docs route | `""` |
| `openshift.route.path` | Specifies the path where ONLYOFFICE Docs will be available | `/` |
| `openshift.route.wildcardPolicy` | The policy for handling wildcard subdomains in the OpenShift Route. Allowed values are `None`, `Subdomain` | `None` |
| `grafana.enabled` | Enable the installation of resources required for the visualization of metrics in Grafana | `false` |
| `grafana.namespace` | The name of the namespace in which RBAC components and Grafana resources will be deployed. If not set, the name will be taken from `namespaceOverride` if set, or .Release.Namespace | `""` |
| `grafana.ingress.enabled` | Enable the creation of an ingress for the Grafana. Used if you set `grafana.enabled` to `true` and want to use Nginx Ingress to access Grafana | `false` |
| `grafana.ingress.annotations` | Map of annotations to add to Grafana Ingress. If set to, it takes priority over the `commonAnnotations`