🛠️ WHMCS Configuration Checklist

Complete WHMCS configuration and customization checklist for production deployment

0
Completed
91
Remaining
91
Total Items
0%
Progress

📊 Export Progress

Pre-Flight System Requirements ✅

System requirements validation before WHMCS configuration

System Validation

Validate server stack and infrastructure

Server stack validated

PHP 8.2+ (with ionCube v13), MySQL 5.7+/MariaDB 10.3+, extensions: cURL, SOAP, GD, PDO, JSON, Mbstring, Intl, Zip

OS & firewall configured

Ubuntu 22.04 LTS or AlmaLinux 9 hardened; UFW/CSF allows 443 (HTTPS), 8443 (Plesk API), 587/465 (SMTP), 53 (DNS if self-hosting)

SSL certificate installed

Let's Encrypt or commercial certificate installed; force-SSL rewrite in virtual-host or .htaccess

WHMCS licence activated

Activate Plus or higher; verify IP matches licence portal

Backup system configured

Nightly off-site rsync or S3: full MySQL + /attachments + /downloads + /modules

Secure the Core ✅

Harden WHMCS installation security

Harden Writable Directories

Move sensitive directories outside web root

Move attachments to secure location

mv attachments /home/whmcs_storage/attachments

Move downloads to secure location

mv downloads /home/whmcs_storage/downloads

Move templates_c to secure location

mv templates_c /home/whmcs_storage/templates_c

Update configuration.php paths

Add $whmcsPath = '/home/whmcs_storage'; to configuration.php

Secure configuration file

chmod 400 configuration.php then chattr +i configuration.php

Rename admin directory

Rename /admin → /sc-admin-8256 and update $customadminpath

Enable reCAPTCHA v3

WHMCS → Configuration → System Settings → Security → Enable reCAPTCHA v3

Limit admin access by IP

Restrict admin access in .htaccess or via CSF csf.allow

Initial WHMCS Wizard & Global Settings ✅

Complete initial WHMCS setup wizard and configure global settings

Global Configuration

Configure global WHMCS settings

General Settings - Company

Name, GB-registered address, logo (SVG ≥256 px), default country = GB

Localization settings

Default currency = GBP (£); tick Auto-Update Exchange Rates (ECB) and enable EUR as secondary

Payment Gateways setup

Enable Stripe (live keys) → tick Allow Saved Cards; enable PayPal Checkout; install GoCardless module

Tax Configuration

VAT mode → "Tax Enabled", EU VAT Validation ON, default 20% rate, automatic OSS mapping

Domain Registrars

Activate Enom (API credentials) and add default nameservers ns1.spiralcorp.uk, ns2.spiralcorp.uk

Servers configuration

Add Plesk server: hostname, admin user/API token, port 8443, tick Secure. Test connection = green ✔

Friendly URLs

Enable Full Friendly Rewrite; ensure .htaccess generated

Cron setup

Add system cron */5 * * * * php -q /var/www/whmcs/crons/cron.php plus daily automation time 02:00 UTC

System Health Check

Verify System Health Status shows 0 critical issues

Create Service Plans in Plesk ✅

Create hosting service plans in Plesk before WHMCS products

Plesk Service Plans

Create service plans using Plesk CLI

Create "Starter Web" plan

plesk bin service_plan --create "Starter Web" -limits disk_space=10G bandwidth=-1 mailboxes=5 -hosting true -fp-script true -ssl true

Create "Business Pro" plan

plesk bin service_plan --create "Business Pro" -limits disk_space=25G bandwidth=-1 mailboxes=unlimited

Create "Developer VPS" plan

Create VPS service plan with appropriate resource limits

Create "Django Optimised" plan

Create Django-specific hosting plan with Python support

Create "Laravel Premium" plan

Create Laravel-specific hosting plan with PHP optimization

Create "Container Cloud" plan

Create container hosting plan with Docker support

Create "Enterprise Dedicated" plan

Create enterprise-level hosting plan with maximum resources

Verify service plan names

Double-check spelling & capitals – these names are case-sensitive when mapped in WHMCS

WHMCS Product Groups & Products ✅

Create product groups and configure 18 Spiral Corp products

Create Product Groups

Create seven product groups

Create "Web Hosting" group

Configuration → System Settings → Products/Services → Create New Group, assign Lagom Standard Cart

Create "VPS Hosting" group

Create VPS hosting product group with appropriate marketing copy

Create "Framework Hosting" group

Create framework-specific hosting group (Django, Laravel)

Create "Container Hosting" group

Create container and cloud hosting product group

Create "Dedicated Hosting" group

Create dedicated server hosting product group

Create "Development Services" group

Create development and consulting services group

Create "Add-on Services" group

Create additional services and add-ons group

Order product groups

Drag-drop order: Web Hosting, VPS Hosting, Framework Hosting, Container Hosting, Dedicated Hosting, Development Services, Add-on Services

Bulk Product Creation

Create 18 products via API or manual entry

Create bulk_products.php script

Create API script for bulk product creation with proper pricing and module settings

Configure Starter Web product

Type: hostingaccount, Module: plesk, ServicePlanName: "Starter Web", Price: £8.61/month

Configure Business Pro product

