Server requirements
| Requirement | Minimum | Recommended |
|---|
| PHP | 8.2 | 8.3+ |
| 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 |
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 before the application will run.
1. Download the loader
Download the latest IonCube Loader from ioncube.com/loaders.php. Select the package matching your OS and PHP version.
# Example for 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
2. Find your PHP extension directory
php -i | grep extension_dir
# Example output: extension_dir => /usr/lib/php/20230831
3. Copy the loader
Copy the loader file matching your exact PHP version:
# Replace 8.3 with your PHP version
sudo cp ioncube/ioncube_loader_lin_8.3.so /usr/lib/php/20230831/
4. Add to php.ini
Find your active php.ini:
php --ini | grep "Loaded Configuration"
Add the following line at the very top of php.ini, before any extension= lines:
zend_extension = /usr/lib/php/20230831/ioncube_loader_lin_8.3.so
The IonCube zend_extension directive must appear before any other extension= lines in php.ini. Placing it after other extensions may cause PHP to fail to start.
5. Restart PHP-FPM
sudo systemctl restart php8.3-fpm
# or for Apache:
sudo systemctl restart apache2
6. Verify the loader is active
php -v
# Should show: with the ionCube PHP Loader v14.x, Copyright (c) 2002-2025...
Or check via a phpinfo page:
php -r "echo phpinfo();" | grep -i ioncube
Supported PHP versions
IonCube Loader is available for PHP 8.2 and 8.3. Ensure the loader version matches your installed PHP version exactly.
| PHP Version | Loader filename |
|---|
| 8.2 | ioncube_loader_lin_8.2.so |
| 8.3 | ioncube_loader_lin_8.3.so |
Required software
- Composer 2.x — PHP dependency manager
- Node.js 20+ and npm — for compiling front-end assets
- Git — for cloning the repository
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 and 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.)