@php $h = 'font-display text-base font-semibold text-ink'; $p = 'text-sm leading-relaxed text-ink-2'; $li = 'text-sm leading-relaxed text-ink-2'; $code = 'rounded bg-inset px-1.5 py-0.5 font-mono text-[12px] text-accent-text'; $pre = 'overflow-x-auto rounded-md border border-line bg-inset p-3 font-mono text-[11px] leading-relaxed text-ink-2'; @endphp

Three modes

Where and how the panel is reachable is set under System → Domain & TLS. Domain changes apply only after a stack restart (button in System).

Built-in TLS (Let's Encrypt)

  1. Point your domain's DNS at the server IP.
  2. System → enter the domain, TLS termination set to "Built-in TLS".
  3. Save → restart the stack. The certificate is issued and renewed automatically on the first HTTPS request.

Behind an external reverse proxy (proxy manager)

In this mode your upstream proxy terminates TLS; Clusev issues no certificate of its own.

1. In the panel: System → enter the domain → TLS termination to "External reverse proxy" → save → restart the stack.

2. In the proxy manager: create a new host/entry with these values:

Incoming domain:   panel.<your-domain>
Target / backend:  http://<clusev-server-ip>:80        (HTTP, not HTTPS)
Forward:           Host header  +  X-Forwarded-Proto: https
WebSocket:         enable  (for realtime: /app/*  and  /apps/*)

Important: the target is HTTP on port 80 of the Clusev server, and the proxy must forward X-Forwarded-Proto: https and WebSocket upgrades — otherwise assets/login or the live connection stay blank.

3. On the Clusev server (`.env`): mark the proxy address as trusted — otherwise the `Secure` cookie and the real visitor IP in the audit log are not correct:

TRUSTED_PROXY_CIDR=<proxy-ip>/32

# then apply once:
sudo clusev update

4. Firewall: secure the Clusev server's HTTP port (80) so it is reachable only from the proxy.

Note: over the domain (HTTPS) everything works including security keys. The bare-IP path (http://<server-ip>) stays reachable for recovery — the limits there are covered under "Security & 2FA".