Skip to content

TLS / HTTPS

How you terminate TLS depends on the install path.

Docker Compose — Caddy auto-HTTPS

The web edge is Caddy, which can obtain and renew Let's Encrypt certificates automatically. Point a domain's DNS at your host, open ports 80 and 443, and set:

# in .env
TESSIO_SITE_ADDRESS=tessio.example.com

Restart (docker compose up -d). Caddy provisions a certificate on first request and stores it in the caddy_data volume (so it persists across restarts). For a plain-HTTP local trial, keep TESSIO_SITE_ADDRESS=:80.

All-in-one

The all-in-one image serves HTTP on port 80. For HTTPS, put a TLS-terminating reverse proxy or load balancer in front (most PaaS platforms provide this automatically), or run a separate Caddy/Traefik/nginx in front of the container.

Kubernetes — TLS at the Ingress

Caddy serves HTTP inside the cluster; terminate TLS at the Ingress. With cert-manager:

helm upgrade tessio oci://ghcr.io/tessio-ai/charts/tessio --reuse-values \
  --set 'ingress.annotations.cert-manager\.io/cluster-issuer=letsencrypt-prod' \
  --set 'ingress.tls[0].secretName=tessio-tls' \
  --set 'ingress.tls[0].hosts[0]=tessio.example.com'

Or reference an existing TLS secret via ingress.tls. Leave config.siteAddress at :80 (the default).