---
title: "Your own server"
description: "Run Ghostdock's VMs on a server you own. One command sets it up, or your agent does it for you."
canonical_url: "https://docs.ghostdock.ai/getting-started/your-own-server"
---
# Your own server

> Run Ghostdock's VMs on a server you own. One command sets it up, or your agent does it for you.

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.

<table>
<thead>
  <tr>
    <th>
      The server needs
    </th>
    
    <th>
      
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      System
    </td>
    
    <td>
      Debian 13, Ubuntu 26.04, or Ubuntu 24.04 with its HWE kernel (Linux 6.12 or later), x86-64
    </td>
  </tr>
  
  <tr>
    <td>
      Memory
    </td>
    
    <td>
      2 GiB or more; everything above that is room for VMs
    </td>
  </tr>
  
  <tr>
    <td>
      Network
    </td>
    
    <td>
      Ports 80, 443 and 2222 reachable, or a web server of your own in front (the setup handles both)
    </td>
  </tr>
</tbody>
</table>

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:

```text [Prompt]
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:

```bash [On your server]
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:

```bash [Terminal]
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:

1. **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.
2. **Connect:** Ghostdock checks the server.
3. **Domain:** a domain of yours for VM URLs. Ghostdock names the two DNS records to create.
4. **Reach:** Ghostdock opens a URL on your server from outside, to prove the way in works.
5. **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:

```bash [Terminal]
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 4GiB` keeps that much RAM for them.
- **Folders of the server in VMs:** `--host-paths /srv/media:ro,/srv/projects` lists 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 `uninstall` removes exactly what it added and
disconnects the server. `--check` shows 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`.

```bash [On your server]
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.


## Sitemap

See the full [sitemap](https://docs.ghostdock.ai/sitemap.md) for all pages.
