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

# Requirements

> Server and software requirements before installing StartMyVPN.

## Server requirements

| Requirement | Minimum         | Recommended  |
| ----------- | --------------- | ------------ |
| PHP         | 8.4             | 8.4          |
| MySQL       | 8.0             | 8.0+         |
| Web server  | Nginx or Apache | Nginx        |
| RAM         | 1 GB            | 2 GB+        |
| Storage     | 10 GB           | 20 GB+       |
| OS          | Ubuntu 22.04    | Ubuntu 24.04 |

<Note>
  StartMyVPN is built against **PHP 8.4**. Older PHP versions (8.2, 8.3) are not supported — the application will not load.
</Note>

## PHP extensions

The following PHP extensions must be enabled:

* `BCMath`
* `Ctype`
* `cURL`
* `DOM`
* `Fileinfo`
* `JSON`
* `Mbstring`
* `OpenSSL`
* `PDO` + `pdo_mysql`
* `Tokenizer`
* `XML`
* `Zip`

## IonCube Loader (required)

StartMyVPN ships with core business logic encoded using **IonCube**. You must install the **IonCube Loader v15 or newer** before the application will run. Earlier loader versions (v14 and below) cannot decode PHP 8.4 files and will fail with `cannot be decoded by this version of the ionCube Loader`.

### 1. Download the loader

Download the latest IonCube Loader from [ioncube.com/loaders.php](https://www.ioncube.com/loaders.php). Select the package matching your OS and architecture.

```bash theme={null}
# Linux x86-64
wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar -xzf ioncube_loaders_lin_x86-64.tar.gz

# Linux ARM64 (aarch64)
wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_aarch64.tar.gz
tar -xzf ioncube_loaders_lin_aarch64.tar.gz
```

### 2. Find your PHP extension directory

```bash theme={null}
php -i | grep extension_dir
# Example output: extension_dir => /usr/lib/php/20240924
```

### 3. Copy the loader

```bash theme={null}
sudo cp ioncube/ioncube_loader_lin_8.4.so /usr/lib/php/20240924/
```

### 4. Add to php.ini

Find your active `php.ini`:

```bash theme={null}
php --ini | grep "Loaded Configuration"
```

Add the following line **at the very top** of `php.ini`, before any other `extension=` or `zend_extension=` lines:

```ini theme={null}
zend_extension = /usr/lib/php/20240924/ioncube_loader_lin_8.4.so
```

<Warning>
  The IonCube `zend_extension` directive **must** appear before any other extension directives in `php.ini`. Placing it after other extensions (especially OPcache) may cause PHP to fail to start.
</Warning>

### 5. Restart PHP-FPM

```bash theme={null}
sudo systemctl restart php8.4-fpm
# or for Apache:
sudo systemctl restart apache2
```

### 6. Verify the loader is active

```bash theme={null}
php -v
# Should show:
#   with the ionCube PHP Loader v15.x.x, Copyright (c) 2002-2026, by ionCube Ltd.
```

Or confirm via module list:

```bash theme={null}
php -m | grep -i ioncube
# Should output: ionCube Loader
```

If `php -v` still shows no ionCube line, the `zend_extension` path is wrong or the loader file is the wrong architecture for your PHP build.

### Supported PHP version

| PHP Version | Loader filename             |
| ----------- | --------------------------- |
| 8.4         | `ioncube_loader_lin_8.4.so` |

## Required software

* **Composer** 2.x — PHP dependency manager
* **Node.js** 20+ and **npm** — front-end assets are compiled on each install so your branding, theme, and per-client customizations are baked into the bundle
* **unzip** — to extract the release archive

## Queue & scheduler

StartMyVPN relies on Laravel queues for background jobs (WireGuard config generation, server provisioning, etc.) and the Laravel scheduler for periodic tasks. You need either:

* **Supervisor** to keep queue workers running (recommended for production)
* OR a cron job that runs the scheduler every minute (minimum requirement)

See [Queue Workers](/getting-started/queue-workers) and [Scheduler](/getting-started/scheduler) for setup instructions.

## Cloud provider accounts

To deploy VPN servers from within the admin dashboard, you need at least one of:

* A **DigitalOcean** account with an API token (Personal Access Token with write access)
* A **Vultr** account with an API key

Servers can also be added manually (any VPS with SSH access) without a cloud provider integration.

## Payment gateway accounts

At least one payment gateway is required to accept payments:

* **Stripe** — credit/debit card payments
* **PayPal** — PayPal checkout and recurring subscriptions
* **CryptAPI** — cryptocurrency payments (Bitcoin, Ethereum, etc.)
