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

# Server Requirements

> Minimum server specifications and how to check your VPS or server supports Docker before installing PropOps.

PropOps runs as a fully containerised application using Docker. You do not need to install PHP, Apache, or MariaDB directly on the host — Docker handles everything.

<Info>
  PropOps Web is licensed software. Each self-hosted instance requires a valid licence key issued by PropOps Technologies Ltd. Contact [hello@propops.app](mailto:hello@propops.app) to obtain a licence before deploying.
</Info>

***

## Minimum server specifications

| Resource           | Minimum          | Recommended      |
| ------------------ | ---------------- | ---------------- |
| **CPU**            | 2 vCPU           | 4 vCPU           |
| **RAM**            | 2 GB             | 4 GB             |
| **Disk**           | 20 GB SSD        | 40 GB+ SSD       |
| **OS**             | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
| **Docker**         | 24.x             | Latest stable    |
| **Docker Compose** | v2.x             | Latest stable    |
| **Open ports**     | 80, 443          | 80, 443          |

<Note>
  Disk usage grows over time as photos, documents, and certificate uploads accumulate. For production deployments, consider mounting a cloud block device (e.g. AWS EBS, Hetzner Volume, DigitalOcean Volume) at the `docker-data/uploads` path.
</Note>

***

## Check if your server supports Docker

Before purchasing or provisioning a server, verify that it can run Docker. Most modern VPS providers support Docker out of the box, but some shared hosting or OpenVZ-based plans do not.

### Check virtualisation type

Docker requires a host that uses **KVM**, **Xen**, or **bare metal**. It does **not** work on OpenVZ or LXC containers (commonly used by budget hosting providers).

```bash theme={null}
# Check virtualisation type
systemd-detect-virt
```

| Output                | Docker support                               |
| --------------------- | -------------------------------------------- |
| `kvm`                 | Yes                                          |
| `xen`                 | Yes                                          |
| `none` (bare metal)   | Yes                                          |
| `microsoft` (Hyper-V) | Yes                                          |
| `vmware`              | Yes                                          |
| `openvz`              | No                                           |
| `lxc`                 | No (unless nested virtualisation is enabled) |

### Check kernel version

Docker requires Linux kernel 3.10 or later. Any modern distribution meets this:

```bash theme={null}
uname -r
# Example output: 5.15.0-91-generic
```

### VPS providers known to work

The following providers offer VPS plans compatible with Docker:

* **Hetzner** — Excellent value, EU and US data centres
* **DigitalOcean** — Simple setup, one-click Docker droplets available
* **Linode (Akamai)** — Reliable, good UK presence
* **Vultr** — Wide range of locations
* **AWS EC2** — Enterprise-grade, pay-as-you-go
* **OVH/Kimsufi** — Budget-friendly dedicated servers

<Warning>
  Avoid providers that only offer OpenVZ containers (e.g. some budget plans from providers like RamNode or BuyVM legacy plans). Always confirm KVM virtualisation before purchasing.
</Warning>

***

## Install Docker

<Steps>
  <Step title="Install Docker Engine">
    Run the official Docker install script. This works on Ubuntu, Debian, CentOS, and Fedora:

    ```bash theme={null}
    curl -fsSL https://get.docker.com | sh
    ```

    Add your user to the `docker` group so you can run commands without `sudo`:

    ```bash theme={null}
    sudo usermod -aG docker $USER
    ```

    Log out and back in for the group membership to take effect.
  </Step>

  <Step title="Verify Docker is running">
    ```bash theme={null}
    docker --version
    # Example: Docker version 27.x.x, build abc1234

    docker run hello-world
    # Should print "Hello from Docker!" and confirm the installation works
    ```
  </Step>

  <Step title="Verify Docker Compose">
    Docker Compose v2 ships as a plugin in modern Docker installations:

    ```bash theme={null}
    docker compose version
    # Should output: Docker Compose version v2.x.x
    ```

    If not available, install the plugin:

    ```bash theme={null}
    sudo apt-get install docker-compose-plugin
    ```
  </Step>

  <Step title="Enable Docker to start on boot">
    ```bash theme={null}
    sudo systemctl enable docker
    ```
  </Step>
</Steps>

***

## Point your domain

Create an **A record** in your DNS provider pointing your domain (e.g. `propops.yourcompany.com`) to your server's public IP address. This is required for HTTPS setup later.

```
Type: A
Name: propops (or @ for root domain)
Value: 203.0.113.50 (your server IP)
TTL: 300
```

<Tip>
  If you don't have a domain yet, you can skip this step and access PropOps via your server's IP address during initial setup. You will need a domain with HTTPS before going live.
</Tip>
