Files
lasuite-docs/src/helm/impress/values.yaml
T
Manuel Raynaud dd85b6f321 (yhub) allow to configure yhub worker and server
We want to be able to configure both server and worker, the idea is to
be able to deploy separately the server and the worker and to scale
them.
2026-09-22 16:00:56 +02:00

1226 lines
53 KiB
YAML

# Default values for impress.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
## @section General configuration
## @param image.repository Repository to use to pull impress's container image
## @param image.tag impress's container tag
## @param image.pullPolicy Container image pull policy
## @extra image.credentials.username Username for container registry authentication
## @extra image.credentials.password Password for container registry authentication
## @extra image.credentials.registry Registry url for which the credentials are specified
## @extra image.credentials.name Name of the generated secret for imagePullSecrets
image:
repository: lasuite/impress-backend
pullPolicy: IfNotPresent
tag: "latest"
## @param nameOverride Override the chart name
## @param fullnameOverride Override the full application name
nameOverride: ""
fullnameOverride: ""
## @skip commonEnvVars
commonEnvVars: &commonEnvVars
<<: []
## @param ingress.enabled whether to enable the Ingress or not
## @param ingress.className IngressClass to use for the Ingress
## @param ingress.host Host for the Ingress
## @param ingress.path Path to use for the Ingress
ingress:
enabled: false
className: null
host: impress.example.com
path: /
## @param ingress.hosts Additional host to configure for the Ingress
hosts: []
# - chart-example.local
## @param ingress.tls.enabled Whether to enable TLS for the Ingress
## @param ingress.tls.secretName Secret name for TLS config
## @skip ingress.tls.additional
## @extra ingress.tls.additional[].secretName Secret name for additional TLS config
## @extra ingress.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingress.customBackends Add custom backends to ingress
customBackends: []
## @param ingressCollaborationWS.enabled whether to enable the Ingress or not
## @param ingressCollaborationWS.className IngressClass to use for the Ingress
## @param ingressCollaborationWS.host Host for the Ingress
## @param ingressCollaborationWS.path Path to use for the Ingress
ingressCollaborationWS:
enabled: false
className: null
host: impress.example.com
path: /collaboration/ws/
## @param ingressCollaborationWS.hosts Additional host to configure for the Ingress
hosts: []
# - chart-example.local
## @param ingressCollaborationWS.tls.enabled Whether to enable TLS for the Ingress
## @param ingressCollaborationWS.tls.secretName Secret name for TLS config
## @skip ingressCollaborationWS.tls.additional
## @extra ingressCollaborationWS.tls.additional[].secretName Secret name for additional TLS config
## @extra ingressCollaborationWS.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingressCollaborationWS.customBackends Add custom backends to ingress
customBackends: []
## @param ingressCollaborationWS.annotations.nginx.ingress.kubernetes.io/enable-websocket
## @param ingressCollaborationWS.annotations.nginx.ingress.kubernetes.io/proxy-read-timeout
## @param ingressCollaborationWS.annotations.nginx.ingress.kubernetes.io/proxy-send-timeout
##
## No upstream-hash-by: yhub passes updates between its replicas through
## redis, so two clients editing the same document may land on different
## pods — where the y-provider it replaces needed a room to stay on one.
annotations:
nginx.ingress.kubernetes.io/enable-websocket: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"
nginx.ingress.kubernetes.io/proxy-send-timeout: "86400"
## @param ingressRedirects.enabled whether to enable the Ingress Redirects or not
## @param ingressRedirects.className IngressClass to use for the Ingress Redirects
## @param ingressRedirects.host Host for the Ingress Redirects
ingressRedirects:
enabled: false
className: null
host: impress.example.com
## @param ingressRedirects.tls.enabled Whether to enable TLS for the Ingress Redirects
## @param ingressRedirects.tls.secretName Secret name for TLS config
## @skip ingressRedirects.tls.additional
## @extra ingressRedirects.tls.additional[].secretName Secret name for additional TLS config
## @extra ingressRedirects.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingressRedirects.rules Rules for the Ingress Redirects
rules: []
## @param ingressCollaborationApi.enabled whether to enable the Ingress or not
## @param ingressCollaborationApi.className IngressClass to use for the Ingress
## @param ingressCollaborationApi.host Host for the Ingress
## @param ingressCollaborationApi.path Path to use for the Ingress
ingressCollaborationApi:
enabled: false
className: null
host: impress.example.com
## Only used when `paths` below is empty
path: /collaboration/api/
## @param ingressCollaborationApi.paths Paths to route to the collaboration server, one rule each
##
## The routes yhub serves to browsers, guarded by the same document
## authorization as the websocket. Everything it serves that is not listed
## here stays in-cluster — `create-ydoc`, `reset-connections`, `migrate`,
## `restore-ydoc` and `reset-ydoc` are called by the backend only, and
## publishing them would put document deletion and the legacy migration one
## request away from the internet.
##
## `jwks` is public on purpose: it carries the public halves of the keys
## yhub signs with, and nothing else.
paths:
- /collaboration/ydoc/
- /collaboration/jwks/
## @param ingressCollaborationApi.hosts Additional host to configure for the Ingress
hosts: []
# - chart-example.local
## @param ingressCollaborationApi.tls.enabled Whether to enable TLS for the Ingress
## @param ingressCollaborationApi.tls.secretName Secret name for TLS config
## @skip ingressCollaborationApi.tls.additional
## @extra ingressCollaborationApi.tls.additional[].secretName Secret name for additional TLS config
## @extra ingressCollaborationApi.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingressCollaborationApi.customBackends Add custom backends to ingress
customBackends: []
## @skip ingressCollaborationApi.annotations
## Same as ingressCollaborationWS: no upstream-hash-by, any yhub replica
## answers for any document.
annotations: {}
## @param ingressAdmin.enabled whether to enable the Ingress or not
## @param ingressAdmin.className IngressClass to use for the Ingress
## @param ingressAdmin.host Host for the Ingress
## @param ingressAdmin.path Path to use for the Ingress
ingressAdmin:
enabled: false
className: null
host: impress.example.com
path: /admin
## @param ingressAdmin.hosts Additional host to configure for the Ingress
hosts: []
# - chart-example.local
## @param ingressAdmin.tls.enabled Whether to enable TLS for the Ingress
## @param ingressAdmin.tls.secretName Secret name for TLS config
## @skip ingressAdmin.tls.additional
## @extra ingressAdmin.tls.additional[].secretName Secret name for additional TLS config
## @extra ingressAdmin.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingressMedia.enabled whether to enable the Ingress or not
## @param ingressMedia.className IngressClass to use for the Ingress
## @param ingressMedia.host Host for the Ingress
## @param ingressMedia.path Path to use for the Ingress
ingressMedia:
enabled: false
className: null
host: impress.example.com
path: /media/(.*)
## @param ingressMedia.hosts Additional host to configure for the Ingress
hosts: []
# - chart-example.local
## @param ingressMedia.tls.enabled Whether to enable TLS for the Ingress
## @param ingressMedia.tls.secretName Secret name for TLS config
## @skip ingressMedia.tls.additional
## @extra ingressMedia.tls.additional[].secretName Secret name for additional TLS config
## @extra ingressMedia.tls.additional[].hosts[] Hosts for additional TLS config
tls:
enabled: true
secretName: null
additional: []
## @param ingressMedia.annotations.nginx.ingress.kubernetes.io/auth-url
## @param ingressMedia.annotations.nginx.ingress.kubernetes.io/auth-response-headers
## @param ingressMedia.annotations.nginx.ingress.kubernetes.io/upstream-vhost
## @param ingressMedia.annotations.nginx.ingress.kubernetes.io/configuration-snippet
annotations:
nginx.ingress.kubernetes.io/auth-url: https://impress.example.com/api/v1.0/documents/media-auth/
nginx.ingress.kubernetes.io/auth-response-headers: "Authorization, X-Amz-Date, X-Amz-Content-SHA256"
nginx.ingress.kubernetes.io/upstream-vhost: minio.impress.svc.cluster.local:9000
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header Content-Security-Policy "default-src 'none'" always;
## @param serviceMedia.host Hostname of the media storage backend (S3/MinIO) used by the media ingress
## @param serviceMedia.port Port of the media storage backend
## @param serviceMedia.annotations Annotations to add to the media ExternalName Service
serviceMedia:
host: minio.impress.svc.cluster.local
port: 9000
annotations: {}
## @section backend
backend:
## @param backend.command Override the backend container command
command: []
## @param backend.args Override the backend container args
args: []
## @param backend.replicas Amount of backend replicas
replicas: 3
## @param backend.shareProcessNamespace Enable share process namespace between containers
shareProcessNamespace: false
## @param backend.sidecars Add sidecars containers to backend deployment
sidecars: []
## @param backend.migrateJobAnnotations Annotations for the migrate job
migrateJobAnnotations: {}
## @param backend.jobs.ttlSecondsAfterFinished Period to wait before remove jobs
## @param backend.jobs.backoffLimit Numbers of jobs retries
jobs:
ttlSecondsAfterFinished: 30
backoffLimit: 2
## @param backend.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the backend container
## @param backend.securityContext.capabilities.drop List of capabilities to drop for the backend container
## @param backend.securityContext.runAsNonRoot Whether to run the backend container as a non-root user
## @param backend.securityContext.seccompProfile.type Seccomp profile type for the backend container
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
## @param backend.envVars Configure backend container environment variables
## @extra backend.envVars.BY_VALUE Example environment variable by setting value directly
## @extra backend.envVars.FROM_CONFIGMAP.configMapKeyRef.name Name of a ConfigMap when configuring env vars from a ConfigMap
## @extra backend.envVars.FROM_CONFIGMAP.configMapKeyRef.key Key within a ConfigMap when configuring env vars from a ConfigMap
## @extra backend.envVars.FROM_SECRET.secretKeyRef.name Name of a Secret when configuring env vars from a Secret
## @extra backend.envVars.FROM_SECRET.secretKeyRef.key Key within a Secret when configuring env vars from a Secret
## @skip backend.envVars
envVars:
<<: *commonEnvVars
## @skip backend.envFrom List of environment variables taken from Secrets or configMaps, common to backend and celery worker
envFrom: []
# envFrom:
# - secret:
# name: super-secret-user-credentials
# - configMapRef:
# name: my-environment-variables
## @extra backend.django.envVars Backend web deployment specific environment variables (not shared with celery worker)
## @skip backend.django.envVars
## @skip backend.django.envFrom List of environment variables taken from Secrets or configMaps, specific to the backend web deployment
django:
envVars: {}
envFrom: []
## @param backend.podAnnotations Annotations to add to the backend Pod
podAnnotations: {}
## @param backend.dpAnnotations Annotations to add to the backend Deployment
dpAnnotations: {}
## @param backend.service.type backend Service type
## @param backend.service.port backend Service listening port
## @param backend.service.targetPort backend container listening port
## @param backend.service.annotations Annotations to add to the backend Service
service:
type: ClusterIP
port: 80
targetPort: 8000
annotations: {}
## @param backend.migrate.command backend migrate command
## @param backend.migrate.restartPolicy backend migrate job restart policy
migrate:
command:
- /bin/sh
- "-c"
- |
attempt=0
until output=$(python manage.py check --database default 2>&1)
do
attempt=$((attempt + 1))
echo "Database check failed (attempt $attempt), retrying in 2s:"
echo "$output"
sleep 2
done
echo "Database is ready"
python manage.py migrate --no-input
restartPolicy: Never
## @param backend.createsuperuser.command backend migrate command
## @param backend.createsuperuser.restartPolicy backend migrate job restart policy
createsuperuser:
command:
- "/bin/sh"
- "-c"
- |
attempt=0
until output=$(python manage.py check --database default 2>&1)
do
attempt=$((attempt + 1))
echo "Database check failed (attempt $attempt), retrying in 2s:"
echo "$output"
sleep 2
done
echo "Database is ready"
python manage.py createsuperuser --email $DJANGO_SUPERUSER_EMAIL --password $DJANGO_SUPERUSER_PASSWORD
restartPolicy: Never
## @extra backend.job job dedicated to run a random management command, for example after a deployment
## @param backend.job.name The name to use to describe this job
## @param backend.job.command The management command to execute
## @param backend.job.restartPolicy The restart policy for the job.
## @extra backend.job.annotations Annotations to add to the job [default: argocd.argoproj.io/hook: PostSync]
## @skip backend.job.annotations.argocd.argoproj.io/hook
job:
name: ""
command: []
restartPolicy: Never
annotations:
argocd.argoproj.io/hook: PostSync
# List of cronjob to add
# cronjobs:
# - name: reset-database
# schedule: "0 */2 * * *"
# command:
# - "/bin/sh"
# - "-c"
# - python manage.py flush --no-input
## @param backend.cronjobs Cronjob name, schedule, command
cronjobs: []
## @param backend.probes.liveness.path [nullable] Configure path for backend HTTP liveness probe
## @param backend.probes.liveness.targetPort [nullable] Configure port for backend HTTP liveness probe
## @param backend.probes.liveness.initialDelaySeconds [nullable] Configure initial delay for backend liveness probe
## @param backend.probes.liveness.timeoutSeconds [nullable] Configure timeout for backend liveness probe
## @extra backend.probes.startup.path [nullable] Configure path for backend HTTP startup probe
## @extra backend.probes.startup.targetPort [nullable] Configure port for backend HTTP startup probe
## @extra backend.probes.startup.initialDelaySeconds [nullable] Configure initial delay for backend startup probe
## @extra backend.probes.startup.timeoutSeconds [nullable] Configure timeout for backend startup probe
## @param backend.probes.readiness.path [nullable] Configure path for backend HTTP readiness probe
## @param backend.probes.readiness.targetPort [nullable] Configure port for backend HTTP readiness probe
## @param backend.probes.readiness.initialDelaySeconds [nullable] Configure initial delay for backend readiness probe
## @param backend.probes.readiness.timeoutSeconds [nullable] Configure timeout for backend readiness probe
probes:
liveness:
path: /__lbheartbeat__
initialDelaySeconds: 10
readiness:
path: /__heartbeat__
initialDelaySeconds: 10
## @param backend.resources Resource requirements for the backend container
resources: {}
## @param backend.nodeSelector Node selector for the backend Pod
nodeSelector: {}
## @param backend.tolerations Tolerations for the backend Pod
tolerations: []
## @param backend.affinity Affinity for the backend Pod
affinity: {}
## @param backend.persistence Additional volumes to create and mount on the backend. Used for debugging purposes
## @extra backend.persistence.volume-name.size Size of the additional volume
## @extra backend.persistence.volume-name.type Type of the additional volume, persistentVolumeClaim or emptyDir
## @extra backend.persistence.volume-name.mountPath Path where the volume should be mounted to
persistence: {}
## @param backend.extraVolumeMounts Additional volumes to mount on the backend.
extraVolumeMounts: []
## @param backend.extraVolumes Additional volumes to mount on the backend.
extraVolumes: []
## @param backend.pdb.enabled Enable pdb on backend
pdb:
enabled: true
## @param backend.serviceAccountName Optional service account name to use for backend pods
serviceAccountName: null
## @param backend.themeCustomization.enabled Enable theme customization
## @param backend.themeCustomization.file_content Content of the theme customization file. Must be a json object.
## @param backend.themeCustomization.mount_path Path where the customization file will be mounted in the backend deployment.
themeCustomization:
enabled: false
file_content: ""
mount_path: /app/impress/configuration/theme
## @param backend.celery.replicas Amount of celery replicas
## @param backend.celery.command Override the celery container command
## @param backend.celery.args Override the celery container args
## @param backend.celery.resources Resource requirements for the celery container
## @param backend.celery.probes.liveness.exec.command Override the celery container liveness probe command
## @param backend.celery.probes.liveness.initialDelaySeconds Initial delay for the celery container liveness probe
## @param backend.celery.probes.liveness.timeoutSeconds Timeout for the celery container liveness probe
## @param backend.celery.probes.readiness.exec.command Override the celery container readiness probe command
## @param backend.celery.probes.readiness.initialDelaySeconds Initial delay for the celery container readiness probe
## @param backend.celery.probes.readiness.timeoutSeconds Timeout for the celery container readiness probe
## @extra backend.celery.envVars Celery worker specific environment variables (not shared with the backend web deployment)
## @skip backend.celery.envVars
## @skip backend.celery.envFrom List of environment variables taken from Secrets or configMaps, specific to celery worker
celery:
replicas: 1
command: []
args:
[
"celery",
"-A",
"impress.celery_app",
"worker",
"-l",
"INFO",
"-n",
"impress@%h",
]
envVars: {}
envFrom: []
resources: {}
probes:
liveness:
exec:
command:
[
"/bin/sh",
"-c",
"celery -A impress.celery_app inspect ping -d impress@$HOSTNAME",
]
initialDelaySeconds: 60
timeoutSeconds: 5
readiness:
exec:
command:
[
"/bin/sh",
"-c",
"celery -A impress.celery_app inspect ping -d impress@$HOSTNAME",
]
initialDelaySeconds: 15
timeoutSeconds: 5
## @section frontend
frontend:
## @param frontend.image.repository Repository to use to pull impress's frontend container image
## @param frontend.image.tag impress's frontend container tag
## @param frontend.image.pullPolicy frontend container image pull policy
image:
repository: lasuite/impress-frontend
pullPolicy: IfNotPresent
tag: "latest"
## @param frontend.command Override the frontend container command
command: []
## @param frontend.args Override the frontend container args
args: []
## @param frontend.replicas Amount of frontend replicas
replicas: 3
## @param frontend.shareProcessNamespace Enable share process namespace between containers
shareProcessNamespace: false
## @param frontend.sidecars Add sidecars containers to frontend deployment
sidecars: []
## @param frontend.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the frontend container
## @param frontend.securityContext.capabilities.drop List of capabilities to drop for the frontend container
## @param frontend.securityContext.runAsNonRoot Whether to run the frontend container as a non-root user
## @param frontend.securityContext.seccompProfile.type Seccomp profile type for the frontend container
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
## @param frontend.envVars Configure frontend container environment variables
## @extra frontend.envVars.BY_VALUE Example environment variable by setting value directly
## @extra frontend.envVars.FROM_CONFIGMAP.configMapKeyRef.name Name of a ConfigMap when configuring env vars from a ConfigMap
## @extra frontend.envVars.FROM_CONFIGMAP.configMapKeyRef.key Key within a ConfigMap when configuring env vars from a ConfigMap
## @extra frontend.envVars.FROM_SECRET.secretKeyRef.name Name of a Secret when configuring env vars from a Secret
## @extra frontend.envVars.FROM_SECRET.secretKeyRef.key Key within a Secret when configuring env vars from a Secret
## @skip frontend.envVars
envVars:
<<: *commonEnvVars
## @skip frontend.envFrom List of environment variables taken from Secrets or configMaps
envFrom: []
# envFrom:
# - secret:
# name: super-secret-user-credentials
# - configMapRef:
# name: my-environment-variables
## @param frontend.podAnnotations Annotations to add to the frontend Pod
podAnnotations: {}
## @param frontend.dpAnnotations Annotations to add to the frontend Deployment
dpAnnotations: {}
## @param frontend.service.type frontend Service type
## @param frontend.service.port frontend Service listening port
## @param frontend.service.targetPort frontend container listening port
## @param frontend.service.annotations Annotations to add to the frontend Service
service:
type: ClusterIP
port: 80
targetPort: 8080
annotations: {}
## @param frontend.probes Configure probe for frontend
## @extra frontend.probes.liveness.path Configure path for frontend HTTP liveness probe
## @extra frontend.probes.liveness.targetPort Configure port for frontend HTTP liveness probe
## @extra frontend.probes.liveness.initialDelaySeconds Configure initial delay for frontend liveness probe
## @extra frontend.probes.liveness.initialDelaySeconds Configure timeout for frontend liveness probe
## @extra frontend.probes.startup.path Configure path for frontend HTTP startup probe
## @extra frontend.probes.startup.targetPort Configure port for frontend HTTP startup probe
## @extra frontend.probes.startup.initialDelaySeconds Configure initial delay for frontend startup probe
## @extra frontend.probes.startup.initialDelaySeconds Configure timeout for frontend startup probe
## @extra frontend.probes.readiness.path Configure path for frontend HTTP readiness probe
## @extra frontend.probes.readiness.targetPort Configure port for frontend HTTP readiness probe
## @extra frontend.probes.readiness.initialDelaySeconds Configure initial delay for frontend readiness probe
## @extra frontend.probes.readiness.initialDelaySeconds Configure timeout for frontend readiness probe
probes: {}
## @param frontend.resources Resource requirements for the frontend container
resources: {}
## @param frontend.nodeSelector Node selector for the frontend Pod
nodeSelector: {}
## @param frontend.tolerations Tolerations for the frontend Pod
tolerations: []
## @param frontend.affinity Affinity for the frontend Pod
affinity: {}
## @param frontend.persistence Additional volumes to create and mount on the frontend. Used for debugging purposes
## @extra frontend.persistence.volume-name.size Size of the additional volume
## @extra frontend.persistence.volume-name.type Type of the additional volume, persistentVolumeClaim or emptyDir
## @extra frontend.persistence.volume-name.mountPath Path where the volume should be mounted to
persistence: {}
## @param frontend.extraVolumeMounts Additional volumes to mount on the frontend.
extraVolumeMounts: []
## @param frontend.extraVolumes Additional volumes to mount on the frontend.
extraVolumes: []
## @param frontend.pdb.enabled Enable pdb on frontend
pdb:
enabled: true
## @param frontend.serviceAccountName Optional service account name to use for frontend pods
serviceAccountName: null
## @param frontend.robotsTxt.enabled Enable serving a custom robots.txt file from the frontend, e.g. to disallow indexing of non-production instances
## @param frontend.robotsTxt.content Content of the robots.txt file
robotsTxt:
enabled: false
content: |
User-agent: *
Allow: /
## @section posthog
posthog:
## @param posthog.ingress.enabled Enable or disable the ingress resource creation
## @param posthog.ingress.className Kubernetes ingress class name to use (e.g., nginx, traefik)
## @param posthog.ingress.host Primary hostname for the ingress resource
## @param posthog.ingress.path URL path prefix for the ingress routes (e.g., /)
## @param posthog.ingress.hosts Additional hostnames array to be included in the ingress
## @param posthog.ingress.tls.enabled Enable or disable TLS/HTTPS for the ingress
## @param posthog.ingress.tls.additional Additional TLS configurations for extra hosts/certificates
## @param posthog.ingress.customBackends Custom backend service configurations for the ingress
## @param posthog.ingress.annotations Additional Kubernetes annotations to apply to the ingress
ingress:
enabled: false
className: null
host: impress.example.com
path: /
hosts: []
tls:
enabled: true
additional: []
customBackends: []
annotations: {}
## @param posthog.ingressAssets.enabled Enable or disable the ingress resource creation
## @param posthog.ingressAssets.className Kubernetes ingress class name to use (e.g., nginx, traefik)
## @param posthog.ingressAssets.host Primary hostname for the ingress resource
## @param posthog.ingressAssets.paths URL paths prefix for the ingress routes (e.g., /static)
## @param posthog.ingressAssets.hosts Additional hostnames array to be included in the ingress
## @param posthog.ingressAssets.tls.enabled Enable or disable TLS/HTTPS for the ingress
## @param posthog.ingressAssets.tls.additional Additional TLS configurations for extra hosts/certificates
## @param posthog.ingressAssets.customBackends Custom backend service configurations for the ingress
## @param posthog.ingressAssets.annotations Additional Kubernetes annotations to apply to the ingress
ingressAssets:
enabled: false
className: null
host: impress.example.com
paths:
- /static
- /array
hosts: []
tls:
enabled: true
additional: []
customBackends: []
annotations: {}
## @param posthog.service.type Service type (e.g. ExternalName, ClusterIP, LoadBalancer)
## @param posthog.service.externalName External service hostname when type is ExternalName
## @param posthog.service.port Port number for the service
## @param posthog.service.annotations Additional annotations to apply to the service
service:
type: ExternalName
externalName: eu.i.posthog.com
port: 443
annotations: {}
## @param posthog.assetsService.type Service type (e.g. ExternalName, ClusterIP, LoadBalancer)
## @param posthog.assetsService.externalName External service hostname when type is ExternalName
## @param posthog.assetsService.port Port number for the service
## @param posthog.assetsService.annotations Additional annotations to apply to the service
assetsService:
type: ExternalName
externalName: eu-assets.i.posthog.com
port: 443
annotations: {}
## @section yProvider
##
## The conversion service, and nothing else since the collaboration moved to
## yhub: this deployment *is* the converter the backend calls on
## `Y_PROVIDER_API_BASE_URL`, so there is no separate converter release to
## enable anymore.
yProvider:
## @param yProvider.image.repository Repository to use to pull impress's yProvider container image
## @param yProvider.image.tag impress's yProvider container tag
## @param yProvider.image.pullPolicy yProvider container image pull policy
image:
repository: lasuite/impress-y-provider
pullPolicy: IfNotPresent
tag: "latest"
## @param yProvider.command Override the yProvider container command
command: []
## @param yProvider.args Override the yProvider container args
args: []
## @param yProvider.replicas Amount of yProvider replicas
replicas: 3
## @param yProvider.shareProcessNamespace Enable share process nameyProvider between containers
shareProcessNamespace: false
## @param yProvider.sidecars Add sidecars containers to yProvider deployment
sidecars: []
## @param yProvider.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the yProvider container
## @param yProvider.securityContext.capabilities.drop List of capabilities to drop for the yProvider container
## @param yProvider.securityContext.runAsNonRoot Whether to run the yProvider container as a non-root user
## @param yProvider.securityContext.seccompProfile.type Seccomp profile type for the yProvider container
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
## @param yProvider.envVars Configure yProvider container environment variables
## @extra yProvider.envVars.BY_VALUE Example environment variable by setting value directly
## @extra yProvider.envVars.FROM_CONFIGMAP.configMapKeyRef.name Name of a ConfigMap when configuring env vars from a ConfigMap
## @extra yProvider.envVars.FROM_CONFIGMAP.configMapKeyRef.key Key within a ConfigMap when configuring env vars from a ConfigMap
## @extra yProvider.envVars.FROM_SECRET.secretKeyRef.name Name of a Secret when configuring env vars from a Secret
## @extra yProvider.envVars.FROM_SECRET.secretKeyRef.key Key within a Secret when configuring env vars from a Secret
## @skip yProvider.envVars
envVars:
<<: *commonEnvVars
## @skip yProvider.envFrom List of environment variables taken from Secrets or configMaps
envFrom: []
# envFrom:
# - secret:
# name: super-secret-user-credentials
# - configMapRef:
# name: my-environment-variables
## @param yProvider.podAnnotations Annotations to add to the yProvider Pod
podAnnotations: {}
## @param yProvider.dpAnnotations Annotations to add to the yProvider Deployment
dpAnnotations: {}
## @param yProvider.service.type yProvider Service type
## @param yProvider.service.port yProvider Service listening port
## @param yProvider.service.targetPort yProvider container listening port
## @param yProvider.service.annotations Annotations to add to the yProvider Service
service:
type: ClusterIP
port: 443
targetPort: 4444
annotations: {}
## @param yProvider.probes.liveness.path Configure path for yProvider HTTP liveness probe
## @param yProvider.probes.liveness.initialDelaySeconds Configure initial delay for yProvider liveness probe
## @extra yProvider.probes.liveness.targetPort Configure port for yProvider HTTP liveness probe
## @extra yProvider.probes.liveness.timeoutSeconds Configure timeout for yProvider liveness probe
## @extra yProvider.probes.startup.path Configure path for yProvider HTTP startup probe
## @extra yProvider.probes.startup.targetPort Configure port for yProvider HTTP startup probe
## @extra yProvider.probes.startup.initialDelaySeconds Configure initial delay for yProvider startup probe
## @extra yProvider.probes.startup.timeoutSeconds Configure timeout for yProvider startup probe
## @extra yProvider.probes.readiness.path Configure path for yProvider HTTP readiness probe
## @extra yProvider.probes.readiness.targetPort Configure port for yProvider HTTP readiness probe
## @extra yProvider.probes.readiness.initialDelaySeconds Configure initial delay for yProvider readiness probe
## @extra yProvider.probes.readiness.timeoutSeconds Configure timeout for yProvider readiness probe
probes:
liveness:
path: /ping
initialDelaySeconds: 10
## @param yProvider.resources Resource requirements for the yProvider container
resources: {}
## @param yProvider.nodeSelector Node selector for the yProvider Pod
nodeSelector: {}
## @param yProvider.tolerations Tolerations for the yProvider Pod
tolerations: []
## @param yProvider.affinity Affinity for the yProvider Pod
affinity: {}
## @param yProvider.persistence Additional volumes to create and mount on the yProvider. Used for debugging purposes
## @extra yProvider.persistence.volume-name.size Size of the additional volume
## @extra yProvider.persistence.volume-name.type Type of the additional volume, persistentVolumeClaim or emptyDir
## @extra yProvider.persistence.volume-name.mountPath Path where the volume should be mounted to
persistence: {}
## @param yProvider.extraVolumeMounts Additional volumes to mount on the yProvider.
extraVolumeMounts: []
## @param yProvider.extraVolumes Additional volumes to mount on the yProvider.
extraVolumes: []
## @param yProvider.pdb.enabled Enable pdb on yProvider
pdb:
enabled: true
## @param yProvider.serviceAccountName Optional service account name to use for yProvider pods
serviceAccountName: null
## @section JWT signing keys
##
## The services do not share a secret: each signs the calls it makes to the
## others with an RSA key of its own and publishes the public half on its JWKS
## endpoint, where the others read it. Enabling this generates those keys on
## the cluster — a job creates them once in a secret every service mounts
## read-only, and leaves them alone on the next run — and points the backend
## and the collaboration server at them. No key is ever templated into a
## manifest or written in a values file, and only that job may create the
## secret: nothing in the release can read it back through the api.
##
## Leave it disabled to keep providing the keys yourself, through
## `backend.envVars.JWT_PRIVATE_KEY_FILE` and
## `yhub.envVars.YHUB_JWT_PRIVATE_KEY_FILE` and volumes of your own — both are
## left untouched when they are set by hand, enabled or not.
jwtKeys:
## @param jwtKeys.enabled Generate the JWT signing keys of the services on the cluster
enabled: false
## @param jwtKeys.existingSecret Secret already holding the keys, generated in a secret of the chart's own when empty
##
## It has to hold the two filenames below. Naming one skips the job and the
## rights it needs, the services only mount what is there.
existingSecret: null
## @param jwtKeys.mountPath Path the keys are mounted at, in every service reading them
mountPath: /data/jwt
## @param jwtKeys.backendKeyFilename Name of the key signing the tokens the backend issues
backendKeyFilename: private.pem
## @param jwtKeys.yhubKeyFilename Name of the key signing the calls the collaboration server makes to the backend
yhubKeyFilename: yhub-private.pem
## @param jwtKeys.keySize Size, in bits, of the generated RSA keys
keySize: 2048
## @param jwtKeys.rbac.create Create the service account and the role the job needs to create the secret
##
## Turning it off means providing `jwtKeys.job.serviceAccountName` with an
## account allowed to `create` secrets and to `get` the one named above.
rbac:
create: true
## @param jwtKeys.image.repository Repository to use to pull the image generating the keys
## @param jwtKeys.image.tag Tag of the image generating the keys
## @param jwtKeys.image.pullPolicy Pull policy of the image generating the keys
##
## openssl and a shell, nothing else. Its entrypoint is openssl itself, which
## the job replaces by the script generating both keys.
image:
repository: alpine/openssl
pullPolicy: IfNotPresent
tag: "3.5.7"
## @param jwtKeys.kubectlImage.repository Repository to use to pull the image handing the keys to the secret
## @param jwtKeys.kubectlImage.tag Tag of the image handing the keys to the secret
## @param jwtKeys.kubectlImage.pullPolicy Pull policy of the image handing the keys to the secret
##
## A second image because the openssl one carries no kubectl, and reaching
## the api with what it does carry (busybox wget, which cannot be told about
## the cluster ca) would mean sending the token over an unverified
## connection.
kubectlImage:
repository: dtzar/helm-kubectl
pullPolicy: IfNotPresent
tag: "3.16.2"
## @param jwtKeys.job.podSecurityContext Pod security context of the generating job
## @param jwtKeys.job.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the job containers
## @param jwtKeys.job.securityContext.capabilities.drop List of capabilities to drop for the job containers
## @param jwtKeys.job.securityContext.runAsNonRoot Whether to run the job containers as a non-root user
## @param jwtKeys.job.securityContext.runAsUser User the job containers run as, their images declaring none
## @param jwtKeys.job.securityContext.runAsGroup Group the job containers run as
## @param jwtKeys.job.securityContext.seccompProfile.type Seccomp profile type for the job containers
## @param jwtKeys.job.restartPolicy Restart policy of the generating job
## @param jwtKeys.job.backoffLimit Numbers of generating job retries
## @param jwtKeys.job.ttlSecondsAfterFinished Period to wait before removing the generating job
## @param jwtKeys.job.generateCommand Override the command generating the keys
## @param jwtKeys.job.publishCommand Override the command creating the secret from the generated keys
## @param jwtKeys.job.annotations Annotations to add to the generating job
## @param jwtKeys.job.podAnnotations Annotations to add to the generating job Pod
## @param jwtKeys.job.resources Resource requirements for the job containers
## @param jwtKeys.job.nodeSelector Node selector for the generating job Pod
## @param jwtKeys.job.tolerations Tolerations for the generating job Pod
## @param jwtKeys.job.affinity Affinity for the generating job Pod
## @param jwtKeys.job.serviceAccountName Service account of the generating job Pod, the one created above when empty
## @skip jwtKeys.job.env
job:
podSecurityContext: {}
# neither image declares a user of its own, and kubernetes refuses to start
# a container asking for runAsNonRoot without knowing which user to run as
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
seccompProfile:
type: RuntimeDefault
restartPolicy: Never
backoffLimit: 2
ttlSecondsAfterFinished: 30
generateCommand: []
publishCommand: []
annotations: {}
podAnnotations: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
serviceAccountName: null
env: []
## @section yhub
##
## The collaboration server: it serves the whole /collaboration/ prefix, the
## websocket included, and replaces the y-provider on that role. It keeps the
## live state of a document in redis/valkey and persists it to its own
## PostgreSQL database, so it needs both — set `yhub.envVars.REDIS` and
## `yhub.envVars.POSTGRES`, there is nothing sensible to default them to.
## Disabling it sends the /collaboration/ ingresses back to the y-provider.
yhub:
## @param yhub.enabled Enable the yhub collaboration server, its service and its init-db job
enabled: true
## @param yhub.image.repository Repository to use to pull the yhub container image
## @param yhub.image.tag yhub container tag
## @param yhub.image.pullPolicy yhub container image pull policy
image:
repository: lasuite/impress-yhub
pullPolicy: IfNotPresent
tag: "latest"
## @param yhub.command Override the yhub container command
command: []
## @param yhub.args Override the yhub container args
args: []
## @param yhub.replicas Amount of yhub replicas
## Clients editing the same document need not land on the same pod: updates
## travel through redis. Each replica also runs a worker unless the worker is
## deployed apart, see below.
replicas: 3
## @param yhub.worker.enabled Deploy the worker apart from the server, each scaling on its own
## @param yhub.worker.replicas Amount of yhub worker replicas
## @param yhub.worker.resources Resource requirements for the yhub worker container, the server ones when empty
## @param yhub.worker.podAnnotations Annotations to add to the yhub worker Pod, the server ones when empty
## @param yhub.worker.dpAnnotations Annotations to add to the yhub worker Deployment, the server ones when empty
## @param yhub.worker.nodeSelector Node selector for the yhub worker Pod, the server one when empty
## @param yhub.worker.tolerations Tolerations for the yhub worker Pod, the server ones when empty
## @param yhub.worker.affinity Affinity for the yhub worker Pod, the server one when empty
## @param yhub.worker.terminationGracePeriodSeconds Grace period given to a worker pod to finish its task, the server one when empty
## @param yhub.worker.pdb.enabled Enable pdb on the yhub worker
## @skip yhub.worker.envVars Environment variables of the worker only, on top of yhub.envVars
##
## yhub is two halves sharing nothing but redis and postgres: the server
## holds the websockets and serves the routes, the worker drains the stream
## into postgres. One process runs both by default. Enabling this splits them
## into two deployments — `YHUB_ROLE=server` and `YHUB_ROLE=worker`, the only
## difference between them — so the server scales with the connected editors
## and the worker with the write throughput.
##
## The worker binds nothing: no service, no ingress, and no probes to give it
## (its liveness is its process). Everything not named here is the server's:
## same image, same envVars, same secrets, same volumes.
worker:
enabled: false
replicas: 1
envVars: {}
resources: {}
podAnnotations: {}
dpAnnotations: {}
nodeSelector: {}
tolerations: []
affinity: {}
terminationGracePeriodSeconds: null
pdb:
enabled: true
## @param yhub.shareProcessNamespace Enable share process namespace between containers
shareProcessNamespace: false
## @param yhub.sidecars Add sidecars containers to yhub deployment
sidecars: []
## @param yhub.terminationGracePeriodSeconds Grace period given to a yhub pod to drain before it is killed
terminationGracePeriodSeconds: 60
## @param yhub.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the yhub container
## @param yhub.securityContext.capabilities.drop List of capabilities to drop for the yhub container
## @param yhub.securityContext.runAsNonRoot Whether to run the yhub container as a non-root user
## @param yhub.securityContext.runAsUser User the yhub container runs as
## @param yhub.securityContext.runAsGroup Group the yhub container runs as
## @param yhub.securityContext.seccompProfile.type Seccomp profile type for the yhub container
##
## The user is named rather than left to the image: asking for runAsNonRoot
## without it is refused outright by kubernetes ("container has runAsNonRoot
## and image will run as root") on any image that declares none — which every
## yhub image built before the un-privileged user was added to its Dockerfile
## does. 1000 is the `node` user the base image already carries.
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
seccompProfile:
type: RuntimeDefault
## @param yhub.envVars Configure yhub container environment variables
## @extra yhub.envVars.REDIS Required, redis/valkey url holding the live document state (e.g. redis://valkey:6379/0)
## @extra yhub.envVars.POSTGRES Required, url of the yhub database, created by the init-db job (e.g. postgres://user:pass@postgres:5432/yhub)
## @extra yhub.envVars.REDIS_PREFIX Namespace of the redis keys, when the instance is shared (default: yhub)
## @extra yhub.envVars.COLLABORATION_BACKEND_BASE_URL Base url of the Docs backend, which yhub asks about users and document access rights
## @extra yhub.envVars.COLLABORATION_SERVER_ORIGIN Comma separated list of the origins allowed to open a websocket
## @extra yhub.envVars.YHUB_JWT_PRIVATE_KEY_FILE Path to the RSA private key (PEM) yhub signs its calls to the backend with, mounted from a secret
## @extra yhub.envVars.SOFT_MIGRATION Set to "true" to seed rooms from the legacy Django/S3 document store on first access
## @extra yhub.envVars.BY_VALUE Example environment variable by setting value directly
## @extra yhub.envVars.FROM_CONFIGMAP.configMapKeyRef.name Name of a ConfigMap when configuring env vars from a ConfigMap
## @extra yhub.envVars.FROM_CONFIGMAP.configMapKeyRef.key Key within a ConfigMap when configuring env vars from a ConfigMap
## @extra yhub.envVars.FROM_SECRET.secretKeyRef.name Name of a Secret when configuring env vars from a Secret
## @extra yhub.envVars.FROM_SECRET.secretKeyRef.key Key within a Secret when configuring env vars from a Secret
## @skip yhub.envVars
envVars:
<<: *commonEnvVars
## @skip yhub.envFrom List of environment variables taken from Secrets or configMaps
envFrom: []
# envFrom:
# - secret:
# name: super-secret-user-credentials
# - configMapRef:
# name: my-environment-variables
## @param yhub.podAnnotations Annotations to add to the yhub Pod
podAnnotations: {}
## @param yhub.dpAnnotations Annotations to add to the yhub Deployment
dpAnnotations: {}
## @param yhub.initDbJobAnnotations Annotations for the yhub init-db job
initDbJobAnnotations: {}
## @param yhub.jobs.ttlSecondsAfterFinished Period to wait before removing the init-db job
## @param yhub.jobs.backoffLimit Numbers of init-db job retries
jobs:
ttlSecondsAfterFinished: 30
backoffLimit: 2
## @param yhub.initDb.enabled Run the job creating and upgrading the yhub schema
## @param yhub.initDb.command Override the command creating and upgrading the yhub schema
## @param yhub.initDb.retries How many times the schema script is retried while the postgres server does not answer
## @param yhub.initDb.retryDelaySeconds Seconds between two attempts
## @param yhub.initDb.restartPolicy Restart policy of the init-db job
## @skip yhub.initDb.resources Resource requirements for the init-db container, defaults to yhub.resources
##
## The job runs in the default sync wave, next to the backend migrate job,
## and waits for its database the same way that one waits for Django's:
## nothing in this chart creates the postgres server, so it has to be given
## the time whatever does takes. The defaults below wait five minutes.
initDb:
enabled: true
command: []
retries: 60
retryDelaySeconds: 5
restartPolicy: Never
resources: {}
## @param yhub.service.type yhub Service type
## @param yhub.service.port yhub Service listening port
## @param yhub.service.targetPort yhub container listening port
## @param yhub.service.annotations Annotations to add to the yhub Service
service:
type: ClusterIP
port: 443
targetPort: 3002
annotations: {}
## @param yhub.probes.liveness.path Configure path for yhub HTTP liveness probe
## @param yhub.probes.liveness.initialDelaySeconds Configure initial delay for yhub liveness probe
## @param yhub.probes.liveness.timeoutSeconds Configure timeout for yhub liveness probe
## @param yhub.probes.readiness.path Configure path for yhub HTTP readiness probe
## @param yhub.probes.readiness.initialDelaySeconds Configure initial delay for yhub readiness probe
## @param yhub.probes.readiness.timeoutSeconds Configure timeout for yhub readiness probe
## @extra yhub.probes.liveness.targetPort Configure port for yhub HTTP liveness probe
## @extra yhub.probes.readiness.targetPort Configure port for yhub HTTP readiness probe
## @extra yhub.probes.startup.path Configure path for yhub HTTP startup probe
## @extra yhub.probes.startup.targetPort Configure port for yhub HTTP startup probe
## @extra yhub.probes.startup.initialDelaySeconds Configure initial delay for yhub startup probe
## @extra yhub.probes.startup.timeoutSeconds Configure timeout for yhub startup probe
##
## Two routes yhub serves unauthenticated, and they answer different
## questions on purpose:
##
## - `ping` returns 200 without touching anything. Being answered at all is
## the proof the http channel and the event loop are alive, which is as far
## as a liveness probe should ever go: restarting a server over a store it
## does not reach would drop the websockets it is happily serving.
## - `ready` asks postgres and redis whether they answer, and returns 503
## when either does not. That takes the pod out of the service endpoints
## and leaves its siblings serving, which is what readiness is for. Its
## timeout is above the two seconds the server itself gives each store, so
## an unreachable one is reported rather than cut off.
probes:
liveness:
path: /collaboration/ping/v1
initialDelaySeconds: 10
timeoutSeconds: 2
readiness:
path: /collaboration/ready/v1
initialDelaySeconds: 5
timeoutSeconds: 3
## @param yhub.resources Resource requirements for the yhub container
resources: {}
## @param yhub.nodeSelector Node selector for the yhub Pod
nodeSelector: {}
## @param yhub.tolerations Tolerations for the yhub Pod
tolerations: []
## @param yhub.affinity Affinity for the yhub Pod
affinity: {}
## @param yhub.persistence Additional volumes to create and mount on the yhub. Used for debugging purposes
## @extra yhub.persistence.volume-name.size Size of the additional volume
## @extra yhub.persistence.volume-name.type Type of the additional volume, persistentVolumeClaim or emptyDir
## @extra yhub.persistence.volume-name.mountPath Path where the volume should be mounted to
persistence: {}
## @param yhub.extraVolumeMounts Additional volumes to mount on the yhub. Mounted on the init-db job too
extraVolumeMounts: []
## @param yhub.extraVolumes Additional volumes to mount on the yhub. Mounted on the init-db job too
extraVolumes: []
## @param yhub.pdb.enabled Enable pdb on yhub
pdb:
enabled: true
## @param yhub.serviceAccountName Optional service account name to use for yhub pods
serviceAccountName: null
## @section docSpec
docSpec:
## @param docSpec.enabled Enable docSpec deployment
enabled: false
## @param docSpec.image.repository Repository to use to pull docSpec container image
## @param docSpec.image.tag docSpec container tag
## @param docSpec.image.pullPolicy docSpec container image pull policy
image:
repository: ghcr.io/docspec/api
pullPolicy: IfNotPresent
tag: "1.21.4"
## @param docSpec.command Override the docSpec container command
command: []
## @param docSpec.args Override the docSpec container args
args: []
## @param docSpec.replicas Amount of docSpec replicas
replicas: 1
## @param docSpec.securityContext.allowPrivilegeEscalation Whether to allow privilege escalation for the docSpec container
## @param docSpec.securityContext.capabilities.drop List of capabilities to drop for the docSpec container
## @param docSpec.securityContext.runAsNonRoot Whether to run the docSpec container as a non-root user
## @param docSpec.securityContext.seccompProfile.type Seccomp profile type for the docSpec container
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- "ALL"
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
## @param docSpec.envVars Configure docSpec container environment variables
envVars: {}
## @skip docSpec.envFrom List of environment variables taken from Secrets or configMaps
envFrom: []
# envFrom:
# - secret:
# name: super-secret-user-credentials
# - configMapRef:
# name: my-environment-variables
## @param docSpec.service.type docSpec Service type
## @param docSpec.service.port docSpec Service listening port
## @param docSpec.service.targetPort docSpec container listening port
service:
type: ClusterIP
port: 4000
targetPort: 3000
## @param docSpec.probes.liveness.path Configure path for docSpec HTTP liveness probe
## @param docSpec.probes.readiness.path Configure path for docSpec HTTP readiness probe
probes:
liveness:
path: /health
readiness:
path: /health
## @param docSpec.resources docSpec resources
resources: {}
## @param docSpec.nodeSelector Node selector for the docSpec Pod
nodeSelector: {}
## @param docSpec.tolerations Tolerations for the docSpec Pod
tolerations: []
## @param docSpec.affinity Affinity for the docSpec Pod
affinity: {}
## @param docSpec.extraVolumeMounts Additional volumes to mount on docSpec
extraVolumeMounts: []
## @param docSpec.extraVolumes Additional volumes to mount on docSpec
extraVolumes: []