TurboPanel Docs
Using TurboPanel

Servers

A server is a Linux host running the TurboPanel daemon, enrolled into one organization. Everything you deploy runs on one. This chapter is the app side of your servers: Servers (/<org>/servers), a server's control panel, pending registration Keys, and the organization-wide Settings. Installing the daemon by hand, updating it from the shell, and what lives where on the host are the operator's pages: Daemon setup and Daemon update.

The model

TermMeaning
Registration keyA one-shot credential the app mints when you add a server. It is embedded in the install command; the daemon consumes it at enrollment and it is bound to that server from then on. An unconsumed key is a pending key.
Daemonturbopaneld on the host: enrolls with the key, holds a signed key pair, streams facts and metrics, and executes the commands the control plane queues (deploys, reboots, updates). It connects out to the control plane; nothing connects in.
Co-located serverOn self-hosted, the control plane's own host is also a server — enrolled at install and badged Platform Server. It cannot be deleted, its key cannot be revoked, and it updates with the control plane rather than through the app.
CapacityAn owner-set ceiling on how many servers the organization may hold (Servers → Settings → Server capacity); enrolled servers and pending keys both count. On High Availability the purchased licenses bound it as well.
Machine classPhysical or virtual. Decides whether hardware-sensor slots are used; inferred from discovered sensors unless pinned.

