Skip to content

Install on another host

Applies to Workletto 1.x.

Render is the quickest install: see Install Workletto. This page covers the other ways. Each starts the same as Render’s step 1: make your own private copy with Use this template. When the app is running, carry on with First-run setup.

Workletto runs on any host that can run a Docker container (your copy has a Dockerfile) or a Node.js 24 app, as long as the app stays running. You need:

  1. The app. Built from your copy’s Dockerfile. It listens on port 3000 and runs its database updates itself when it starts.
  2. A Postgres 17 database. Most hosts offer one next to your app.
  3. Settings on the app. The Deploy My App page makes them for you to paste: paste your copy’s address, click Make my deploy link and choose Another host. Your setup code and the new secret are made in your browser and never sent to us.
    • DATABASE_URL: the database’s connection address, from your host.
    • BETTER_AUTH_URL: your app’s address, for example https://time.yourstudio.com.
    • BETTER_AUTH_SECRET: a long random value that signs people in. The Deploy My App page makes one, or run openssl rand -base64 32.
    • SETUP_CODE: your setup code, from the same page. You enter it once, on the setup page.
    • TRUST_PROXY=1, if your host puts a proxy in front of the app, as most do.
  4. HTTPS at that address. Most hosts set this up for you.

Hosts that work this way include Fly.io, DigitalOcean App Platform, and Coolify on your own server. Serverless-only hosts, such as Vercel and Netlify, aren’t a fit: they run code only while a page is loading, and Workletto is a server that stays running, with timers and scheduled jobs.

Advanced: Docker Compose on your own server

Section titled “Advanced: Docker Compose on your own server”

This path is for teams that already run their own servers and would rather look after one, its updates and its backups themselves. It follows the compose.yaml and .env.example files in the release.

  1. Clone your private repository onto the server.

  2. Copy .env.example to .env and fill in the three values it asks for:

    • BETTER_AUTH_SECRET: a long random value that signs people in. openssl rand -base64 32 makes one.
    • BETTER_AUTH_URL: the address people will type into the browser, for example https://time.yourstudio.com.
    • SETUP_CODE: at least 16 characters. openssl rand -hex 12 makes one. You enter it once, on the setup page.
  3. Start it:

    Terminal window
    docker compose up -d
  4. Put an HTTPS proxy, such as Caddy, in front of port 3000, at the address you set as BETTER_AUTH_URL.

Compose starts the app and a Postgres 17 database. The database port isn’t published, so only the app can reach it. Your data is stored in a Docker volume called db-data, which is kept through restarts and updates. Back it up: download a backup from Manage → Security & data, or use pg_dump as the README in your copy shows.