Your own server
Ghostdock runs on your hardware as happily as on ours. Bring any Linux server: a box in the office, a dedicated machine at your hosting provider, a VPS. Your agent gets the same VMs, the same URLs and the same tools, and the machines, the data and the bill stay yours.
Idle VMs stop by themselves and wake when they are needed, so a server holds far more VMs than it could keep running at once.
Incus, the perfect fit
Ghostdock runs on your server through Incus, the open-source manager for Linux system
containers and VMs. Never used it? You don't need to. The setup installs Incus 7.0 LTS for you,
gives Ghostdock a project of its own, and leaves everything else on the server alone. You never
have to type an incus command.
Why Incus: every Ghostdock VM gets limits that Incus enforces, in a project Ghostdock can never leave. Your own containers, VMs, networks and storage pools stay exactly as they are.
| The server needs | |
|---|---|
| System | Debian 13, Ubuntu 26.04, or Ubuntu 24.04 with its HWE kernel (Linux 6.12 or later), x86-64 |
| Memory | 2 GiB or more; everything above that is room for VMs |
| Network | Ports 80, 443 and 2222 reachable, or a web server of your own in front (the setup handles both) |
Already running Incus 7.0 or later on another system? That works too.
Let your agent do it
The easiest way. In Ghostdock, open Providers → Incus, name the server, and copy the prompt it shows into your agent. Or ask an agent that has Ghostdock connected:
Connect my server 203.0.113.10 to Ghostdock as an Incus host. You can reach it with
ssh root@203.0.113.10.
The agent reads Ghostdock's host-setup skill. It checks the server first, asks you the few
questions that matter in one message (is the server only for Ghostdock, where should VM data
live, which domain should VM URLs use), runs the setup, and walks through what is left until
your first VM has a URL.
Or run one command
In Ghostdock, open Providers → Incus, name the server, and copy its command. It carries a join token that works once, within an hour:
curl -fsSL https://ghostdock.ai/incus-host.sh | sudo sh -s -- --app https://ghostdock.ai --token <join token>
The script checks the server, prints its plan, and asks before it changes anything. Run it with
--check first to see the plan and change nothing. On a fresh server the whole setup, Incus
included, takes about a minute. It is safe to run again after a failure.
The CLI gets you the same command:
ghostdock provider connect incus --name office
Then finish in Ghostdock
The script ends with the steps that are left, in order, and a link to the provider's page in Ghostdock, which tracks them:
- Firewall: open TCP 80, 443 and 2222 in your hosting provider's firewall or router, if there is one. The server's own firewall is already done; this one Ghostdock can't see.
- Connect: Ghostdock checks the server.
- Domain: a domain of yours for VM URLs. Ghostdock names the two DNS records to create.
- Reach: Ghostdock opens a URL on your server from outside, to prove the way in works.
- Default: whether new VMs land on this server unless someone picks another.
Or hand the rest to your agent, as the script suggests: "Finish setting up the Ghostdock provider office." It asks Ghostdock what is left and does each step.
Then create a VM on it like any other:
ghostdock vm up --name hello --provider office
Good to know
- "Ghostdock's router is not running" on the first check of a fresh server: its first
image download can take longer than the setup waits. Start it once and check again:
sudo incus start ghostdock-router --project ghostdock. Host release 0.4.14 retries by itself. - Your other data: the setup never erases or formats a disk. To keep VMs on a ZFS pool of
your own, pass
--pool-dataset tank/ghostdock; otherwise it offers a pool in a file on the system disk. - A server that does other things:
--memory-reserve 4GiBkeeps that much RAM for them. - Folders of the server in VMs:
--host-paths /srv/media:ro,/srv/projectslists the only folders VMs may ever mount. - Updates: the host updates itself a day after each Ghostdock release, and rolls back if the new release isn't healthy within five minutes. Incus itself stays yours to update.
- Isolation: VMs on your server share its kernel. Work that needs a hard boundary between strangers belongs on Ghostdock Cloud.
- Taking it off again: the same script with
uninstallremoves exactly what it added and disconnects the server.--checkshows what it would remove; without it, it asks first. Your VMs go only with--remove-vms, and your data (Disks, snapshots) only with--remove-data; without it, the uninstall keeps them and says what stays. Incus stays unless you add--remove-incus.
curl -fsSL https://ghostdock.ai/incus-host.sh | sudo sh -s -- uninstall --check
Every option: incus-host.sh --help.
Docker hosts (experimental)
Already running everything on Docker and don't want Incus? Ghostdock can run VMs as containers
next to yours, on Docker 28 or later, with Sysbox for systemd and Docker inside VMs. Choose
Providers → Docker (experimental), or ghostdock provider connect docker. It works, but Incus
is where Ghostdock is at home: stronger limits, snapshots, and a clean line between your things
and ours.