Skip to main content
These instructions deploy Trigger.dev to Kubernetes using the official Helm chart. Read the self-hosting overview before continuing.
This guide alone is unlikely to result in a production-ready deployment. Security, scaling, and reliability concerns are not fully addressed here.

Requirements

Prerequisites

  • Kubernetes 1.19+
  • Helm 3.8+
  • kubectl with cluster access

Cluster resources

Minimum requirements for the full stack:
  • 6+ vCPU total
  • 12+ GB RAM total
  • Persistent volume support
Per-component minimums: Adjust via the resources section in your values.yaml:

Installation

Quick start

1

Install with default values

2

Access the webapp

Open http://localhost:3040 in your browser.
3

Get the magic link

Configuration

Most Helm values map directly to the environment variables documented in the webapp and supervisor environment variable references in the official Trigger.dev Docker Compose configuration. Naming convention: env vars use UPPER_SNAKE_CASE; Helm values use camelCase.

Viewing default values

Custom values

Create a values-custom.yaml to override defaults. The defaults are insecure and only suitable for testing:
Deploy with your custom values:

Extra environment variables

Extra annotations

External services

Disable built-in services and use external ones instead. Using Kubernetes secrets is recommended for credentials.

PostgreSQL

Redis

ClickHouse

S3-compatible object storage

PostgreSQL with custom CA certificate

For PostgreSQL instances that require custom CA certificates (e.g., AWS RDS with SSL verification):

Worker token

With the default bootstrap configuration, worker token setup is automatic.

Bootstrap (default)

Manual token setup

1

Get the token from webapp logs

2

Create a Kubernetes secret

3

Configure the supervisor

Registry setup

Use an external registry for production:
The internal registry (registry.deploy: true) is experimental and requires TLS setup and additional cluster configuration. Use an external registry for production.
For conceptual background on registry requirements, see the Docker registry setup.

Object storage

Use external S3-compatible storage for production. The defaults use built-in MinIO:

Authentication

Authentication options are identical to Docker. Set them via extraEnvVars in values.yaml:

Version locking

Lock chart and image versions for reproducible deployments:
Or pin image tags directly in values.yaml:
The chart version’s appVersion determines default image tags. Newer image tags may be incompatible with older chart versions. Always match the CLI version to the deployed app version.

Telemetry

To disable anonymous usage telemetry:

CLI usage

See the Docker CLI usage section — the commands are identical regardless of deployment method.

CI / GitHub Actions

In CI environments, use environment variables instead of login profiles:
For automated CI/CD deployments, use npx trigger.dev@latest deploy with a TRIGGER_ACCESS_TOKEN set as a GitHub Actions secret. See the Deployment guide for a complete CI/CD workflow.

Troubleshooting

  • Magic links not working — Check webapp logs for email delivery errors and verify email transport configuration.
  • Deploy fails — Verify registry access and authentication on the machine running deploy.
  • Pods stuck pending — Run kubectl describe pod <pod-name> -n trigger and check the Events section.
  • Worker token issues — Check webapp and supervisor logs for token-related errors.
  • ERROR: schema graphile_worker does not exist — See the Docker troubleshooting section for details on resolving PostgreSQL SSL certificate issues.