Prerequisites
- Kubernetes cluster (v1.19+)
- Helm 3.x installed
- kubectl configured to access your cluster
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 cluster’s default StorageClass unless you set persistence.storageClassName. On a cluster without a default class (kubectl get storageclass shows none marked (default)), set it, or the pod stays Pending. Choose it before the first install: a StatefulSet’s volume class cannot change afterwards.
Database and Redis
The chart reads PostgreSQL and Redis settings from the secrets listed underactivepiecesEnvVariables 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
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 amy-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.
4. Install Activepieces
5. Verify Installation
Production Checklist
- Set
AP_FRONTEND_URLto 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
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 theactivepieces: 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:
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.
helm template, Argo CD or Kustomize, the chart cannot see them, so copy the ones your running app uses into activepieces-auth-secrets first:
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:
OpenShift
The base chart runs as root on port 80, which OpenShift’s defaultrestricted-v2 SCC rejects with listen EACCES :::80. Add the OpenShift overlay on top of your own values:
AP_EXECUTION_MODE to SANDBOX_CODE_ONLY in the activepieces-config-secrets secret, as in step 3. SANDBOX_PROCESS and SANDBOX_CODE_AND_PROCESS need CAP_SYS_ADMIN, which restricted-v2 never grants. In SANDBOX_CODE_ONLY, code steps that import npm packages fail; see Sandboxing.
The bundled PostgreSQL and Redis subcharts hardcode user ID 1001, which restricted-v2 rejects. The overlay turns off their security contexts and OpenShift assigns the IDs instead, so postgresql.enabled and redis.enabled need no extra settings.
The chart does not create an OpenShift Route. Create one pointing at the activepieces service on port 80, or use the Ingress under ingress.*.
To use the overlay on another cluster that enforces the Kubernetes restricted Pod Security profile, also set a non-root runAsUser and fsGroup (for example 1001) under podSecurityContext: the image runs as root, and runAsNonRoot refuses to start it without one. Use external PostgreSQL and Redis there: with the overlay, the bundled database pods have no security context, which that profile rejects.
Troubleshooting
Common Issues
- Pod won’t start: Check logs with
kubectl logs -l app.kubernetes.io/instance=activepieces,app.kubernetes.io/name=activepieces - Database connection: Verify PostgreSQL credentials and connectivity
- Frontend URL: Ensure
AP_FRONTEND_URLis accessible from external sources - 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 underactivepiecesConfig or injected from your own secrets under activepiecesEnvVariables.