Two rules:

  • TurboPanel observes host interfaces; it does not configure them. Addresses and routes are the host's. The app reads what the daemon reports and pins meaning onto it (datacenter membership, addresses for hosting). The host firewall is TurboPanel's. The installer removes ufw, firewalld and iptables-persistent from every host it installs on (they do not compose with Docker, and a host that shipped with ufw active kept the control plane's 8443 closed), so nothing on the host blocks the control plane or a published service port after install. The rules TurboPanel applies in their place — derived from what the control plane deploys, with organization defaults and per-server rules on top — are shown as a preview on each server's Firewall tab today and are not applied yet; until enforcement is switched on, restrict access from outside the host (cloud security groups, a provider firewall) if you need to. See Firewall.
  • A rebuilt host is a new server. A key is consumed once; a host that is reinstalled from scratch enrolls with a fresh key and appears as a new server row.

Before you begin

  • A Debian 12+ or 64-bit Raspberry Pi OS host (x86_64 or aarch64) with root and outbound HTTPS to the control plane (supported platforms).
  • Organization owner to mint a key; manager for everything else on this page except capacity.
  • On self-hosted, the control plane's public URL configured (Admin → Access → Hostnames) so the install command names an address the host can reach.

Add a server

Servers → + Server (the Add server wizard: Name → Install → Connect).

Server name (optional) — how the row will be labelled; the daemon's hostname is used otherwise. Continue mints the key. Refused when capacity is exhausted (server_capacity_exceeded) or, on High Availability, when every license is held (no_license_available — Open billing).

Install command: curl -fsSL turbopanel.sh | TURBOPANEL_LICENSE=… sh, with TURBOPANEL_HOST set to your control plane's public URL. Copy install command and run it as root on the host. It installs the daemon, enrolls with the key, and starts the service.

Connect waits for the daemon's first heartbeat, then opens the server. The key disappears from Keys the moment it is consumed.

The install command carries a secret

The key inside the command enrolls one host; treat the command as a password until it has been used. A key you will not use is deleted under Servers → Pending keys.

Servers → Pending keys lists the unconsumed keys (owner-only). Delete is two-press. A key bound to a live server cannot be deleted from here (license_has_attached_server) — delete the server instead.

All servers

Servers shows every server the organization holds, in Detail or Summary layout: online / offline / initializing, hostname, class, cores and RAM, the daemon build, and whether an update is available. The Overview tiles (Servers · Cores · RAM) total all servers.

Batch update: on TurboPanel High Availability servers roll out from Admin → Updates, and per-server Update stays hidden (updates_managed). On self-hosted, Update (n) is refused with control_plane_upgrade_required until Admin → Updates has this host's daemon and the control plane on the target build. After that gate opens, selected servers with an update available can move together; the co-located server is not in that list.

The control panel

Open a server for six tabs: Overview · Control · Time · Network · Firewall · Metrics. The Firewall tab is described in Firewall.

Overview

  • Details — hostname, machine id, OS, daemon build, last seen, addresses.
  • Labels — key/value labels on the server (Add label, Save). A service can pin itself to servers by label with plain Compose: deploy.placement.constraints: ["node.labels.tier == db"] (== / !=).
  • License (High Availability) — the tier the server sits on, the tier its hardware requires, and what is unwatched if they differ; Daily notice shows the last tier notice. See License tiers.
  • Machine class — Auto (default), Physical or Virtual. The pin sets entitlement, not what the daemon collects: Physical unlocks the sensor slots the tier includes; Virtual suppresses them; Auto infers Physical once sensors are discovered and never infers Virtual.
  • Hardware profile — which sensors feed CPU, drive and GPU temperature, which physical NICs are monitored, the hosting storage path (the mount that should hold application storage; empty auto-detects), and manual CPU TDP / Tjmax overrides. Drive temperature reporting (drivetemp) is opt-in. What each choice changes on the Metrics tab is in Server metrics.

Control

  • Server proxy — the per-server ingress container the platform manages for hosting rows; shows whether it is provisioned and running, with Restart. Not provisioned means no hosting has been deployed to this server yet.
  • Commands — Change hostname (pushed to the host by command) and Reboot server. Commands are queued and run when the daemon leases them — an offline server picks them up on reconnect; the app shows each command's outcome and log.
  • Daemon update — when a newer build is published and the platform gate is open, Update runs the daemon's own updater over the connection; Clear stuck update resets an update the daemon never reported back. While the gate is shut the badge reads Waiting for the control plane upgrade. On TurboPanel High Availability the button is hidden. Co-located hosts are updated from Admin → Updates.
  • SSH — the SSH port the platform uses for this server: Use inherited (organization → datacenter default) or This server with a port; Save SSH port.
  • Revoke daemon key — the compromised-host cutoff. Revoking closes the live session and refuses the key from then on; the host cannot enroll again until this server is deleted and a rebuilt host is enrolled fresh. Not offered for the co-located server.
  • Delete server — two-step confirm. Refused while dependent resources remain (server_has_blockers: networks, containers or addresses on the server — the response counts each); tear down or move the environments placed here first. The co-located server cannot be deleted.

Time

  • Time sync status — facts from the last heartbeat: whether the NTP client is enabled and Synced, and the servers it uses.
  • Timezone — the effective timezone (server → datacenter → organization default); Apply timezone pushes a change to the host.
  • NTP configuration — NTP client enabled, NTP servers, Fallback servers; Apply NTP pushes it. Empty values inherit from the datacenter or the organization's host defaults.

Network

Read-only view of what the daemon reports and how the organization has pinned it: Interfaces (with the datacenter each address is pinned into; a pin whose address the daemon stopped reporting shows Stale), Datacenters (membership pins for this host), Managed addresses (organization address-pool rows assigned to this host), and Mesh (its TurboFabric state). Changing any of it is done from Datacenters and networking.

Metrics

Live and historical charts for the host; see Server metrics for what each one means and Live metrics sessions for the session limit.

Organization settings

Servers → Settings.

PanelWhat it sets
Default server timezoneThe organization's timezone default, and Enforce org default on every server.
Temperature display°C or °F on every Metrics tab.
Host defaultsThe organization-level SSH port, NTP client enabled, NTP servers, Fallback NTP servers — the top of the organization → datacenter → server cascade (most specific wins).
Server capacityMax servers or Unlimited servers (owner-only). Enrolled servers and pending keys count.

Reference

ItemValue
Install commandcurl -fsSL turbopanel.sh | TURBOPANEL_LICENSE=… sh, TURBOPANEL_HOST=<public URL>; TURBOPANEL_INSECURE_TLS=1 only when the control plane serves the platform CA
Keyone-shot; bound at enrollment; revocable; a rebuilt host needs a new one
Reserved namethis server (the co-located server)
Control-panel tabsOverview · Control · Time · Network · Firewall · Metrics
Machine classauto (default) · physical · virtual
Cascadestimezone, SSH port, NTP: organization → datacenter → server
Daemon session15-minute signed tokens; revocation takes effect at the next one at the latest

Errors

CodeStatusMeaning
server_capacity_exceeded409Enrolled servers plus pending keys reach Max servers.
no_license_available409High Availability: every purchased license is held or releasing.
license_has_attached_server409The key is bound to a live server; delete the server, not the key.
server_has_blockers409Networks, containers or addresses still reference the server (counts in the response).
The co-located control plane server cannot be deleted / …daemon key cannot be revoked403The control plane's own host is not removable from its own app.
The co-located development daemon cannot be updated from the control plane403Update the control plane instead.
control_plane_upgrade_required409Self-hosted: the server-update gate is shut. The badge reads Waiting for the control plane upgrade.
updates_managed409TurboPanel High Availability: per-server Update is hidden. Use Admin → Updates.
Daemon not connected, Up to date, Target unavailable404 (update)The daemon must be online to update; there is no newer build; or the release manifest could not be read. Other commands queue and wait.
Server is not enrolled409The row has no daemon key yet — the install command has not run.
Invalid hostname, Invalid sshPort, Invalid ntp, Invalid timezone, Invalid machineClass400The value did not validate.
Not found404No such server in this organization.
Edit on GitHub

Last updated on

On this page