Skip to main content
This guide walks you through deploying Activepieces on Kubernetes using the official Helm chart.

Prerequisites

  • Kubernetes cluster (v1.19+)
  • Helm 3.x installed
  • kubectl configured to access your cluster
When helm install or helm upgrade talks to a cluster without Argo Rollouts, the chart deploys a StatefulSet; otherwise it deploys an Argo Rollout. A release that already runs as a Rollout stays one. Rendering without a cluster (helm template, Kustomize) produces a Rollout, so set workloadType: statefulset there, or pass the cluster’s API versions as Argo CD does. The StatefulSet volume uses the local-path storage class unless you set persistence.storageClassName.

Database and Redis

The chart reads PostgreSQL and Redis settings from the secrets listed under activepiecesEnvVariables in values.yaml. Create them before installing: Put the settings in env files, so passwords stay out of your shell history and process list. Run umask 077 first so only you can read them:
db.env
redis.env
To run PostgreSQL and Redis inside the cluster instead, set postgresql.enabled: true / redis.enabled: true. The hosts are <release>-postgresql and <release>-redis-master. AP_JWT_SECRET and AP_ENCRYPTION_KEY are generated on first install. To bring your own, put them in activepieces-auth-secrets; that secret takes precedence.

Quick Start

1. Clone the Repository

2. Install Dependencies

3. Create a Values File

Create a my-values.yaml file with your configuration. You can use the example values file as a reference. The Helm chart has sensible defaults for required values while leaving the optional ones empty, but you should customize these core values for production. Set the core settings in the activepieces-config-secrets secret the chart already reads. AP_EDITION and AP_EXECUTION_MODE let you activate a license key later:
AP_FRONTEND_URL is required, and it must also be reachable from inside the pod: the worker downloads pieces through it.
Set AP_EDITION and AP_EXECUTION_MODE together: AP_EDITION=ee with the default execution mode is rejected at startup and the app will not boot.Set each variable in one place only. A name that is both in activepiecesConfig and in an activepiecesEnvVariables list is rendered twice, which Helm 4 rejects (duplicate entries for key).

4. Install Activepieces

5. Verify Installation

Production Checklist

  • Set AP_FRONTEND_URL to your actual domain
  • Set strong passwords for PostgreSQL and Redis (or keep auto-generated)
  • Configure proper ingress with TLS
  • Set appropriate resource limits
  • Configure persistent storage
  • Choose appropriate execution mode for your security requirements
  • Review environment variables for advanced configuration
  • Consider using a separate workers setup for better availability and security

Upgrading

With Helm 4 and workloadType: rollout, add --force-conflicts to helm upgrade. Argo Rollouts owns the Service selectors, and Helm 4’s server-side apply stops on that conflict otherwise. The bundled secret generator creates cluster-wide RBAC named after the release, so give each release in a cluster its own name. A second release can also set kubernetes-secret-generator.enabled: false, because the first release’s generator already serves every namespace.

Migrating from chart 0.3.x

Chart 0.4.0 replaced the activepieces: block and keys such as postgresql.host and redis.host with the secrets listed under activepiecesEnvVariables. helm install and helm upgrade print a warning that names every old key they ignore. Run these steps before upgrading, with RELEASE set to your release name. 1. Keep your database. Chart 0.3.x ran PostgreSQL and Redis inside the cluster by default. If you used them, keep them enabled in your values:
Then copy the database and Redis settings your running app uses today, so custom names, users and hosts carry over. This works the same for bundled and external databases:
If a variable in those files is not listed under activepiecesEnvVariables (for example AP_POSTGRES_URL or AP_REDIS_SENTINEL_HOSTS), add it to that list in your values. 2. Move your settings. Each activepieces.<name> value becomes an AP_* variable in the activepieces-config-secrets secret, for example frontendUrl → AP_FRONTEND_URL, edition → AP_EDITION and executionMode → AP_EXECUTION_MODE. Set persistence.storageClassName to a StorageClass your cluster has (kubectl get storageclass); chart 0.3.x used the cluster default, and persistence.storageClass is no longer read.
3. Keep your keys. Your encryption key and JWT secret are carried over automatically. If you deploy with helm template, Argo CD or Kustomize, the chart cannot see them, so copy the ones your running app uses into activepieces-auth-secrets first:
4. Upgrade. Pin image.tag to the version you run today, upgrade the chart, then move to a newer image in a separate step. The app now runs as a StatefulSet (or an Argo Rollout) instead of a Deployment, and its piece cache volume is recreated. If you already upgraded with the old values and the new pod is stuck in Pending (for example storageclass "local-path" not found), Kubernetes will not let the chart change the volume. Delete the StatefulSet and its empty cache volume, then upgrade again. The pod never started, so nothing is lost:

Troubleshooting

Common Issues

  1. Pod won’t start: Check logs with kubectl logs -l app.kubernetes.io/instance=activepieces,app.kubernetes.io/name=activepieces
  2. Database connection: Verify PostgreSQL credentials and connectivity
  3. Frontend URL: Ensure AP_FRONTEND_URL is accessible from external sources
  4. Webhooks not working: Check ingress configuration and DNS resolution

Useful Commands

Environment Variables

For a complete list of configuration options, see the Environment Variables documentation. Most environment variables can be configured through the Helm values file, either as plain values under activepiecesConfig or injected from your own secrets under activepiecesEnvVariables.

Execution Modes

Understanding execution modes is crucial for security and performance. See the Sandboxing guide to choose the right mode for your deployment.

Uninstalling