> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ibee.co.in/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ibee.co.in/docs/_mcp/server.

# Launch your first VM

> A 5-minute quickstart for deploying your first IBEE Solutions VM from the portal or the ibee CLI.

This quickstart walks you through launching your first IBEE Solutions VM — pick a region, plan, and OS, deploy the server, and SSH in. You can use the portal, the [`ibee`](#using-the-ibee-cli) CLI, or the API.

By the end you'll have a running Ubuntu 24.04 VM in Amaravati on a small Performance plan, accessible over SSH and ready to run your workload.

## Before you begin

You'll need:

* An [IBEE Solutions account](/docs/getting-started/account-setup/sign-up) — verified for compute access.
* An organization ([Create an organization](/docs/getting-started/account-setup/create-an-organization)).
* Sufficient wallet credits ([Billing and usage](/docs/platform-fundamentals/billing-and-usage)).
* A local SSH key pair. Generate one if you don't have it:

```bash
ssh-keygen -t ed25519 -C "your-email@example.com"
```

Your public key is at `~/.ssh/id_ed25519.pub`.

## Option A — Launch from the portal

### 1. Open Cloud VMs

In the portal sidebar, open **Infrastructure → Cloud VMs**, then click **Deploy VM**.

### 2. Pick a region and location

Under **Location**, select the **Asia** tab and **Amaravati** for this quickstart. See [Regions and locations](/docs/getting-started/overview/regions-and-locations) for the full list.

### 3. Choose a plan

Pick any plan that fits your workload. For a first VM we recommend `perf.1.c2.m4` or `std.1.c4.m16` — both have enough headroom for typical web/API work. The estimated monthly and hourly cost updates as you select.

**Standard VMs** — balanced vCPU, memory, included disk and bandwidth. Good default for production:

| Plan                       | vCPU | RAM     | Disk   | Bandwidth | Best for                                            |
| -------------------------- | ---- | ------- | ------ | --------- | --------------------------------------------------- |
| `std.1.c2.m8`              | 2    | 8 GiB   | 50 GB  | 2 TB      | Development environments, small apps, APIs, staging |
| `std.1.c4.m16` *(popular)* | 4    | 16 GiB  | 100 GB | 4 TB      | Production web apps, SaaS, APIs, small databases    |
| `std.1.c8.m32`             | 8    | 32 GiB  | 150 GB | 6 TB      | SaaS, CRM/ERP, medium databases                     |
| `std.1.c16.m64`            | 16   | 64 GiB  | 200 GB | 8 TB      | High-traffic apps, growing databases                |
| `std.1.c32.m128`           | 32   | 128 GiB | 300 GB | 12 TB     | Enterprise, analytics, large backends               |
| `std.1.c64.m256`           | 64   | 256 GiB | 400 GB | 16 TB     | Large-scale systems, in-memory databases            |

**Performance VMs** — compute-optimized with stronger CPU density per core:

| Plan                       | vCPU | RAM     | Disk   | Bandwidth | Best for                                           |
| -------------------------- | ---- | ------- | ------ | --------- | -------------------------------------------------- |
| `perf.1.c1.m2`             | 1    | 2 GiB   | 40 GB  | 1 TB      | Dev, testing, lightweight workloads                |
| `perf.1.c2.m4`             | 2    | 4 GiB   | 50 GB  | 2 TB      | First VM, microservices, API gateways              |
| `perf.1.c4.m8` *(popular)* | 4    | 8 GiB   | 80 GB  | 3 TB      | High-traffic web servers, stateless apps           |
| `perf.1.c8.m16`            | 8    | 16 GiB  | 120 GB | 5 TB      | Gaming servers, batch processing, CPU ML inference |
| `perf.1.c16.m32`           | 16   | 32 GiB  | 160 GB | 8 TB      | Data pipelines, container workloads                |
| `perf.1.c32.m64`           | 32   | 64 GiB  | 240 GB | 12 TB     | HPC, distributed systems, compute-intensive apps   |
| `perf.1.c64.m128`          | 64   | 128 GiB | 320 GB | 16 TB     | Large compute clusters, simulations                |

For full network bandwidth tiers per plan and the naming convention, see [Instance types](/docs/infrastructure/cloud-vms/instance-types).

### 4. Select an operating system

On the **Operating System → Templates** tab, pick **Ubuntu**, then choose **Ubuntu 24.04** from the OS Version dropdown. The available templates are filtered to show only images compatible with Cloud VMs.

For ISOs, snapshots, or backups as the source, see [Custom images](/docs/infrastructure/cloud-vms/custom-images).

### 5. Add an SSH key

Under **SSH Keys**, click **Add Key**, open the **Import Key** tab, give the key a name, and paste the contents of `~/.ssh/id_ed25519.pub`. If you've already saved the key, pick it from **Select SSH Keys** instead. The key is injected into the VM at first boot. See [SSH Keys](/docs/tools/ssh-keys) for full details.

### 6. Keep the default network and billing

Leave **Network Configuration** on **Public IP** with **No VPC · public interface only**, and don't select a firewall group — the default firewall group is attached automatically. Leave **Billing** on **Hourly**. See [Create a VM](/docs/infrastructure/cloud-vms/create-a-vm) for the other options.

### 7. Set a hostname and deploy

Under **VM Details**, keep **Instances** at 1 and enter a lowercase hostname (letters, numbers, hyphens only — for example `web-01`). Then click **Deploy** in the bottom bar. The platform checks your billing state and wallet balance first. If credits are sufficient, you return to the Cloud VMs list while the VM provisions. If not, a **Billing needs attention** popup prompts you to add credits.

### 8. Connect

Once the status shows **Running**, open the VM and copy the SSH command from **Overview → Connection Details**, or copy the public IP from the Cloud VMs list and SSH in:

```bash
ssh ubuntu@<public-ip>
```

If SSH times out, check that the VM's firewall group allows port 22 from your address.

You're done — you have a running VM. Next steps below.

## Option B — Using the ibee CLI

`ibee` is the official IBEE Solutions command-line tool. Use it to launch and
manage VMs from scripts, CI/CD, and your terminal.

### Install

Install Python 3.10 or later, then install the CLI from PyPI:

```bash
python3 -m pip install --upgrade ibee-cli
```

On Windows, use `py -m pip install --upgrade ibee-cli`.

Verify the install by running `ibee --version`.

### Authenticate

Generate an API token in the portal under **Organization → API Tokens**, then
export the token and workspace used by your commands:

```bash
export IBEE_TOKEN="ibee_prod_key_xxxxxxxxxxxx"
export IBEE_WORKSPACE_ID="WORKSPACE_ID"
```

### Launch a VM

A VM create request uses IDs returned by the compute catalog. List valid sites,
plans, and images first:

```bash
ibee compute sites
ibee compute plans --vm-type cloud --site-id SITE_ID
ibee compute images --vm-type cloud --site-id SITE_ID
```

Pass the returned IDs to `vms create`. The name is the first positional
argument. Save your public key in the portal first and copy its SSH key ID.
Omit `--site-id` to let IBEE select a site automatically:

```bash
ibee vms create web-01 \
  --site-id SITE_ID \
  --plan-id PLAN_ID \
  --template-id IMAGE_ID \
  --ssh-key-id SSH_KEY_ID \
  --wait
```

Create and power actions are asynchronous. `--wait` polls the returned
operation until it finishes; without it, save the operation ID and check it
later with `ibee ops get <operation-id> --wait`.

### Helpful CLI commands

| Command                                | Description                                |
| -------------------------------------- | ------------------------------------------ |
| `ibee vms list`                        | List Cloud VMs in the current workspace    |
| `ibee vms get <vm-id>`                 | Show one VM's details                      |
| `ibee vms metrics <vm-id>`             | Show current resource-usage metrics        |
| `ibee vms stop <vm-id> --wait`         | Stop a running VM and wait for completion  |
| `ibee vms start <vm-id> --wait`        | Start a stopped VM and wait for completion |
| `ibee vms reboot <vm-id> --wait`       | Reboot a VM and wait for completion        |
| `ibee vms delete <vm-id> --yes --wait` | Permanently delete a VM                    |
| `ibee ops get <operation-id> --wait`   | Poll an asynchronous operation             |

For full help on any command:

```bash
ibee vms create --help
```

### List available sites, plans, and images

```bash
ibee compute sites
ibee compute plans --vm-type cloud
ibee compute images --vm-type cloud
```

### Output as JSON

Put the global `--json` option before the command for machine-readable output:

```bash
ibee --json vms list | jq
```

## Verify

Whichever path you took, confirm the VM is healthy:

```bash
# From your laptop
ssh ubuntu@<public-ip> 'uname -a; uptime'

# Inside the VM
sudo apt update
sudo apt install -y nginx
curl -I http://localhost
```

Open `http://<public-ip>` in a browser to see the default nginx page.

## What to do next

* **Protect your data** — turn on [scheduled backups](/docs/tools/backups/enable-backups) or take a [manual snapshot](/docs/tools/snapshots/create-a-snapshot).
* **Open the right ports** — add rules to the VM's [firewall group](/docs/network-security/firewalls) before exposing services beyond SSH.
* **Add a domain** — point an `A` record at the VM's IP with your DNS provider.
* **Add persistent storage** — [attach a Block Storage volume](/docs/infrastructure/cloud-vms/attach-volumes) for data that should outlive the VM.
* **Resize when ready** — move to a larger plan from **Settings → Change Plan** ([Resize a VM](/docs/infrastructure/cloud-vms/resize-a-vm)).

## Troubleshooting

**Deploy shows an error message**
The portal validates the form when you click **Deploy** and names the missing item — for example a plan, an OS version, or a hostname. Fix it and click **Deploy** again.

**Billing needs attention popup**
Your organization's wallet balance is insufficient for the selected plan. Click **Add Credits** to top up, then return to deploy.

**SSH connection refused**
Wait until the VM shows **Running** and the public IP is populated. The first `sshd` start takes a few seconds after the IP is assigned.

**`ibee: command not found`**
Re-open your shell after installation, or add the Python user scripts directory
to `PATH`.

**The CLI reports a missing token or workspace**
Set `IBEE_TOKEN` and `IBEE_WORKSPACE_ID`, or pass the global `--token` and
`--workspace` options before the command group. Generate tokens under
**Organization → API Tokens**.

## Related pages

* [Create a VM](/docs/infrastructure/cloud-vms/create-a-vm)
* [Instance types](/docs/infrastructure/cloud-vms/instance-types)
* [SSH Keys](/docs/tools/ssh-keys)
* [API Tokens](/docs/tools/api-tokens)
* [Power actions](/docs/infrastructure/cloud-vms/power-actions)