Backups & upgrades
The controller is deliberately simple to operate: one binary, one database, one data directory. But two things are irreplaceable — the encryption key and the SSH proxy host key — so read this page before going to production.
What to back up
Section titled “What to back up”| What | Where (VM install) | Why |
|---|---|---|
| Encryption keys | /etc/tessera/tessera.secret (containers: the TESSERA_ENC_KEY / TESSERA_JWT_SECRET values) | TESSERA_ENC_KEY encrypts every stored credential — losing it makes them all permanently unrecoverable |
| PostgreSQL | your database server (pg_dump) | targets, encrypted credentials, users, grants, the audit log |
| Data directory | /var/lib/tessera (containers: the data volume) | session recordings and the SSH proxy host key |
| Config | /etc/tessera/tessera.conf (containers: your compose/values files) | quick to recreate, but back it up anyway |
Store the tessera.secret backup somewhere safe and separate from the database backup —
together they decrypt every credential.
Upgrading
Section titled “Upgrading”An upgrade restarts the controller, and sessions live in memory — so active SSH/RDP sessions drop. Upgrades are therefore a planned action: pick a maintenance window and tell your users. Database and Kubernetes tunnels are re-established by the desktop app on relaunch; SSH and RDP sessions are not.
VM (apt)
Section titled “VM (apt)”The package is deliberately excluded from unattended-upgrades — it never restarts behind your back:
sudo apt update && sudo apt install --only-upgrade tessera-controllertessera.conf, tessera.secret and /var/lib/tessera are preserved. The latest config
template is written next to yours as /etc/tessera/tessera.conf.example for comparison, and the
database schema migrates automatically on start.
Docker Compose / Kubernetes
Section titled “Docker Compose / Kubernetes”Bump the image tag (Compose) or chart version (Helm) and redeploy — the exact commands are in Docker Compose and Kubernetes. The controller is a single replica by design, so the rollout is a restart, not a rolling update.
Restoring
Section titled “Restoring”- Restore PostgreSQL from your dump.
- Put
tessera.secret(or the key env vars) and/var/lib/tesseraback in place — the same keys that encrypted the data, and the same SSH host key clients have pinned. - Install the same (or newer) controller version and start it. Migrations are applied automatically and are safe to re-run.
If the encryption key you restore doesn’t match the database, the controller starts but stored credentials fail to decrypt — see Troubleshooting.
We would like to count visits with Google Analytics, which needs a cookie. Nothing is loaded and nothing is stored unless you accept. What this sets.