Link to "Business Pro" service plan with appropriate pricing

Configure Developer VPS product

Link to VPS service plan with configurable options

Configure Django Optimised product

Link to Django service plan with Python-specific settings

Configure Laravel Premium product

Link to Laravel service plan with PHP optimization

Configure Container Cloud product

Link to container service plan with Docker support

Configure Enterprise Dedicated product

Link to enterprise service plan with maximum resources

Verify module settings

Module Settings tab → select Plesk server, enter Service Plan Name exactly

Configure upgrade paths

Upgrades tab → enable Configurable Options upgrades

Copy direct cart links

Links tab → copy Direct Cart links for marketing

Configurable Options & Product Add-Ons ✅

Create configurable options and global add-ons

VPS Resource Options

Create configurable options for VPS products

Create "VPS Resources" option group

Configurable Options → Create New Group → VPS Resources

Add vCPU Cores option

Dropdown option: 1–8 cores with pricing tiers

Add RAM option

Slider option: 2–32 GB with pricing tiers

Add NVMe Storage option

Slider option: 10–500 GB with pricing tiers

Link to VPS products

Link VPS Resources group to Developer VPS & Container Hosting products

Global Add-Ons

Create global add-on services

Create "Premium Support SLA" addon

£25.85/mo, Department = DevOps, Welcome Email = Premium Support Welcome

Create "DevOps Automation" addon

£43.10/mo, Runs AfterModuleCreate hook to spin up GitLab runner

Create "Advanced Security" addon

£17.23/mo, Toggles ImunifyAV in Plesk via API

Configure addon settings

Configuration → System Settings → Product Addons → tick "Show on Order" & "Require Domain" = No

Email Templates ✅

Customize email templates for brand consistency

Template Customization

Customize critical email templates

Customize "Order Confirmation" template

Add VAT disclosure, expected provisioning times

Customize "Hosting Account Welcome" template

Insert Plesk login URL, temporary password placeholder, DNS propagation note

Customize "Premium Support Welcome" template

Outline 24/7 phone number & SLA terms

Create "Dev Project Kick-off" template

Inject project manager contact, Git repo access process, sprint 0 schedule

Configure template styling

Use Markdown-compatible HTML with inline CSS ≤ 600 px width

Test email variables

Include ${client_name} variables; test via Email Template Preview

Configure DMARC settings

Set DMARC-aligned From: to billing@spiralcorp.uk; DNS → DKIM/SPF pass

Support System Setup ✅

Configure support departments and ticket system

Support Configuration

Set up support departments and email integration

Create support departments

Sales (public, no authentication), Billing (clients), Technical Support (clients), DevOps (Premium Support only), Projects (hidden)

Configure email piping

Create forwarders in Postfix → /home/whmcs/scripts/pipe.php

Enable ticket ratings

Enable Ticket Ratings & satisfaction email after status Resolved for 48h

Set up email integration

Configure pop.php cron job for email piping fallback

Automation & Cron Jobs ✅

Configure automation and scheduled tasks

Cron Configuration

Set up automated tasks and scheduling

Configure cron.php

Core automation (invoices, provisioning, reminders) - */5 min

Configure pop.php

Email piping fallback - */5 min

Configure update_exchange_rates.php

Currency rates, ECB - 16:00 BST daily

Set invoice generation timing

Invoice Generation: 14 days before due

Configure suspension/termination

Suspension: 7 days overdue; Termination: 30 days

Set credit card capture timing

Credit Card Capture: 2 days before due

Payment Gateway Configuration ✅

Configure payment processors and testing

Gateway Setup

Configure payment gateways and webhooks

Configure Stripe

Developers → API Keys → set live keys; Webhook endpoint; Enable Apple Pay & Google Pay

Configure PayPal Checkout

Client ID & Secret; set Webhook for event PAYMENT.SALE.COMPLETED

Configure GoCardless

Install module; live access token; mandate description = "Spiral Corp hosting"

Test payment flows

Run end-to-end payment tests in Sandbox Mode before flipping to live

Testing Matrix ✅

Comprehensive testing before production launch

End-to-End Testing

Test all critical functionality

Test shared hosting order

End-to-end: Subscription appears in Plesk with Starter Web plan; welcome email sent

Test VPS upgrade

Upgrade Business Pro → Developer VPS: New VPS resources applied; prorata invoice issued

Test add-on purchase

Add-on active instantly; next cycle invoice includes add-on fee

Test payment failures

Stripe declined payment: Invoice status Payment Failed; auto-retry schedule enabled

Test VAT exempt EU business

Invoice shows 0% VAT, reverse-charge note present

Test ticket workflow

Email to support auto-opens ticket; SLA timer visible

Test knowledgebase

Typing "Django deploy" shows correct KB article links

Go-Live Tasks ✅

Final steps for production launch

Production Launch

Switch to live environment

Switch to live payment keys

Switch gateways from sandbox → live keys

Clean test data

Purge test clients, orders, transactions: Utilities → System → Database Status

Disable maintenance mode

Disable Maintenance Mode to allow public access

Launch announcement

Post launch announcement via Announcements module; push to RSS/Twitter

Enable production backups

Enable daily encrypted off-site backups (S3 Glacier Deep Archive, 30-day retention)