How to Install WHMCS on Your Hosting or VPS

WHMCS is still the hosting industry's default billing and automation platform for many providers. Its strength is the depth of its ecosystem: registrar modules, payment gateways, fraud screening, support tools, server provisioning, and a long tail of third-party add-ons. The trade-off is cost and operational care. WHMCS is ionCube-encoded, expects a traditional Linux hosting environment, and needs a correctly configured cron before automation is trustworthy.

This guide is based on the current WHMCS 9.0 documentation and pricing page, checked in April 2026. It covers a clean self-hosted install on TekLan shared hosting or a TekLan VPS.

Before You Choose WHMCS

WHMCS self-hosted licensing is monthly and based on active clients. The official pricing page currently lists:

PlanActive clientsPrice
PlusUp to 250$34.95/month
ProfessionalUp to 500$54.95/month
Business 1000Up to 1,000$84.95/month
Business 2500Up to 2,500$179.95/month
Business 5000Up to 5,000$284.95/month
Business 10000Up to 10,000$399.95/month

That pricing can make sense if you need the WHMCS ecosystem. For a very small provider, the ongoing cost is worth comparing against Blesta or HostBill before you commit.

WHMCS stores customer records, service credentials, invoices, domain data, and payment gateway configuration. Run it under its own domain or subdomain, isolate it from ordinary customer websites, and treat it as core business infrastructure.

Current WHMCS 9.0 Requirements

For a self-hosted WHMCS 9.0 install, the official requirements are:

  • Operating system: Linux.
  • Web server: Apache 2.x is the validated environment. Nginx can work, but WHMCS provides limited support for non-Apache setups.
  • PHP: PHP 8.2 or PHP 8.3.
  • ionCube Loader: 13.0.2 or later for PHP 8.2, or 14.4.0 or later for PHP 8.3.
  • Database: MySQL is required, with MySQL 8.x recommended in WHMCS's current documentation. MariaDB may work as a binary-compatible alternative.
  • Required PHP extensions: default compiled PHP extensions, cURL with SSL, GD2, IMAP, ionCube Loader, JSON, PDO, PDO_MySQL using mysqlnd, Reflection, and XML.
  • Recommended PHP extensions: BC Math, Fileinfo, GMP, iconv, Intl, mbstring, OpenSSL, and SOAP.
  • PHP memory limit: 64 MB minimum, 128 MB recommended.

WHMCS also warns that MySQL strict mode can cause problems. On a VPS, review the WHMCS documentation and disable unsupported strict modes such as STRICT_TRANS_TABLES and ERROR_FOR_DIVISION_BY_ZERO before installing.


Installing on TekLan Shared Hosting (Enhance)

Step 1: Create a Billing Domain

Use a dedicated hostname such as billing.yourdomain.co.uk. Add it in Enhance, confirm DNS is pointing to the hosting account, and note the document root in the file manager.

Step 2: Set PHP and ionCube

In Enhance, open the website and go to Advanced → Developer tools → PHP. Select PHP 8.2 if available, then enable ionCube in the extensions list. PHP CLI and web PHP should match; a WHMCS cron running under a different PHP version is a common cause of broken automation.

If your account cannot provide the ionCube version WHMCS 9.0 needs, do not force the install on an older stack. Open a support ticket or use a VPS where the PHP and ionCube versions can be controlled directly.

Step 3: Create a Database

In Enhance, open Databases, create a new database, then create a dedicated database user with a strong password. Grant that user access to the WHMCS database. Keep the database name, username, password, and hostname handy for the installer.

Step 4: Upload WHMCS

Download WHMCS from your WHMCS account or download.whmcs.com. Upload the files to the billing domain's document root. Leave the install/ directory in place for now.

WHMCS may require write access to these directories during normal operation:

  • attachments/
  • downloads/
  • templates_c/

WHMCS lists 777 as the general writable permission for those directories on many systems, but the right value depends on the PHP handler. On shared hosting, use the least permissive setting that works; often 755 is enough when files are owned by the account user.

Step 5: Run the Web Installer

Visit https://billing.yourdomain.co.uk/install/install.php. The installer checks PHP, ionCube, extensions, database access, and file permissions. Enter your licence key, database details, and administrator account details when prompted.

When installation completes, delete the install/ directory immediately.

Step 6: Configure the System Cron

WHMCS automation depends on the system cron. It generates invoices, sends reminders, processes domain renewals, suspends overdue services, and runs provisioning tasks.

In WHMCS, go to Configuration → System Settings → Automation Settings and copy the exact cron command shown there. In Enhance, add a cron job under Advanced → Developer tools → Cron jobs and run it every five minutes. It will look similar to:

*/5 * * * * /usr/bin/php -q /var/www/[site-id]/public_html/crons/cron.php

Confirm the automation page shows a recent last-run time before you rely on WHMCS for billing.

Step 7: Force HTTPS

In Enhance, open the website's Security tab and enable Force HTTPS. Confirm the admin and client areas both load over HTTPS with no mixed-content warnings.


Installing on a TekLan VPS

