Gotenberg is an open-source, Docker-powered stateless API for PDF files. It provides a developer friendly API to interact with powerful tools like Chromium and LibreOffice for converting numerous document formats (HTML, Markdown, Word, Excel, etc.) into PDF files and more. It delivers all of these features within a single Docker image available on Docker Hub.
Head to the Gotenberg Homepage for in-depth documentation and configuration guides.
helm repo add fmjstudios https://fmjstudios.github.io/helm
helm install gotenberg fmjstudios/gotenberg --version X.Y.Z
helm install oci://ghcr.io/fmjstudios/helm/gotenberg:X.Y.Z
This chart bootstraps a Gotenberg Deployment on a Kubernetes cluster using the Helm package manager. For cluster networking a Service and Ingress manifest is also created, whereas the Ingress needs to be explicitly enabled. Lastly the chart configures a PodDisruptionBudget and HorizontalPodAutoscaler if enabled. RBAC manifests are enabled by default.
The chart supports the configuration of all Gotenberg CLI options via
the gotenberg
key in Helm's values and makes use of the official Docker Hub container image, although this is
configurable via the Image Parameters.
Name | Description | Value |
---|---|---|
image.registry |
The Docker registry to pull the image from | docker.io |
image.repository |
The registry repository to pull the image from | gotenberg/gotenberg |
image.tag |
The image tag to pull | 8.7.0 |
image.digest |
The image digest to pull | "" |
image.pullPolicy |
The Kubernetes image pull policy | IfNotPresent |
image.pullSecrets |
A list of secrets to use for pulling images from private registries | [] |
Name | Description | Value |
---|---|---|
nameOverride |
String to partially override gotenberg.fullname | "" |
fullnameOverride |
String to fully override gotenberg.fullname | "" |
Name | Description | Value |
---|---|---|
gotenberg.api.port |
The port the API should listen on | 3000 |
gotenberg.api.tlsCertFile |
Disable health check logging | "" |
gotenberg.api.tlsKeyFile |
Disable health check logging | "" |
gotenberg.api.startTimeout |
Set the time limit for the API to start | 30s |
gotenberg.api.timeout |
Set the time limit for requests | 30s |
gotenberg.api.rootPath |
Set the root path of the API | "/" |
gotenberg.api.traceHeader |
Set the header name to use for identifying requests | "" |
gotenberg.api.disableHealthCheckLogging |
Disable health check logging | false |
gotenberg.basicAuth.enabled |
Enable basic authentication | false |
gotenberg.basicAuth.username |
Set a username for HTTP Basic Auth | "" |
gotenberg.basicAuth.password |
Set a password for HTTP Basic Auth | "" |
gotenberg.basicAuth.existingSecret |
The name of an existing basic-auth secret |
"" |
gotenberg.chromium.restartAfter |
Number of conversions after which Chromium will auto-restart | 0 |
gotenberg.chromium.maxQueueSize |
Maximum request queue size for Chromium | 0 |
gotenberg.chromium.autoStart |
Automatically launch Chromium upon initialization if set to true | false |
gotenberg.chromium.startTimeout |
Maximum duration to wait for Chromium to start or restart | 20s |
gotenberg.chromium.allowFileAccessFromFiles |
Allow file:// URIs to read other file:// URIs | false |
gotenberg.chromium.allowInsecureLocalhost |
Ignore TLS/SSL errors on localhost | false |
gotenberg.chromium.allowList |
Set the allowed URLs for Chromium using a regular expression - defaults to 'All' | "" |
gotenberg.chromium.denyList |
Set the denied URLs for Chromium using a regular expression | "" |
gotenberg.chromium.ignoreCertificateErrors |
Ignore the certificate errors | false |
gotenberg.chromium.disableWebSecurity |
Don't enforce the same-origin policy | false |
gotenberg.chromium.incognito |
Start Chromium with incognito mode | false |
gotenberg.chromium.hostResolverRules |
Set custom mappings to the host resolver | "" |
gotenberg.chromium.proxyServer |
Set the outbound proxy server; this switch only affects HTTP and HTTPS requests | "" |
gotenberg.chromium.clearCache |
Clear Chromium cache between each conversion | false |
gotenberg.chromium.clearCookies |
Clear Chromium cookies between each conversion | false |
gotenberg.chromium.disableJavaScript |
Disable JavaScript | false |
gotenberg.chromium.disableRoutes |
Disable the routes | false |
gotenberg.libreOffice.restartAfter |
Number of conversions after which LibreOffice will automatically restart | 10 |
gotenberg.libreOffice.maxQueueSize |
Maximum request queue size for LibreOffice | 0 |
gotenberg.libreOffice.autoStart |
Automatically launch LibreOffice upon initialization if set to true | false |
gotenberg.libreOffice.startTimeout |
Maximum duration to wait for LibreOffice to start or restart | 20s |
gotenberg.libreOffice.disableRoutes |
Disable the route | false |
gotenberg.pdf.engines |
Set the PDF engines and their order - defaults to 'All' | "" |
gotenberg.pdf.disableRoutes |
Disable the routes | false |
gotenberg.webhook.allowList |
Set the allowed URLs for the webhook feature using a regular expression | "" |
gotenberg.webhook.denyList |
Set the denied URLs for the webhook feature using a regular expression | "" |
gotenberg.webhook.errorAllowList |
Set the allowed URLs in case of an error using a regular expression | "" |
gotenberg.webhook.errorDenyList |
Set the denied URLs in case of an error using a regular expression | "" |
gotenberg.webhook.maxRetry |
Set the maximum number of retries | 4 |
gotenberg.webhook.retryMinWait |
Set the minimum duration to wait before trying to call the webhook again | 1s |
gotenberg.webhook.retryMaxWait |
Set the maximum duration to wait before trying to call the webhook again | 30s |
gotenberg.webhook.clientTimeout |
Set the time limit for requests to the webhook | 30s |
gotenberg.webhook.disable |
Disable the webhook feature | false |
gotenberg.prometheus.collectInterval |
Set the interval for collecting modules' metrics | 1s |
gotenberg.prometheus.namespace |
Set the namespace of modules' metrics | gotenberg |
gotenberg.prometheus.disableCollect |
Disable the collect of metrics | false |
gotenberg.prometheus.disableRouteLogging |
Disable the route logging | false |
gotenberg.logging.format |
Specify the format of logging | auto |
gotenberg.logging.level |
Choose the level of logging detail | info |
gotenberg.logging.fieldsPrefix |
Prepend a specified prefix to each field in the logs | "" |
gotenberg.shutdown.duration |
Set the graceful shutdown duration | 30s |
Name | Description | Value |
---|---|---|
secret.annotations |
Common annotations for the SMTP, HIBP, Admin and Database secrets | {} |
secret.labels |
Common extra labels for the SMTP, HIBP, Admin and Database secrets | {} |
Name | Description | Value |
---|---|---|
ingress.enabled |
Whether to enable Ingress | false |
ingress.className |
The IngressClass to use for the pod's ingress | "" |
ingress.whitelist |
A comma-separated list of IP addresses to whitelist | "" |
ingress.annotations |
Annotations for the Ingress resource | {} |
ingress.tls |
A list of hostnames and secret names to use for TLS | [] |
ingress.hosts |
A list of hosts for the Ingress resource | [] |
Name | Description | Value |
---|---|---|
service.type |
The type of service to create | ClusterIP |
service.port |
The port to use on the service | 80 |
service.nodePort |
The Node port to use on the service | 30080 |
service.extraPorts |
Extra ports to add to the service | [] |
service.annotations |
Annotations for the service resource | {} |
service.labels |
Labels for the service resource | {} |
service.externalTrafficPolicy |
The external traffic policy for the service | Cluster |
service.internalTrafficPolicy |
The internal traffic policy for the service | Cluster |
service.clusterIP |
Define a static cluster IP for the service | "" |
service.loadBalancerIP |
Set the Load Balancer IP | "" |
service.loadBalancerClass |
Define Load Balancer class if service type is LoadBalancer (optional, cloud specific) |
"" |
service.loadBalancerSourceRanges |
Service Load Balancer source ranges | [] |
service.externalIPs |
Service External IPs | [] |
service.sessionAffinity |
Session Affinity for Kubernetes service, can be "None" or "ClientIP" | None |
service.sessionAffinityConfig |
Additional settings for the sessionAffinity | {} |
service.ipFamilyPolicy |
The ipFamilyPolicy | {} |
Name | Description | Value |
---|---|---|
rbac.create |
Whether to create RBAC resources | true |
rbac.rules |
Extra rules to add to the Role | [] |
Name | Description | Value |
---|---|---|
serviceAccount.create |
Whether a service account should be created | true |
serviceAccount.automount |
Whether to automount the service account token | false |
serviceAccount.annotations |
Annotations to add to the service account | {} |
serviceAccount.name |
A custom name for the service account, otherwise gotenberg.fullname is used | "" |
serviceAccount.secrets |
A list of secrets mountable by this service account | [] |
Name | Description | Value |
---|---|---|
livenessProbe.enabled |
Enable or disable the use of liveness probes | false |
livenessProbe.initialDelaySeconds |
Configure the initial delay seconds for the liveness probe | 5 |
livenessProbe.timeoutSeconds |
Configure the initial delay seconds for the liveness probe | 1 |
livenessProbe.periodSeconds |
Configure the seconds for each period of the liveness probe | 10 |
livenessProbe.successThreshold |
Configure the success threshold for the liveness probe | 1 |
livenessProbe.failureThreshold |
Configure the failure threshold for the liveness probe | 10 |
Name | Description | Value |
---|---|---|
readinessProbe.enabled |
Enable or disable the use of readiness probes | false |
readinessProbe.initialDelaySeconds |
Configure the initial delay seconds for the readiness probe | 5 |
readinessProbe.timeoutSeconds |
Configure the initial delay seconds for the readiness probe | 1 |
readinessProbe.periodSeconds |
Configure the seconds for each period of the readiness probe | 10 |
readinessProbe.successThreshold |
Configure the success threshold for the readiness probe | 1 |
readinessProbe.failureThreshold |
Configure the failure threshold for the readiness probe | 3 |
Name | Description | Value |
---|---|---|
startupProbe.enabled |
Enable or disable the use of readiness probes | false |
startupProbe.initialDelaySeconds |
Configure the initial delay seconds for the startup probe | 5 |
startupProbe.timeoutSeconds |
Configure the initial delay seconds for the startup probe | 1 |
startupProbe.periodSeconds |
Configure the seconds for each period of the startup probe | 10 |
startupProbe.successThreshold |
Configure the success threshold for the startup probe | 1 |
startupProbe.failureThreshold |
Configure the failure threshold for the startup probe | 10 |
Name | Description | Value |
---|---|---|
podDisruptionBudget.enabled |
Enable the pod disruption budget | true |
podDisruptionBudget.minAvailable |
The minimum amount of pods which need to be available | 1 |
Name | Description | Value |
---|---|---|
replicas |
The amount of replicas Gotenberg deployment should create | 1 |
resources |
The resource limits/requests for the Gotenberg pod | {} |
volumes |
Define volumes for the Gotenberg pod | [] |
volumeMounts |
Define volumeMounts for the Gotenberg pod | [] |
initContainers |
Define initContainers for the main Gotenberg server | [] |
nodeSelector |
Node labels for pod assignment | {} |
tolerations |
Tolerations for pod assignment | [] |
affinity |
Affinity for pod assignment | {} |
strategy |
Specify a deployment strategy for the Gotenberg pod | {} |
podAnnotations |
Extra annotations for the Gotenberg pod | {} |
podLabels |
Extra labels for the Gotenberg pod | {} |
priorityClassName |
The name of an existing PriorityClass | "" |
Name | Description | Value |
---|---|---|
podSecurityContext |
Security context settings for the Gotenberg pod | {} |
securityContext |
General security context settings for | {} |
Name | Description | Value |
---|---|---|
autoscaling |
Autoscaling settings | {} |
autoscaling.enabled |
Enable or disable the HorizontalPodAutoscaler | false |
autoscaling.minReplicas |
The minimum replicas to autoscale to | 1 |
autoscaling.maxReplicas |
The maximum replicas to autoscale to | 10 |
autoscaling.targetCPUUtilizationPercentage |
The CPU utilization at which to start autoscaling | 80 |