WHMCS is the billing and client-area system most hosting companies run on: it takes orders, raises invoices, creates the hosting account in Plesk and answers support tickets, all under your brand. Installing it takes about half an hour if the server already meets the requirements. This guide walks through a clean install on a Plesk server, which is exactly what our reseller plans provide.
What WHMCS 9 needs
Check these before you upload a single file. Most failed installs are one of these four.
| Requirement | WHMCS 9 |
|---|---|
| PHP | 8.2 minimum, 8.3 recommended |
| ionCube Loader | version 13 or newer |
| Database | MySQL 8 or MariaDB 10.6+ |
| PHP extensions | curl, gd, json, mbstring, openssl, pdo_mysql, xml, zip, intl |
In Plesk, every one of these is a setting rather than a compile job. Under Websites & Domains → PHP Settings for the site, pick a PHP 8.3 handler (FPM served by Apache or nginx both work) and tick the extensions above. ionCube ships with Plesk's PHP builds; if php -v on that handler does not mention it, enable it under Tools & Settings → PHP Settings → the handler → ionCube.
Step 1: create the site
Run WHMCS on its own subdomain, not inside your marketing site. billing.yourbrand.com or my.yourbrand.com are the usual choices.
- Websites & Domains → Add Subdomain, name it, and let Plesk create the document root.
- Point the subdomain's DNS at the server if you manage DNS elsewhere.
- Issue a Let's Encrypt certificate straight away: SSL/TLS Certificates → Install. WHMCS will refuse to log you in over plain HTTP, and the licence check expects HTTPS.
Step 2: create the database
Databases → Add Database. Use a dedicated user with a long generated password and grant it access only to this database. Note the database name, user and password; the installer asks for them.
Step 3: upload the files
Download the release ZIP from your WHMCS account or, if the licence came with your hosting plan, from the link we send. Upload the ZIP through Files in Plesk and extract it into the subdomain's document root, so that index.php sits directly in the root, not in a whmcs/ subfolder.
Then rename the sample configuration file:
mv configuration.php.new configuration.php
chmod 666 configuration.phpThe installer needs to write to it once; you will tighten the permission afterwards.
Step 4: run the installer
Open https://billing.yourbrand.com/install/install.php in a browser. The installer checks PHP, ionCube and extensions first; anything red is a real blocker, so fix it in Plesk before continuing. Then:
- Accept the licence agreement.
- Enter the licence key.
- Enter the database name, user and password from step 2.
- Create the first administrator account. Use a real name and a strong password; this is the account that can see every client's data.
When it finishes, the installer tells you to delete the install/ directory. Do it now:
rm -rf install/
chmod 400 configuration.phpStep 5: set up the cron job
WHMCS does nothing on a schedule until you give it a cron job. Invoices, suspensions, reminders and domain renewals all depend on it. In Plesk, Scheduled Tasks → Add Task, type Run a PHP script, pointing at:
/var/www/vhosts/yourbrand.com/billing.yourbrand.com/crons/cron.phpRun it every five minutes with the -q flag so it produces no output. WHMCS decides internally which tasks are due; running it often is correct and cheap. Confirm it is working under Configuration → System Settings → Automation Settings, where the last run time updates.
Step 6: the first five settings
Before you create products, set these under Configuration → System Settings:
- General Settings → General: company name, the WHMCS URL with
https://, and the logo. - General Settings → Localisation: currency, date format and time zone. Changing currency after you have invoices is painful, so decide now.
- Mail: an SMTP account on your own domain, so invoices and welcome emails do not land in spam. Our guide on fixing WHMCS email delivery covers the details.
- Two-Factor Authentication: turn it on for administrators.
- Servers: add your Plesk server so orders provision automatically, covered in connecting WHMCS to Plesk.
Move the writable directories out of the web root
WHMCS writes to three directories: attachments, downloads and templates_c. Leaving them under the document root means anything uploaded through a ticket is a public URL. Move them one level up and tell WHMCS where they went in configuration.php:
$attachments_dir = "/var/www/vhosts/yourbrand.com/whmcs-data/attachments/";
$downloads_dir = "/var/www/vhosts/yourbrand.com/whmcs-data/downloads/";
$templates_compiledir = "/var/www/vhosts/yourbrand.com/whmcs-data/templates_c/";The WHMCS security checklist goes through this and the rest of the lock-down.
When the licence came with your hosting
If you are on a VPSPioneer Partner Grow or Partner Pro plan, the WHMCS licence is included and we do this whole install for you, on your reseller account, and connect it to your Plesk panel. Open a ticket with the subdomain you want to use and it is live within one working day.