What the server needs
One server or VM does it: Ubuntu Server 26.04, 4 cores, 17 GiB of RAM, an empty second disk and no inbound ports. The install checks every line on this page before it changes anything, and prints the fix for each line that fails. Install the node shows how to run those checks alone, days before you install.
The server
- A server for the node alone.
detachbox-node-hostruns as root and carries out commands the detachbox server signs, so the node takes all of it. Nothing of the same kind runs beside it: no Docker, no LXD, no Incus or cloudflared of your own, no other ZFS pool. The check lists anything it finds with the command that removes it. - Ubuntu Server 26.04 LTS on x86_64 (amd64), booted with systemd and cgroup v2, its root filesystem on ext4 or xfs, not ZFS. A VM in your hypervisor or your cloud account does as well as hardware.
- 4 CPU cores or more. Two stay with the system; every other core runs your terminals.
- 17 GiB of RAM at the very least; 64 GiB and more is where the node pays off. 8 GiB stay with the system and the base image build. The ZFS cache takes a sixteenth of the RAM, rounded down to a power of two, between 1 and 16 GiB. Your terminals get the rest, and the check prints the split for your server.
- Secure Boot off, or the DKMS key enrolled. Ubuntu 26.04 ships ZFS 2.4.1, which loses blocks written with deduplication, so the installer builds OpenZFS 2.4.4 and its kernel module on the server. The headers of the running kernel must be in apt.
- A synchronised clock (NTP, UDP 123). The node accepts the server's requests only within 60 seconds of its own clock.
The disk
The node's ZFS pool needs a second, whole, empty disk of 100 GiB or more. 70 % of the pool becomes your account disk. The rest holds each terminal's system disk, the base images and the free space ZFS needs to stay fast. The pool runs lz4 compression, deduplication and autotrim.
The installer refuses a disk with a partition table, a filesystem, an LVM, RAID or ZFS label, or anything mounted. It never destroys data and has no force flag. If what is on the disk does not matter, wipe it yourself first:
sudo wipefs -a /dev/sdb # the disk you give the pool
sudo zpool destroy <pool> # first, if the disk belongs to a ZFS pool
The network
The node needs no inbound port. Every connection it makes goes out:
| Destination · port | Why |
|---|---|
api.detachbox.com · TCP 443 | The detachbox server: enrollment, node-host releases, reports |
region1.v2.argotunnel.com, region2.v2.argotunnel.com · TCP and UDP 7844 | The node's Cloudflare Tunnel |
Your apt mirror, archive.ubuntu.com, security.ubuntu.com · TCP 80 or 443 | Ubuntu packages, on the server and in the base image |
pkgs.zabbly.com · TCP 443 | Incus packages |
pkg.cloudflare.com · TCP 443 | cloudflared packages |
github.com, release-assets.githubusercontent.com, api.github.com · TCP 443 | The OpenZFS release; tools of the base image |
images.linuxcontainers.org · TCP 443 | The Ubuntu image the base image is built on |
download.docker.com, deb.nodesource.com, cli.github.com, gitlab.com · TCP 443 | Docker, Node.js and the GitHub and GitLab CLIs in the base image |
registry.npmjs.org, cdn.playwright.dev · TCP 443 | Codex, pnpm, yarn, Playwright and its browser |
downloads.claude.ai, astral.sh, mise.run · TCP 443 | Claude Code, uv and mise |
Your NTP servers (Ubuntu's: ntp.ubuntu.com) · UDP 123 | The clock |
s.appmaster.io · TCP 443 | Error reports of node-host and the edge to detachbox. Optional: the node works without it, and the checks do not test it |
The node rebuilds its base image every 6 hours, so these hosts stay in use after the install.
Give the terminals the same outbound internet a developer's laptop gets: agents call their model providers, and builds pull from package registries.
Let these hosts through without TLS inspection. node-host and cloudflared accept only certificates of public authorities, and when something in between re-signs the traffic, the check names the authority it got.
Your engineers' browsers reach the dashboard at my.detachbox.com and api.detachbox.com, and the node's own addresses under detachbox.dev, which What terminals reach lists.
The token
The install takes an enrollment token from your detachbox contact. It works for one server and one install. A server has 7 days to enroll with it, and after enrolling the token takes reruns of that install for 7 more days. A new token replaces the old one.