One-click deploy

Deploy on EasyPanel

EasyPanel gives you a UI over Docker with managed domains and TLS. Clerq runs on it as two services: a Postgres database and the published app image. The app migrates the database itself on first boot.

1. Create a project

In EasyPanel, create a new project to hold both services (for example, clerq).

2. Add a Postgres service

Add a service from the Postgres template. Note the credentials and the internal host EasyPanel assigns it (commonly the service name, e.g. clerq_postgres) - you will reference them in the app's DATABASE_URL.

3. Add the app service

Add an App service with:

  • Source: Docker image
  • Image: ghcr.io/punterdigital/clerq:latest
  • Port: 3000 (the proxy maps your domain to this)

4. Set environment variables

On the app service, set:

DATABASE_URL=postgresql://postgres:PASSWORD@clerq_postgres:5432/postgres
BETTER_AUTH_SECRET=a-32-char-random-secret
BETTER_AUTH_URL=https://clerq.your-domain.com

Use the Postgres host, user, password and database from step 2 in DATABASE_URL, and set BETTER_AUTH_URL to the domain you attach to the app service. See Environment variables for the full list (including optional Google sign-in).

5. Attach a domain and deploy

Attach a domain to the app service (EasyPanel provisions TLS automatically), then deploy. On first boot the container applies the database migrations and starts serving. Open your domain and create your account.

Upgrading later is a redeploy that pulls the newer image; migrations run again on boot. Set up backups from Backups & upgrades, and review the production checklist.