What’s new in v4
- Much simpler setup. The provider and coordinator are now combined into a single supervisor. No startup scripts — just
docker compose up. - Automatic container cleanup. The supervisor cleans up containers that are no longer needed.
- Multiple worker machines. You can now scale workers horizontally as needed.
- Resource limits enforced by default. Tasks are limited to the CPU and RAM of their machine preset, preventing noisy neighbours.
- No direct Docker socket access. The compose file ships with Docker Socket Proxy by default.
- Network isolation. All containers use only the network access they need.
- Built-in registry and object storage. Deploy and run tasks without third-party services.
- Improved CLI commands. No extra flags needed to deploy, and a new
switchcommand for managing profiles.
Requirements
Prerequisites
- Docker 20.10.0+
- Docker Compose 2.20.0+
Webapp machine
Hosts the dashboard, Postgres, Redis, and related services.- 3+ vCPU
- 6+ GB RAM
Worker machine
Hosts the supervisor and all task runners.- 4+ vCPU
- 8+ GB RAM
| Concurrency | Machine preset | vCPU required | RAM required |
|---|---|---|---|
| 10 | small-1x (0.5 vCPU, 0.5 GB) | 5 | 5 GB |
| 20 | small-1x | 10 | 10 GB |
| 100 | small-1x | 50 | 50 GB |
| 100 | small-2x (1 vCPU, 1 GB) | 100 | 100 GB |
Setup
Webapp
Configure environment variables
Edit the webapp environment variables (set in your
.env file) in your .env file, then apply changes:Access the dashboard
The webapp is available at
http://localhost:8030. Check the container logs for the magic link on first login:Worker
Configure the supervisor
Set the supervisor environment variables including the worker token, then apply:
Combined (single machine)
To run the webapp and worker on the same machine:Worker token
When running the combined stack, worker bootstrap is handled automatically. When running the webapp and worker separately, you must set the worker token manually. On first run, the webapp generates a token and prints it to the logs:TRIGGER_WORKER_TOKEN in your .env file, then restart the worker:
Creating additional worker groups
Use the admin API to create worker groups beyond the default bootstrap group. First make a user admin:- New users: set
ADMIN_EMAILS(regex) before the user signs up. - Existing users: set
admin = truein theusertable.
token field for newly created groups.
Registry setup
The built-in registry stores and serves deployment images.Default settings
| Setting | Default value |
|---|---|
| Registry URL | localhost:5000 |
| Username | registry-user |
| Password | very-secure-indeed |
Logging in
Each machine running thedeploy command must be logged in to the registry:
Object storage
Used for large payloads and task outputs.Default settings
| Setting | Default value |
|---|---|
| Endpoint | http://localhost:9000 |
| Dashboard | http://localhost:9001 |
| Username | admin |
| Password | very-safe-password |
The
packets bucket is created automatically. If it isn’t, create it manually via the MinIO
dashboard at http://localhost:9001.Authentication
Magic link (default)
Magic links are the default login method. IfEMAIL_TRANSPORT is not set, magic links are logged by the webapp container rather than sent by email — useful for local testing.
GitHub OAuth
Create a GitHub OAuth app with callback URLhttps://<your_webapp_domain>/auth/github/callback, then set:
Restricting access
UseWHITELISTED_EMAILS to restrict sign-ups to specific addresses (regex pattern). This applies to all auth methods including GitHub OAuth:
Version locking
Lock the Docker image version to match your CLI version:.env file. By default, images use the latest tag.
CLI usage
Login
Specify your self-hosted URL with the-a flag to avoid being redirected to Trigger.dev Cloud:
Profiles
Use profiles to manage multiple Trigger.dev instances:Check current login
CI / GitHub Actions
In CI environments, login profiles are not available. Use environment variables instead: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.
Telemetry
By default, the webapp sends anonymous usage telemetry to Trigger.dev. To opt out, setTRIGGER_TELEMETRY_DISABLED on the webapp container:
Troubleshooting
Deployment fails at the push step
Deployment fails at the push step
The machine running
deploy must have registry access. See the registry setup section.Magic links don't arrive
Magic links don't arrive
The webapp needs an email transport configured. Check the authentication section, or view the magic link directly in the container logs:
Deploy fails with 'ERROR: schema graphile_worker does not exist'
Deploy fails with 'ERROR: schema graphile_worker does not exist'
Graphile Worker migrations failed to run. Check the webapp logs for SSL certificate errors like
self-signed certificate in certificate chain. This is typically caused by PostgreSQL SSL issues with an external database.Fix: mount your CA certificate and set NODE_EXTRA_CA_CERTS on the webapp and supervisor containers, then restart.ClickHouse migrations say 'no migrations to run' but schema is missing
ClickHouse migrations say 'no migrations to run' but schema is missing
The goose migration tracker is out of sync. Exec into the webapp container, set the GOOSE env vars from the startup logs, then run: