Skip to content

Deploying a ToolJet App

Introduction

ToolJet is an open-source low-code platform for internal tools. This guide walks through containerizing ToolJet with a Dockerfile, connecting it to PostgreSQL and Redis, adding optional storage, and deploying it to Klutch.sh over HTTP.

Prerequisites

  • GitHub repository containing your Dockerfile.
  • External PostgreSQL (for app data) and Redis (for cache/queues), either managed or running as separate apps.
  • Klutch.sh project set up in klutch.sh/app.

Project structure

.
└── Dockerfile

Sample Dockerfile

FROM tooljet/tooljet-ce:latest
# Default ToolJet port
ENV PORT=3000
EXPOSE 3000

Required environment variables

  • TOOLJET_HOST – public URL (e.g., https://example-app.klutch.sh).
  • DATABASE_URL – PostgreSQL connection string, e.g., postgres://USER:PASSWORD@HOST:PORT/DB.
  • REDIS_URL – Redis connection string, e.g., redis://:PASSWORD@HOST:6379.
  • LOCKBOX_MASTER_KEY – secure random key for secrets.
  • SECRET_KEY_BASE – secure random key for Rails.
  • DISABLE_SIGNUPS – set to true for controlled access.

Optional environment variables

  • MINIO_ACCESS_KEY / MINIO_SECRET_KEY / MINIO_ENDPOINT / MINIO_BUCKET if you use S3-compatible storage.
  • PORT – override if you change the internal port.

Persistence

ToolJet stores metadata in PostgreSQL. If you use local asset storage, attach a volume:

  • Mount path: /app/server/files
  • Size: align with expected uploads/exports

Networking

  • Protocol: HTTP
  • Internal port: 3000
  • Users access via https://example-app.klutch.sh while Klutch.sh routes to port 3000 inside the container.
Terminal window
curl -I http://localhost:3000

Deployment on Klutch.sh

  1. Push your Dockerfile to GitHub.
  2. In klutch.sh/app, create a new app and select GitHub as the source.
  3. Klutch.sh automatically detects the Dockerfile in the repository root.
  4. Choose HTTP traffic and set the internal port to 3000.
  5. Add environment variables for DATABASE_URL, REDIS_URL, keys (LOCKBOX_MASTER_KEY, SECRET_KEY_BASE), and TOOLJET_HOST. Mark secrets as sensitive.
  6. Optionally attach a persistent volume at /app/server/files if storing files locally.
  7. Deploy and sign in with the first user you create (or enable controlled signups via DISABLE_SIGNUPS=true).

Verification

  • UI: open https://example-app.klutch.sh and ensure the dashboard loads.

  • API:

    Terminal window
    curl -I https://example-app.klutch.sh/api/health

Next steps

  • Set up email/OAuth for user onboarding.
  • Configure object storage (S3/MinIO) if you expect significant file uploads.
  • Enable database backups for PostgreSQL and persistence for Redis if needed.