> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suji.fr/llms.txt
> Use this file to discover all available pages before exploring further.

# VMs

> How Suji VMs work: dedicated Linux machines with public IPs, persistent storage, snapshots, and a built-in Cloudflare Tunnel.

A **VM** (sometimes called an "instance" in the UI) is a dedicated Linux virtual machine. It's where your apps run.

## What's on a VM

Every Suji VM ships with:

* **Linux** (current LTS) — kernel, package manager, the whole OS.
* **Docker + docker compose** — the runtime for marketplace apps.
* **cloudflared** — runs as a system container, registers a Cloudflare Tunnel for your VM, terminates inbound HTTPS for your apps.
* **suji-net** — the docker network that joins apps to cloudflared.
* **A management agent** — what powers the dashboard's Terminal / Files / Logs / Metrics tabs. Encrypted, only reachable by Suji.
* **Sensible firewall defaults** — SSH (22) open, management access locked to Suji, everything else closed. You manage your own rules in the Firewall tab.

## Sizes

| Size   | vCPU | RAM   | Storage | ≈ / month |
| ------ | ---- | ----- | ------- | --------- |
| Small  | 2    | 4 GB  | 40 GB   | €12.99    |
| Medium | 4    | 8 GB  | 80 GB   | €19.99    |
| Large  | 8    | 16 GB | 160 GB  | €39.99    |
| XL     | 16   | 32 GB | 320 GB  | €79.99    |

Billing is **hourly** — monthly figures assume 24/7. **Stopping a VM does not stop the bill**: the cloud provider keeps the disk and IP reserved while it's stopped, so the hourly rate continues. To stop paying for a VM you don't need, **destroy it** (snapshot first if you want to come back). See [Billing & credits](/concepts/billing-credits).

You can **resize** between sizes any time. Storage can only grow, never shrink. See [Resize](/manage-vm/resize).

## Regions

| Region slug      | Location             |
| ---------------- | -------------------- |
| `eu-falkenstein` | Falkenstein, Germany |
| `eu-nuremberg`   | Nuremberg, Germany   |
| `eu-helsinki`    | Helsinki, Finland    |

All regions are EU. Region is fixed for the life of the VM — to move, snapshot and restore into a new VM.

## Network

* **Public IPv4 + IPv6** — assigned at creation.
* **`*.suji.fr` ingress** — apps you mark "exposed" get a public HTTPS URL via Cloudflare Tunnel. No DNS to set up.
* **Outbound:** unrestricted *except* ports 25 and 465 (SMTP), which are blocked at the network layer to prevent abuse. Use 587 or an HTTP relay for mail.

See [Network](/manage-vm/network) for IP / traffic details and [Firewall](/manage-vm/firewall) for inbound rules.

## Storage

* The VM's storage is **persistent** — survives restarts, restorations, resize-ups.
* Each marketplace app gets its own **named volume** inside the VM for app data. Volumes survive container recreates and version upgrades. Uninstalling the app deletes its volume by default — or you can choose **keep data** on uninstall to preserve it.
* **Snapshots** capture the full VM disk and are stored in the EU, separate from the live VM. See [Snapshots](/manage-vm/snapshots).

## Access

| Channel                | How                                                                           |
| ---------------------- | ----------------------------------------------------------------------------- |
| Dashboard Web Terminal | Tab on the instance page; no SSH config needed                                |
| SSH                    | `ssh root@<public-ip>` with the SSH key you upload in **Settings → SSH Keys** |
| App's URL              | `https://<install-subdomain>.suji.fr/` if the app is exposed                  |
| Dashboard Files        | Browse + edit app volumes / home dir directly in the browser                  |
| Dashboard Logs         | Live `docker compose logs` per install                                        |

The web terminal lands you as `root` on the VM. The per-app terminal (pick an install from the selector) lands you inside that app's container as the image's `USER`.

## Lifecycle

* **Provisioning** — 60–120 s from click to `running`.
* **Stop / Start** — graceful. Stop powers down the OS but **does not pause billing** — the cloud disk/IP stay reserved and accrue at the same hourly rate. Stop only for ops reasons, not to save money.
* **Restart** — soft reboot.
* **Restore from snapshot** — overwrites the disk from a snapshot.
* **Destroy** — irreversible. Apps and data go with it. Snapshots are retained for the retention window (see [Snapshots](/manage-vm/snapshots)).

## Next

<CardGroup cols={2}>
  <Card title="Apps" icon="grid" href="/concepts/apps">
    What an "app install" is and how it relates to the VM.
  </Card>

  <Card title="VM management" icon="server" href="/manage-vm/terminal">
    Day-to-day operations on a running VM.
  </Card>
</CardGroup>