WHMCS officially validates Apache on Linux, so the VPS example below uses Ubuntu 22.04 with Apache and PHP 8.2. You can use another distribution, but keep the PHP, ionCube, cron, and MySQL requirements aligned with WHMCS 9.0.

Step 1: Install Apache, MySQL, PHP, and Extensions

apt update
apt upgrade -y
apt install -y apache2 mysql-server unzip certbot python3-certbot-apache \
  php8.2 libapache2-mod-php8.2 php8.2-bcmath php8.2-curl php8.2-gd \
  php8.2-gmp php8.2-imap php8.2-intl php8.2-mbstring php8.2-mysql \
  php8.2-soap php8.2-xml php8.2-zip

Step 2: Install ionCube Loader

cd /tmp
wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xfz ioncube_loaders_lin_x86-64.tar.gz
php -i | grep extension_dir

Copy the PHP 8.2 loader into the reported extension directory, then enable it for Apache and CLI PHP:

cp ioncube/ioncube_loader_lin_8.2.so /path/to/php/extensions/
echo "zend_extension = ioncube_loader_lin_8.2.so" > /etc/php/8.2/apache2/conf.d/00-ioncube.ini
echo "zend_extension = ioncube_loader_lin_8.2.so" > /etc/php/8.2/cli/conf.d/00-ioncube.ini
systemctl restart apache2
php -v

The final command should show ionCube Loader. If CLI PHP does not show ionCube, your cron will fail even if the web installer works.

Step 3: Configure MySQL

mysql_secure_installation
nano /etc/mysql/mysql.conf.d/mysqld.cnf

Remove strict SQL modes from sql_mode, or add a compatible value under [mysqld] if your server defines it there. Restart MySQL afterwards:

systemctl restart mysql
mysql -u root -p
CREATE DATABASE whmcs CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'whmcsuser'@'localhost' IDENTIFIED BY 'use-a-long-random-password';
GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, LOCK TABLES, SELECT, UPDATE ON whmcs.* TO 'whmcsuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 4: Create the Apache Virtual Host

mkdir -p /var/www/whmcs/public_html
nano /etc/apache2/sites-available/billing.yourdomain.co.uk.conf
<VirtualHost *:80>
    ServerName billing.yourdomain.co.uk
    DocumentRoot /var/www/whmcs/public_html

    <Directory /var/www/whmcs/public_html>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
a2ensite billing.yourdomain.co.uk
a2enmod rewrite
systemctl reload apache2

Step 5: Upload Files and Run the Installer

unzip /tmp/whmcs*.zip -d /var/www/whmcs/public_html/
chown -R www-data:www-data /var/www/whmcs
find /var/www/whmcs/public_html -type d -exec chmod 755 {} \;
find /var/www/whmcs/public_html -type f -exec chmod 644 {} \;

Visit http://billing.yourdomain.co.uk/install/install.php and complete the installer. Delete install/ when prompted.

Step 6: Add SSL

certbot --apache -d billing.yourdomain.co.uk
certbot renew --dry-run

Step 7: Secure Files and Configure Cron

chmod 400 /var/www/whmcs/public_html/configuration.php

Move the crons/ directory above the document root if possible, then update WHMCS with the new cron path. WHMCS recommends this for better security.

mkdir -p /var/www/whmcs/private
mv /var/www/whmcs/public_html/crons /var/www/whmcs/private/crons
chown -R www-data:www-data /var/www/whmcs/private

Copy the exact command from Automation Settings, then add it with crontab -e:

*/5 * * * * /usr/bin/php -q /var/www/whmcs/private/crons/cron.php > /dev/null 2>&1

Production Checklist

  • HTTPS forced for the client and admin areas.
  • install/ directory deleted.
  • configuration.php set to 400.
  • System cron running every five minutes and showing a recent last-run time.
  • WHMCS timezone matches the server timezone.
  • Admin directory renamed from the default under WHMCS security settings.
  • Two-factor authentication enabled for all staff users.
  • Test client, order, invoice, payment gateway, suspension, and email delivery checked before launch.

WHMCS Hosting Notes

WHMCS is sensitive to PHP version, ionCube support, cron, file permissions, and email delivery. Keep it on a dedicated hostname and do not share the same document root as a marketing site. TekLan application hosting is suitable when the required PHP and ionCube combination is available. A VPS gives more control if you need custom modules, extra PHP configuration, or stricter firewall rules.

If WHMCS will provision hosting accounts, pair it with reseller hosting or a managed server product rather than manually creating customer accounts. Test suspension, unsuspension, package changes, welcome emails, invoice emails, and cancellation flows before accepting live orders.

Commercial Setup Checklist

  • Create product groups that match your real hosting packages.
  • Check domain pricing and renewal pricing before enabling public registration.
  • Use SMTP with SPF, DKIM, and DMARC aligned to the sending domain.
  • Restrict staff permissions and enable two-factor authentication.
  • Document how backups and restores work for the billing system itself.

Related posts: billing software compared, reseller hosting setup checklist, and email deliverability basics.

Sources Checked

If you need help checking ionCube, PHP CLI, or cron on your TekLan account, open a support ticket.

Related Posts