{"id":13623025,"url":"https://github.com/8gears/n8n-helm-chart","last_synced_at":"2025-04-15T10:32:21.424Z","repository":{"id":40241122,"uuid":"315769786","full_name":"8gears/n8n-helm-chart","owner":"8gears","description":"A Kubernetes Helm chart for n8n - a workflow automation tool. Easily automate tasks across different services on self hosted onKubernetes","archived":false,"fork":false,"pushed_at":"2025-03-31T11:01:53.000Z","size":255,"stargazers_count":296,"open_issues_count":17,"forks_count":135,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-06T09:29:50.701Z","etag":null,"topics":["helm-chart","kubernetes","n8n","self-hosted","workflow","workflow-automation"],"latest_commit_sha":null,"homepage":"https://artifacthub.io/packages/helm/open-8gears/n8n","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/8gears.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-24T22:41:12.000Z","updated_at":"2025-04-03T14:31:32.000Z","dependencies_parsed_at":"2024-01-14T08:04:28.322Z","dependency_job_id":"af07cb16-3005-4f69-aa95-22283659e0df","html_url":"https://github.com/8gears/n8n-helm-chart","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8gears%2Fn8n-helm-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8gears%2Fn8n-helm-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8gears%2Fn8n-helm-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8gears%2Fn8n-helm-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/8gears","download_url":"https://codeload.github.com/8gears/n8n-helm-chart/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249051773,"owners_count":21204886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["helm-chart","kubernetes","n8n","self-hosted","workflow","workflow-automation"],"created_at":"2024-08-01T21:01:27.177Z","updated_at":"2025-04-15T10:32:21.416Z","avatar_url":"https://github.com/8gears.png","language":"Smarty","funding_links":[],"categories":["Smarty"],"sub_categories":[],"readme":"[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/n8n)](https://artifacthub.io/packages/helm/open-8gears/n8n)\n\n\u003e [!NOTE]\n\u003e The n8n Helm chart is growing in popularity.\n\u003e We're looking for additional passionate maintainers and contributors\n\u003e to improve and maintain this chart, governance, development, documentation and CI/CD workflows.\n\u003e If you're interested in making a difference,\n\u003e [join the discussion](https://github.com/8gears/n8n-helm-chart/discussions/90).\n\n\u003e [!WARNING]\n\u003e Version 1.0.0 of this Chart includes breaking changes and is not backwards compatible with previous versions.\n\u003e Please review the migration guide below before upgrading.\n\u003e\n\n\n# n8n Helm Chart for Kubernetes\n\n[n8n](https://github.com/n8n-io/n8n) is an extendable workflow automation tool.\n\n\n\nThe Helm chart source code location is [github.com/8gears/n8n-helm-chart](https://github.com/8gears/n8n-helm-chart)\n\n## Requirements\n\nBefore you start, make sure you have the following tools ready:\n\n- Helm \u003e= 3.8\n- external Postgres DB or embedded SQLite (SQLite is bundled with n8n)\n- Helmfile (Optional)\n\n## Overview\n\nThe `values.yaml` file is divided into a multiple n8n and Kubernetes specific sections.\n\n1. Global and chart wide values, like the image repository, image tag, etc.\n2. Ingress, (default is nginx, but you can change it to your own ingress controller)\n3. Main n8n app configuration + Kubernetes specific settings\n4. Worker related settings + Kubernetes specific settings\n5. Webhook related settings + Kubernetes specific settings\n6. Raw Resources to pass through your own manifests like GatewayAPI, ServiceMonitor etc.\n7. Redis related settings + Kubernetes specific settings\n\n## Setting Configuration Values and Environment Variables\n\nThese n8n specific settings should be added to `main.config:` or `main.secret:` in the `values.yaml` file.\n\nSee the [example](#examples) section and other example in the `/examples` directory of this repo.\n\n\u003e [!IMPORTANT]\n\u003e The YAML nodes `config` and `secret` in the values.yaml are transformed 1:1 into ENV variables.\n\n```yaml\nmain:\n  config:\n      n8n:\n        encryption_key: \"my_secret\" # ==\u003e turns into ENV: N8N_ENCRYPTION_KEY=my_secret\n      db:\n        type: postgresdb # ==\u003e turns into ENV: DB_TYPE=postgresdb\n        postgresdb:\n          host: 192.168.0.52 # ==\u003e turns into ENV: DB_POSTGRESDB_HOST=192.168.0.52\n      node:\n        function_allow_builtin: \"*\" # ==\u003e turns into ENV: NODE_FUNCTION_ALLOW_BUILTIN=\"*\"\n```\n\nConsult the [n8n Environment Variables Documentation]( https://docs.n8n.io/hosting/configuration/environment-variables/)\n\nYou decide what should go into `secret` and what should be a `config`.\nThere is no restriction, mix and match as you like.\n\n# Installation\n\nInstall chart\n\n```shell\nhelm install my-n8n oci://8gears.container-registry.com/library/n8n --version 1.0.0\n```\n\n# Examples\n\nA typical example of a config in combination with a secret.\nYou can find various other examples in the `examples` directory of this repository.\n\n```yaml\n#small deployment with nodeport for local testing or small deployments\nmain:\n  config:\n    n8n:\n      hide_usage_page: true\n  secret:\n    n8n:\n      encryption_key: \"\u003cyour-secure-encryption-key\u003e\"\n  resources:\n    limits:\n      memory: 2048Mi\n    requests:\n      memory: 512Mi\n  service:\n    type: NodePort\n    port: 5678\n```\n\n# Values File\n\n## N8N Specific Config Section\n\nEvery possible n8n config value can be set,\neven if it is not mentioned in the excerpt below.\nTreat the n8n provided configuration documentation as the source of truth,\nthis Charts just forwards everything down to the n8n pods.\n\n```yaml\n\nimage:\n  repository: n8nio/n8n\n  pullPolicy: IfNotPresent\n  # Overrides the image tag whose default is the chart appVersion.\n  tag: \"\"\nimagePullSecrets: []\n\n# The Name to use for the chart. Will be the prefix of all resources aka. The Chart.Name (default is 'n8n')\nnameOverride:\n# Override the full name of the deployment. When empty, the name will be \"{release-name}-{chart-name}\" or the value of nameOverride if specified\nfullnameOverride:\n\n# Add entries to a pod's /etc/hosts file, mapping custom IP addresses to hostnames.\nhostAliases: []\n  #- ip: 8.8.8.8\n  #  hostnames:\n#    - service-example.local\n#\n# Ingress\n#\ningress:\n  enabled: false\n  annotations: {}\n  # define a custom ingress class Name, like \"traefik\" or \"nginx\"\n  className: \"\"\n  hosts:\n    - host: workflow.example.com\n      paths: []\n  tls:\n    - hosts:\n        - workflow.example.com\n      secretName: host-domain-cert\n\n# the main (n8n) application related configuration + Kubernetes specific settings\n# The config: {} dictionary is converted to environmental variables in the ConfigMap.\nmain:\n  # See https://docs.n8n.io/hosting/configuration/environment-variables/ for all values.\n  config: {}\n  #    n8n:\n  #    db:\n  #      type: postgresdb\n  #      postgresdb:\n  #        host: 192.168.0.52\n\n  # Dictionary for secrets, unlike config:, the values here will end up in the secret file.\n  # The YAML entry db.postgresdb.password: my_secret is transformed DB_POSTGRESDB_password=bXlfc2VjcmV0\n  # See https://docs.n8n.io/hosting/configuration/environment-variables/\n  secret: {}\n  #    n8n:\n  #     if you run n8n stateless, you should provide an encryption key here.\n  #      encryption_key:\n  #\n  #    database:\n  #      postgresdb:\n  #        password: 'big secret'\n\n  # Extra environmental variables, so you can reference other configmaps and secrets into n8n as env vars.\n  extraEnv:\n  #    N8N_DB_POSTGRESDB_NAME:\n  #      valueFrom:\n  #        secretKeyRef:\n  #          name: db-app\n  #          key: dbname\n  #\n  # N8n Kubernetes specific settings\n  #\n  persistence:\n    # If true, use a Persistent Volume Claim, If false, use emptyDir\n    enabled: false\n    # what type volume, possible options are [existing, emptyDir, dynamic] dynamic for Dynamic Volume Provisioning, existing for using an existing Claim\n    type: emptyDir\n    # Persistent Volume Storage Class\n    # If defined, storageClassName: \u003cstorageClass\u003e\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    #   set, choosing the default provisioner.  (gp2 on AWS, standard on\n    #   GKE, AWS \u0026 OpenStack)\n    #\n    # storageClass: \"-\"\n    # PVC annotations\n    #\n    # If you need this annotation include it under `values.yml` file and pvc.yml template will add it.\n    # This is not maintained at Helm v3 anymore.\n    # https://github.com/8gears/n8n-helm-chart/issues/8\n    #\n    # annotations:\n    #   helm.sh/resource-policy: keep\n    # Persistent Volume Access Mode\n    #\n    accessModes:\n      - ReadWriteOnce\n    # Persistent Volume size\n    size: 1Gi\n    # Use an existing PVC\n    # existingClaim:\n\n  extraVolumes: []\n  #    - name: db-ca-cert\n  #      secret:\n  #        secretName: db-ca\n  #        items:\n  #          - key: ca.crt\n  #            path: ca.crt\n\n  extraVolumeMounts: []\n  #    - name: db-ca-cert\n  #      mountPath: /etc/ssl/certs/postgresql\n  #      readOnly: true\n\n\n  # Number of desired pods. More than one pod is supported in n8n enterprise.\n  replicaCount: 1\n\n  # here you can specify the deployment strategy as Recreate or RollingUpdate with optional maxSurge and maxUnavailable\n  # If these options are not set, default values are 25%\n  # deploymentStrategy:\n  #  type: Recreate | RollingUpdate\n  #  maxSurge: \"50%\"\n  #  maxUnavailable: \"50%\"\n\n  deploymentStrategy:\n    type: \"Recreate\"\n    #  maxSurge: \"50%\"\n    #  maxUnavailable: \"50%\"\n\n  serviceAccount:\n    # Specifies whether a service account should be created\n    create: true\n    # Annotations to add to the service account\n    annotations: {}\n    # The name of the service account to use.\n    # If not set and create is true, a name is generated using the fullname template\n    name: \"\"\n\n  # Annotations to be implemented on the main service deployment\n  deploymentAnnotations: {}\n  # Labels to be implemented on the main service deployment\n  deploymentLabels: {}\n  # Annotations to be implemented on the main service pod\n  podAnnotations: {}\n  # Labels to be implemented on the main service pod\n  podLabels: {}\n\n  podSecurityContext:\n    runAsNonRoot: true\n    runAsUser: 1000\n    runAsGroup: 1000\n    fsGroup: 1000\n\n  securityContext: {}\n  # capabilities:\n  #   drop:\n  #   - ALL\n  # readOnlyRootFilesystem: true\n  #  runAsNonRoot: true\n  #  runAsUser: 1000\n\n  # here you can specify lifecycle hooks - it can be used e.g., to easily add packages to the container without building\n  # your own docker image\n  # see https://github.com/8gears/n8n-helm-chart/pull/30\n  lifecycle: {}\n\n  #  here's the sample configuration to add mysql-client to the container\n  # lifecycle:\n  #  postStart:\n  #    exec:\n  #      command: [\"/bin/sh\", \"-c\", \"apk add mysql-client\"]\n\n  # here you can override a command for main container\n  # it may be used to override a starting script (e.g., to resolve issues like https://github.com/n8n-io/n8n/issues/6412) or run additional preparation steps (e.g., installing additional software)\n  command: []\n\n  # sample configuration that overrides starting script and solves above issue (also it runs n8n as root, so be careful):\n  # command:\n  #  - tini\n  #  - --\n  #  - /bin/sh\n  #  - -c\n  #  - chmod o+rx /root; chown -R node /root/.n8n || true; chown -R node /root/.n8n; ln -s /root/.n8n /home/node; chown -R node /home/node || true; node /usr/local/bin/n8n\n\n  # here you can override the livenessProbe for the main container\n  # it may be used to increase the timeout for the livenessProbe (e.g., to resolve issues like\n\n  livenessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # here you can override the readinessProbe for the main container\n  # it may be used to increase the timeout for the readinessProbe (e.g., to resolve issues like\n\n  readinessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started.\n  # See https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n  initContainers: []\n  #    - name: init-data-dir\n  #      image: \"{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}\"\n  #      command: [ \"/bin/sh\", \"-c\", \"mkdir -p /home/node/.n8n/\" ]\n  #      volumeMounts:\n  #        - name: data\n  #          mountPath: /home/node/.n8n\n\n\n  service:\n    annotations: {}\n    # -- Service types allow you to specify what kind of Service you want.\n    # E.g., ClusterIP, NodePort, LoadBalancer, ExternalName\n    type: ClusterIP\n    # -- Service port\n    port: 80\n\n  resources: {}\n  # We usually recommend not specifying default resources and to leave this as a conscious\n  # choice for the user. This also increases chances charts run on environments with little\n  # resources, such as Minikube. If you do want to specify resources, uncomment the following\n  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n  # limits:\n  #   cpu: 100m\n  #   memory: 128Mi\n  # requests:\n  #   cpu: 100m\n  #   memory: 128Mi\n\n  autoscaling:\n    enabled: false\n    minReplicas: 1\n    maxReplicas: 100\n    targetCPUUtilizationPercentage: 80\n    # targetMemoryUtilizationPercentage: 80\n\n  nodeSelector: {}\n  tolerations: []\n  affinity: {}\n\n# # # # # # # # # # # # # # # #\n#\n# Worker related settings\n#\nworker:\n  enabled: false\n\n  # additional (to main) config for worker\n  config: {}\n\n  # additional (to main) config for worker\n  secret: {}\n\n  # Extra environmental variables, so you can reference other configmaps and secrets into n8n as env vars.\n  extraEnv: {}\n\n  # Define the number of jobs a worker can run in parallel by using the concurrency flag. Default is 10\n  concurrency: 10\n\n  #\n  # Worker Kubernetes specific settings\n  #\n  persistence:\n    # If true, use a Persistent Volume Claim, If false, use emptyDir\n    enabled: false\n    # what type volume, possible options are [existing, emptyDir, dynamic] dynamic for Dynamic Volume Provisioning, existing for using an existing Claim\n    type: emptyDir\n    # Persistent Volume Storage Class\n    # If defined, storageClassName: \u003cstorageClass\u003e\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    #   set, choosing the default provisioner.  (gp2 on AWS, standard on\n    #   GKE, AWS \u0026 OpenStack)\n    #\n    # storageClass: \"-\"\n    # PVC annotations\n    #\n    # If you need this annotation include it under `values.yml` file and pvc.yml template will add it.\n    # This is not maintained at Helm v3 anymore.\n    # https://github.com/8gears/n8n-helm-chart/issues/8\n    #\n    # annotations:\n    #   helm.sh/resource-policy: keep\n    # Persistent Volume Access Mode\n    accessModes:\n      - ReadWriteOnce\n    # Persistent Volume size\n    size: 1Gi\n    # Use an existing PVC\n    # existingClaim:\n\n  # Number of desired pods.\n  replicaCount: 1\n\n  # here you can specify the deployment strategy as Recreate or RollingUpdate with optional maxSurge and maxUnavailable\n  # If these options are not set, default values are 25%\n  # deploymentStrategy:\n  #  type: RollingUpdate\n  #  maxSurge: \"50%\"\n  #  maxUnavailable: \"50%\"\n\n  deploymentStrategy:\n    type: \"Recreate\"\n    # maxSurge: \"50%\"\n    # maxUnavailable: \"50%\"\n\n  serviceAccount:\n    # Specifies whether a service account should be created\n    create: true\n    # Annotations to add to the service account\n    annotations: {}\n    # The name of the service account to use.\n    # If not set and create is true, a name is generated using the fullname template\n    name: \"\"\n\n  # Annotations to be implemented on the worker deployment\n  deploymentAnnotations: {}\n  # Labels to be implemented on the worker deployment\n  deploymentLabels: {}\n  # Annotations to be implemented on the worker pod\n  podAnnotations: {}\n  # Labels to be implemented on the worker pod\n  podLabels: {}\n\n  podSecurityContext:\n    runAsNonRoot: true\n    runAsUser: 1000\n    runAsGroup: 1000\n    fsGroup: 1000\n\n  securityContext: {}\n  # capabilities:\n  #   drop:\n  #   - ALL\n  # readOnlyRootFilesystem: true\n  #  runAsNonRoot: true\n  #  runAsUser: 1000\n\n  # here you can specify lifecycle hooks - it can be used e.g., to easily add packages to the container without building\n  # your own docker image\n  # see https://github.com/8gears/n8n-helm-chart/pull/30\n  lifecycle: {}\n\n  #  here's the sample configuration to add mysql-client to the container\n  # lifecycle:\n  #  postStart:\n  #    exec:\n  #      command: [\"/bin/sh\", \"-c\", \"apk add mysql-client\"]\n\n  # here you can override a command for worker container\n  # it may be used to override a starting script (e.g., to resolve issues like https://github.com/n8n-io/n8n/issues/6412) or\n  # run additional preparation steps (e.g., installing additional software)\n  command: []\n\n  # sample configuration that overrides starting script and solves above issue (also it runs n8n as root, so be careful):\n  # command:\n  #  - tini\n  #  - --\n  #  - /bin/sh\n  #  - -c\n  #  - chmod o+rx /root; chown -R node /root/.n8n || true; chown -R node /root/.n8n; ln -s /root/.n8n /home/node; chown -R node /home/node || true; node /usr/local/bin/n8n\n\n  # command args\n  commandArgs: []\n\n  # here you can override the livenessProbe for the main container\n  # it may be used to increase the timeout for the livenessProbe (e.g., to resolve issues like\n  livenessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # here you can override the readinessProbe for the main container\n  # it may be used to increase the timeout for the readinessProbe (e.g., to resolve issues like\n\n  readinessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started.\n  # See https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n  initContainers: []\n\n  service:\n    annotations: {}\n    # -- Service types allow you to specify what kind of Service you want.\n    # E.g., ClusterIP, NodePort, LoadBalancer, ExternalName\n    type: ClusterIP\n    # -- Service port\n    port: 80\n\n  resources: {}\n  # We usually recommend not specifying default resources and to leave this as a conscious\n  # choice for the user. This also increases chances charts run on environments with little\n  # resources, such as Minikube. If you do want to specify resources, uncomment the following\n  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n  # limits:\n  #   cpu: 100m\n  #   memory: 128Mi\n  # requests:\n  #   cpu: 100m\n  #   memory: 128Mi\n\n  autoscaling:\n    enabled: false\n    minReplicas: 1\n    maxReplicas: 100\n    targetCPUUtilizationPercentage: 80\n    # targetMemoryUtilizationPercentage: 80\n\n  nodeSelector: {}\n  tolerations: []\n  affinity: {}\n\n# Webhook related settings\n# With .Values.scaling.webhook.enabled=true you disable Webhooks from the main process, but you enable the processing on a different Webhook instance.\n# See https://github.com/8gears/n8n-helm-chart/issues/39#issuecomment-1579991754 for the full explanation.\n# Webhook processes rely on Valkey/Redis too.\nwebhook:\n  enabled: false\n  # additional (to main) config for webhook\n  config: {}\n  # additional (to main) config for webhook\n  secret: {}\n\n  # Extra environmental variables, so you can reference other configmaps and secrets into n8n as env vars.\n  extraEnv: {}\n  #   WEBHOOK_URL:\n  #   value: \"http://webhook.domain.tld\"\n\n\n  #\n  # Webhook Kubernetes specific settings\n  #\n  persistence:\n    # If true, use a Persistent Volume Claim, If false, use emptyDir\n    enabled: false\n    # what type volume, possible options are [existing, emptyDir, dynamic] dynamic for Dynamic Volume Provisioning, existing for using an existing Claim\n    type: emptyDir\n    # Persistent Volume Storage Class\n    # If defined, storageClassName: \u003cstorageClass\u003e\n    # If set to \"-\", storageClassName: \"\", which disables dynamic provisioning\n    # If undefined (the default) or set to null, no storageClassName spec is\n    #   set, choosing the default provisioner.  (gp2 on AWS, standard on\n    #   GKE, AWS \u0026 OpenStack)\n    #\n    # storageClass: \"-\"\n    # PVC annotations\n    #\n    # If you need this annotation include it under `values.yml` file and pvc.yml template will add it.\n    # This is not maintained at Helm v3 anymore.\n    # https://github.com/8gears/n8n-helm-chart/issues/8\n    #\n    # annotations:\n    #   helm.sh/resource-policy: keep\n    # Persistent Volume Access Mode\n    #\n    accessModes:\n      - ReadWriteOnce\n    # Persistent Volume size\n    #\n    size: 1Gi\n    # Use an existing PVC\n    #\n    # existingClaim:\n\n  # Number of desired pods.\n  replicaCount: 1\n\n  # here you can specify the deployment strategy as Recreate or RollingUpdate with optional maxSurge and maxUnavailable\n  # If these options are not set, default values are 25%\n  # deploymentStrategy:\n  #  type: RollingUpdate\n  #  maxSurge: \"50%\"\n  #  maxUnavailable: \"50%\"\n\n  deploymentStrategy:\n    type: \"Recreate\"\n\n  nameOverride: \"\"\n  fullnameOverride: \"\"\n\n  serviceAccount:\n    # Specifies whether a service account should be created\n    create: true\n    # Annotations to add to the service account\n    annotations: {}\n    # The name of the service account to use.\n    # If not set and create is true, a name is generated using the fullname template\n    name: \"\"\n\n  # Annotations to be implemented on the webhook deployment\n  deploymentAnnotations: {}\n  # Labels to be implemented on the webhook deployment\n  deploymentLabels: {}\n  # Annotations to be implemented on the webhook pod\n  podAnnotations: {}\n  # Labels to be implemented on the webhook pod\n  podLabels: {}\n\n  podSecurityContext:\n    runAsNonRoot: true\n    runAsUser: 1000\n    runAsGroup: 1000\n    fsGroup: 1000\n\n  securityContext: {}\n  # capabilities:\n  #   drop:\n  #   - ALL\n  # readOnlyRootFilesystem: true\n  #  runAsNonRoot: true\n  #  runAsUser: 1000\n\n  # here you can specify lifecycle hooks - it can be used e.g., to easily add packages to the container without building\n  # your own docker image\n  # see https://github.com/8gears/n8n-helm-chart/pull/30\n  lifecycle: {}\n\n  #  here's the sample configuration to add mysql-client to the container\n  # lifecycle:\n  #  postStart:\n  #    exec:\n  #      command: [\"/bin/sh\", \"-c\", \"apk add mysql-client\"]\n\n  # here you can override a command for main container\n  # it may be used to override a starting script (e.g., to resolve issues like https://github.com/n8n-io/n8n/issues/6412) or\n  # run additional preparation steps (e.g., installing additional software)\n  command: []\n\n  # sample configuration that overrides starting script and solves above issue (also it runs n8n as root, so be careful):\n  # command:\n  #  - tini\n  #  - --\n  #  - /bin/sh\n  #  - -c\n  #  - chmod o+rx /root; chown -R node /root/.n8n || true; chown -R node /root/.n8n; ln -s /root/.n8n /home/node; chown -R node /home/node || true; node /usr/local/bin/n8n\n  # Command Arguments\n  commandArgs: []\n\n  # here you can override the livenessProbe for the main container\n  # it may be used to increase the timeout for the livenessProbe (e.g., to resolve issues like\n\n  livenessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # here you can override the readinessProbe for the main container\n  # it may be used to increase the timeout for the readinessProbe (e.g., to resolve issues like\n\n  readinessProbe:\n    httpGet:\n      path: /healthz\n      port: http\n    # initialDelaySeconds: 30\n    # periodSeconds: 10\n    # timeoutSeconds: 5\n    # failureThreshold: 6\n    # successThreshold: 1\n\n  # List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started.\n  # See https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\n  initContainers: []\n\n  service:\n    annotations: {}\n    # -- Service types allow you to specify what kind of Service you want.\n    # E.g., ClusterIP, NodePort, LoadBalancer, ExternalName\n    type: ClusterIP\n    # -- Service port\n    port: 80\n\n  resources: {}\n  # We usually recommend not specifying default resources and to leave this as a conscious\n  # choice for the user. This also increases chances charts run on environments with little\n  # resources, such as Minikube. If you do want to specify resources, uncomment the following\n  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n  # limits:\n  #   cpu: 100m\n  #   memory: 128Mi\n  # requests:\n  #   cpu: 100m\n  #   memory: 128Mi\n  autoscaling:\n    enabled: false\n    minReplicas: 1\n    maxReplicas: 100\n    targetCPUUtilizationPercentage: 80\n    # targetMemoryUtilizationPercentage: 80\n  nodeSelector: {}\n  tolerations: []\n  affinity: {}\n\n#\n# User defined supplementary K8s manifests\n#\n\n#  Takes a list of Kubernetes manifests and merges each resource with a default metadata.labels map and\n#  installs the result.\n#  Use this to add any arbitrary Kubernetes manifests alongside this chart instead of kubectl and scripts.\nextraManifests: []\n#  - apiVersion: v1\n#    kind: ConfigMap\n#    metadata:\n#      name: example-config\n#    data:\n#      example.property.1: \"value1\"\n#      example.property.2: \"value2\"\n# As an alternative to the above, you can also use a string as the value of the data field.\n#  - |\n#    apiVersion: v1\n#    kind: ConfigMap\n#    metadata:\n#      name: example-config-string\n#    data:\n#      example.property.1: \"value1\"\n#      example.property.2: \"value2\"\n\n# String extraManifests supports using variables directly within a string manifest.\n# Templates are rendered using the context defined in the values.yaml file, enabling dynamic and flexible content customization.\nextraTemplateManifests: []\n#  - |\n#    apiVersion: v1\n#    kind: ConfigMap\n#    metadata:\n#      name: my-config\n#    stringData:\n#      image_name: {{ .Values.image.repository }}\n\n# Bitnami Valkey configuration\n# https://artifacthub.io/packages/helm/bitnami/valkey\nvalkey:\n  enabled: false\n  #architecture: standalone\n  #\n  #primary:\n  #  persistence:\n  #    enabled: false\n  #    existingClaim: \"\"\n  #    size: 2Gi\n```\n## Migration Guide to Version 1.0.0\n\nThis version includes a complete redesign of the chart to better accommodate n8n configuration options.\nKey changes include:\n- Values restructured under `.Values.main`, `.Values.worker`, and `.Values.webhook`\n- Updated deployment configurations\n- New Redis integration requirements\n\n\n## Scaling and Advanced Configuration Options\n\nn8n provides a **queue-mode**, where the workload is shared between multiple\ninstances of the same n8n installation.\nThis provides a shared load over multiple instances and limited high\navailability, because the controller instance remains as Single-Point-Of-Failure.\n\nWith the help of an internal/external redis server and by using the excellent\nBullMQ, the tasks can be shared over different instances, which also can run on\ndifferent hosts.\n\n[See docs about this Queue-Mode](https://docs.n8n.io/hosting/scaling/queue-mode/)\n\nTo enable this mode within this helm chart, you simply should\nset `scaling.enable` to true.\nThis chart is configured to spawn two worker instances.\n\n```yaml\nscaling:\n  enabled: true\n```\n\nYou can define to spawn more workers, by set scaling.worker.replicaCount to a higher\nnumber.\nAlso, it is possible to define your own external redis server.\n\n```yaml\nscaling:\n  enabled: true\n  redis:\n    host: \"redis-hostname\"\n    password: \"redis-password-if-set\"\n```\n\nIf you want to use the internal redis server, set `redis.enable = true`. By\ndefault, no redis server is spawned.\n\nAt last scaling option is it possible to create dedicated webhook instances,\nwhich only process the webhooks.\nIf you set `scaling.webhook.enabled=true`, then webhook processing on the main\ninstance is disabled and by default a single webhook instance is started.\n\n## Chart Release Workflow\n\n1. Update the `Chart.yaml` with the new version numbers for the chart and/or app.\n2. In `Chart.yaml`update/replace the content of the `artifacthub.io/changes` section. See Artifacthub [annotation referene](https://artifacthub.io/docs/topics/annotations/helm/)\n3. In GitHub create a new release with the the chart version number as the tag and a title.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8gears%2Fn8n-helm-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F8gears%2Fn8n-helm-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8gears%2Fn8n-helm-chart/lists"}