WEB Hosting WHMCS module
WHMCS module for automated web hosting and email hosting account provisioning. Includes addon module for centralized management and cron orchestration.
- Description
- Changelog
- Installation & Configuration
- Addon Module
- Dashboard
- Infrastructure: Servers
- Server Actions (per node)
- Server‑Group Editor
- DNS Zones & Templates
- Settings
- Task Queue & Logs
- Vanity Widget
- Admin Area
- Client Area
- Deployment & Segmentation
- Deployment Models (Split · Unified · Vanity)
- Server Segmentation (Web / Mail / DNS tiers)
- How Deployment Works
- Vanity Mode
- What Vanity Mode Is (and Why It Sells)
- Setting Up the Vanity Group & Sellable Domains
- The Vanity Product
- Vanity: Order & Client Experience
- The Vanity Shop Widget
- Cron & Automation
- The Deploy Process
- Task Queue, Retries & Tickets
- SSL Automation
- Usage Sync & Metric Billing
- Suspend, Unsuspend & Terminate
- Troubleshooting
- Questions & Answers
Description
PUQ Web Hosting module WHMCS
Order now | Download | Community
What this module does
PUQ Web Hosting is a WHMCS module that fully automates the selling, provisioning, billing and day‑to‑day management of web hosting and email hosting accounts on HestiaCP servers (with PowerDNS as an additional DNS backend).
From a single WHMCS order the module can create everything a customer needs — a website, databases, FTP accounts, mailboxes, DNS records and an automatic Let's Encrypt certificate — and then expose a clean, self‑service control panel inside the WHMCS client area. Your staff get a powerful admin panel embedded directly in the WHMCS service page, plus a central addon dashboard for your whole server fleet.
The module is built around three ideas that the rest of this documentation explains in detail:
- Asynchronous, resumable deployment. A WHMCS order is accepted in milliseconds; the real work runs in a cron‑driven task queue as an idempotent pipeline. Slow panels, network blips and long operations never block the order — failed steps simply retry. See Cron & Automation → Deploy process.
- Server segmentation by role. Every HestiaCP node has capabilities — Web, Mail, DNS — and you organise nodes into server groups. You can keep websites on one set of servers, mailboxes on dedicated mail (MX) servers, and DNS on separate nameservers, balancing load by tier and scaling each tier independently. See Deployment & Segmentation.
-
Three deployment models, including Vanity. Sell classic Split hosting (a separate Hestia user per role for maximum isolation), simpler Unified hosting (one user holds web + mail), or the standout Vanity model — turn one domain you own into thousands of sellable “personal site + email” slots (
name.yourdomain.com+name@yourdomain.com). See Vanity Mode.
Two parts: server module + addon module
The product ships as two WHMCS modules that work together:
| Module | Role |
|---|---|
Server module (puqWebHosting) |
The product engine: provisioning, the WHMCS client‑area control panel, and the admin service panel embedded in each service page. |
Addon module (puq_web_hosting) |
The control centre: a fleet dashboard, the Infrastructure pages (web / mail / DNS servers, server groups, DNS zones & templates), module Settings, the task queue and operation logs, and the cron orchestration that drives every deployment. |
The addon module is required — it owns the database schema, the task queue and the cron runner that the server module relies on.
At a glance
- HestiaCP automation over SSH (no panel HTTP API required), plus a PowerDNS DNS driver for mixed clusters.
- Per‑service websites, databases, FTP, cron jobs, mailboxes (with aliases / forwards / auto‑reply), DNS records — all self‑service in the client area, all permission‑gated per product.
- Automatic Let's Encrypt issuance & renewal for web and mail, plus customer custom‑certificate upload.
- Built‑in file managers (FileGator + net2ftp) and phpMyAdmin / webmail single‑sign‑on links.
- Backups (create / list / restore / delete) with per‑role quotas, per‑domain usage metering, and WHMCS email events for every lifecycle action.
- Group‑managed
hestia.confwith drift detection, rebrandable standard files (error pages, suspended page, robots.txt), and DNS zone templates with a full modern mail record set (SPF, DKIM, DMARC, MTA‑STS, TLS‑RPT, autodiscover, CAA). - The unique Vanity model and a standalone “claim your name” shop widget you can drop on any marketing domain.
System Requirements
| Requirement | Supported |
|---|---|
| WHMCS | 8.x or 9.x |
| PHP | 7.4, 8.1 or 8.2 (use the module build that matches your WHMCS host's PHP) |
| ionCube Loader | enabled, matching the host PHP version |
| HestiaCP | reachable over SSH (panel HTTP API not required) |
| PowerDNS | optional — additional DNS backend |
The module ships as per‑PHP‑version builds (7.4 / 8.1 / 8.2). WHMCS 8 runs on PHP 7.4, 8.1 or 8.2; WHMCS 9 runs on PHP 8.2; and on any host with PHP 8.3 or newer you use the 8.2 build. Full guidance is in Installation & Configuration → Requirements & Installation.
The pages that follow walk through installation, building your server infrastructure, creating products, and the full admin and client experience — with a dedicated deep‑dive on server segmentation and on Vanity mode.
Changelog
v1.0 — first release
Full HestiaCP web + email hosting automation for WHMCS.
Compatibility — WHMCS 8.x and 9.x. Distributed as ionCube‑encoded builds for PHP 7.4, 8.1 and 8.2: WHMCS 8 → PHP 7.4 / 8.1 / 8.2, WHMCS 9 → PHP 8.2, and on PHP 8.3+ use the 8.2 build.
Provisioning & infrastructure
- Asynchronous, cron‑driven, idempotent deploy pipeline (instant orders, retryable steps, failure tickets).
- Server capabilities (Web / Mail / DNS) and server groups for load segmentation by server type.
- Role‑targeted, centrally‑managed
hestia.confand rebrandable standard files per group. - Active‑active DNS cluster with HestiaCP and PowerDNS backends, mixable in one cluster.
Deployment modes
- Split — a separate Hestia user per role.
- Unified — web + mail under one user.
-
Vanity — sell
name.<your-domain>sites +name@<your-domain>mailboxes on a domain you own, with a standalone shop‑widget generator. The shared parent domain, mail user and DNS zone are never touched per order.
Client area
- Self‑service Web settings, FTP, Databases, DNS, Mailboxes, SSL, Backups, Cron and Logs — each gated by per‑product client permissions.
Admin
- Addon dashboard, infrastructure & server actions, group editor, DNS zones/templates, settings, task queue & operation log, statistics.
- Embedded per‑service admin panel: overview, every resource tab, reveal credentials, edit‑DB‑row, deploy timeline, verify & repair, factory reset.
Automation
- Let's Encrypt auto‑SSL with adaptive cadence and rate‑limit guards; custom‑certificate upload.
- Per‑server batch usage sync feeding WHMCS metric billing.
- Suspend / unsuspend / terminate following the same async, idempotent model.
Installation & Configuration
Get the module running end‑to‑end: install both parts, build your server infrastructure, group your nodes, and create your first product. Start here, then read Deployment & Segmentation to plan how your fleet scales.
Requirements & Installation
PUQ Web Hosting module WHMCS
Order now | Download | Community
Requirements
- A working WHMCS installation (see the PHP/WHMCS compatibility table below).
- ionCube Loader enabled on the WHMCS host, matching the PHP version it runs.
- One or more HestiaCP servers reachable over SSH from the WHMCS host. The module drives Hestia entirely over SSH (the panel HTTP API is not required); set up
sudoNOPASSWD for the management user, or use the Hestiaadminuser with key/password auth. - (Optional) PowerDNS servers if you want PowerDNS as a DNS backend alongside HestiaCP.
- Outbound HTTPS from the Hestia nodes for Let's Encrypt and for the optional file‑manager / PHP installers.
PHP & WHMCS compatibility
The module is distributed as ionCube‑encoded builds, one per PHP version: 7.4, 8.1 and 8.2. Always install the build that matches the PHP version your WHMCS host runs under — not the PHP versions you offer to hosting customers (those are independent and managed on each Hestia web server).
| WHMCS version | PHP it runs on | Module build to install |
|---|---|---|
| WHMCS 8.x | 7.4, 8.1 or 8.2 | the 7.4 / 8.1 / 8.2 build matching your PHP |
| WHMCS 9.x | 8.2 | the 8.2 build |
| any host on PHP 8.3 / 8.4 or newer | 8.3+ | the 8.2 build |
How to choose, in plain terms:
- Check the PHP version your WHMCS server runs (WHMCS → Utilities → System → PHP Info, or
php -von the host). - On WHMCS 8 you may run PHP 7.4, 8.1 or 8.2 — download the build with the same number.
- On WHMCS 9 the host runs PHP 8.2 — use the 8.2 build.
- If your host runs a PHP version newer than 8.2 (8.3, 8.4, …), use the 8.2 build — it is the latest supported and is compatible with newer PHP runtimes.
Downloads for every supported PHP version are on the Download page. After any module update, re‑run the schema check (below).
Install both modules
The product is two WHMCS modules — install both:
| Upload to | Module |
|---|---|
modules/servers/puqWebHosting/ |
the server module |
modules/addons/puq_web_hosting/ |
the addon module |
Then in WHMCS go to Setup → Addon Modules, find PUQ Web Hosting, and Activate it (grant access to the admin roles that should manage hosting). Activating the addon creates the database tables the server module needs.
First run: check the schema & find the panels
After activation you have a new PUQ Web Hosting admin page (via Addons). Its top navigation gives you everything: Home, Services, Statistics, Infrastructure, Logs, Settings, Help.
Open Settings → Maintenance and click Run schema check once. It scans every module table and brings it in sync with the current code — creating missing tables, adding missing columns and dropping columns that no longer exist. You should run this after every module update.
The same tab has a “delete all tables on deactivate” toggle — leave it off unless you are fully uninstalling, so your data survives an accidental deactivation.
What's next
With both modules installed you build your service from the bottom up:
- Add your servers and tag their capabilities — see Add web / mail / DNS servers.
- Group them and apply role‑targeted configuration — see Server groups.
- Create a product pointed at a group — see Create a product.
The module Settings (timeouts, retry policy, SSL cadence, DNS/SOA defaults, integrations, notifications) are covered in Addon Module → Settings; the defaults are sensible, so you can come back to them later.
Add Web / Mail / DNS Servers
PUQ Web Hosting module WHMCS
Order now | Download | Community
Your fleet is managed under Infrastructure. The same physical servers appear under Web Servers, Mail Servers and DNS Servers filtered by the capabilities you give them.
Each row shows live CPU / RAM / Disk / Load, the Hestia version & OS, the panel‑OK indicator, the group, the capacity used/max and the row actions. A green OK means the SSH/panel probe succeeded.
Add a server
Click Add Web Server (or Mail/DNS — they open the same editor) and fill in the connection details:
| Field | Notes |
|---|---|
| Capabilities | Tick Web, Mail, DNS — one, two or all three. This decides which pools the node appears in and which roles can be placed on it. |
| Driver | HestiaCP (or PowerDNS for a DNS‑only node). |
| Status | active to use it. |
| Hostname / IP / SSH port | The SSH endpoint. |
| SSH auth | Password or private key. |
Lower in the editor you set per‑server defaults:
- DNS zone template — the template used for zones created on/for this node.
- Capacity max — soft capacity used for least‑loaded placement.
- SSH command timeout — override for slow nodes.
- Default Hestia package for new users.
Use Test connection before saving; the row will then show OK and start reporting live stats.
Capabilities = your topology
How you tick capabilities is your segmentation plan:
- One node, all roles → tick Web + Mail + DNS on a single server (great for starting out).
- Web/mail split → some nodes tick Web only, dedicated nodes tick Mail only.
- Three tiers → separate Web, Mail and DNS (nameserver) pools.
DNS servers are a special case — they are independent and attached to groups (one DNS server can serve many groups). The DNS Servers page reminds you of this:
See Deployment & Segmentation → Server segmentation for the full reasoning and the role‑targeted configuration that goes with these capabilities. The next page groups these servers so a product can sell from them.
Server Groups
PUQ Web Hosting module WHMCS
Order now | Download | Community
A server group bundles a set of nodes together. A WHMCS product points at one group, and the module places each service's roles on the group's capable nodes. Groups are managed under Infrastructure → Server Groups.
Click Open on a row to manage the group. The H: badge shows how many hestia.conf keys the group manages.
Group purpose: Standard vs Vanity
The first decision, on the group's General tab, is Group purpose:
- Standard hosting — web / mail / DNS servers + a DNS cluster. Used by Split and Unified products.
-
Vanity — sell
name.<domain>/name@<domain>on domains you own. Choosing this hides the hosting‑config tabs and shows the Vanity domains tab. (See the dedicated Vanity Mode chapter.)
Attach DNS servers (the cluster)
On the group's DNS servers tab, tick the nameservers this group replicates zones to. DNS servers are independent and shared — one server can back many groups. Every zone for the group is pushed to every attached DNS node (active‑active).
This tab is also where you set the group's default DNS zone template and SOA defaults for new zones.
Apply configuration
The group's Actions tab lets you push the managed Hestia configuration and standard files to the members, per role (all / web‑only / mail‑only / DNS‑only). The detail of role‑targeted config (hestia.conf management, drift, standard files) is covered in Addon Module → Server‑group editor and Deployment & Segmentation → Server segmentation.
A minimal setup is one group containing your nodes. As you grow, use multiple groups to separate locations/tiers or to offer different SLAs, and a separate Vanity group for your name‑selling offers.
Create a Product
PUQ Web Hosting module WHMCS
Order now | Download | Community
Create a product in WHMCS (Setup → Products/Services), then on Module Settings choose PUQ Web Hosting and point Server Group at the group you built.
The configuration lives on a row of sub‑tabs: General · Web limits · Mail limits · DNS limits · Client · Email · Config options (in Vanity mode the limits tabs collapse to a single Vanity limits tab).
General — roles & deployment mode
On General you pick which roles the package includes (tick Web / Mail / DNS) and the Deployment mode (Split / Unified / Vanity — see Deployment & Segmentation → Deployment models).
Limits — what the customer gets
The Web / Mail / DNS limits tabs define the Hestia package quotas and the module‑local caps for each ticked role. Every field maps to a Configurable Option override key (e.g. web_disk_quota) so you can offer upgradeable tiers.
-
Web limits — disk, bandwidth, cron jobs, backups kept, max subdomains (
WEB_ALIASES), max databases, max FTP accounts, default PHP version, auto‑install Let's Encrypt. -
Mail limits — mail disk, mail accounts, outbound rate limit/hour, mail backups (independent of web), max forwarders, max aliases, autoresponders/spam‑filter.
-
DNS limits — max DNS records, DNS disk quota, default TTL, and the allowed record types the customer may use (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, DNSKEY, DS, NAPTR, TLSA — on both HestiaCP BIND and PowerDNS).
Setting a role's disk quota to
0disables that role for the product (the same as un‑ticking it on General).
Client — what the customer can do
The Client tab is a set of toggles controlling which client‑area pages/actions are visible — create/delete mailbox, change password, create database/FTP, edit DNS, install SSL, manage cron, web settings, backups, view logs, client‑side redeploy, file‑manager & webmail SSO. Untick to hide.
Email — lifecycle emails
The Email tab maps a WHMCS email template to each module event (Account Ready, Deploy Failed, Mailbox/Database/FTP/Backup Created, SSL Installed, SSL Expiring 14/3, Quota Warning 80/Exceeded, DNS Zone Deployed, Backup Restored/Failed). Leave an event blank to disable it.
Config options — wire up WHMCS
Finally, open Config options and click Create / sync missing. The module reads its per‑order limits from WHMCS Configurable Options; this button creates exactly the ones the product needs (it's safe to run repeatedly — existing options and values are never changed).
After syncing they show COMPLETE:
Tune the prices afterwards under WHMCS Configurable Options. The product is now ready to order.
For a Vanity product the limits and config‑options are different (Website/Mailbox quota + the
vanity_domainoption +vanity_namecustom field). See Vanity Mode → The vanity product.
Addon Module
The PUQ Web Hosting addon is the control centre for your whole fleet: a dashboard, the Infrastructure pages (web / mail / DNS servers, server groups, DNS zones & templates), per‑node Server actions, module Settings, the task queue and operation logs, and the Vanity widget generator. The addon is required — it owns the schema, the queue and the cron runner.
Dashboard
PUQ Web Hosting module WHMCS
Order now | Download | Community
The addon Home page is a one‑glance view of your whole hosting operation.
Cards
| Card | Shows |
|---|---|
| Services | Total provisioned services (View → the Services list). |
| Servers | Total servers (Manage → Infrastructure). |
| Task Queue | Tasks currently in the queue (View → Logs → Task Queue). |
| DNS Zones | Total logical DNS zones (Manage). |
| Server Groups | Shortcut to group management. |
| Settings | Shortcut to cron / retry policy / tables. |
Panels
- Server capacity — every node by type (web/mail/dns), its capacity used/max and its last sync time. A quick health view of each tier.
- Recent terminal errors — services whose deploy terminally failed (so you can act fast). Empty is good.
- Recent services — the latest provisioned services with their WHMCS and deploy status.
Navigation
The top bar is the same everywhere:
- Home — this dashboard.
- Services — the cross‑service admin list (search/filter, open the admin panel, redeploy/verify).
- Statistics — per‑domain usage (web/mail split).
- Infrastructure — Web / Mail / DNS Servers, Server Groups, DNS Zones, DNS Zone Templates.
- Logs — Task Queue, Operation Log.
- Settings — General, Cron, Vanity widget.
- Help — documentation & support links.
Infrastructure: Servers
PUQ Web Hosting module WHMCS
Order now | Download | Community
Infrastructure is where you register and monitor every node. The same servers are presented under three filtered lists — Web, Mail and DNS — based on their capabilities.
Each row carries live CPU / RAM / Disk / Load bars, the panel‑OK probe, the Hestia version & OS, the group, the capacity used/max, and per‑row actions (open Server Actions, refresh status, sync, edit, delete).
Capabilities decide the pools
A node's Web / Mail / DNS capability flags decide which list it appears in and which roles can be placed on it. See Add web / mail / DNS servers for the editor and Deployment & Segmentation → Server segmentation for how to design your topology.
DNS servers are independent and attached to groups (one server can serve many groups):
Open a server → Server Actions
Clicking a server's open/manage action takes you to the Server Actions page for that node — a full per‑node management console (live config, group‑config drift, PHP versions, file‑manager installs, system services, Hestia users & packages, IPs, maintenance, logs). That page is documented next.
Server Actions (per node)
PUQ Web Hosting module WHMCS
Order now | Download | Community
Opening a server gives you a per‑node console with live stat cards and a tab bar: System config · Group config · PHP · File Manager · Services · Users · Packages · IPs · Maintenance · Log.
System config
A live, read‑only dump of the node's hestia.conf key/value pairs — handy for confirming what a server is actually running.
Group config (drift)
Compares the node's live config against what its group expects, key by key, with a MATCH / drift status, and lets you Apply group config to push the managed values:
This is the per‑node view of the group's managed hestia.conf (see Server‑group editor).
PHP
Install / remove PHP versions (5.6 – 8.4) with their FPM service, IonCube, and the Ondrej/Sury repositories — with an online gate and a recent‑tasks panel.
File Manager
Install and manage the two built‑in file managers per node — FileGator (Vue SPA, drag‑and‑drop) and net2ftp (native chmod UI). Each shows its installed version & URL, a custom download URL, and Reinstall / Uninstall / Refresh.
Services / Users / Packages
-
Services — system services (apache2, php‑*‑fpm, exim4, dovecot, nginx, bind9…) with state/CPU/memory/uptime and start/stop/restart.
-
Users — every Hestia user on the node with its package, disk used/quota, bandwidth, domains, DBs and state.
-
Packages — the Hestia hosting packages on the node (the module creates a per‑service package automatically).
Maintenance & Log
-
Maintenance — Test connection / Refresh status, rebuild commands (
v‑rebuild‑*for users/web/mail/DNS), and Purge Nginx cache. -
Log — the operation log filtered to this one node.
Server‑Group Editor
PUQ Web Hosting module WHMCS
Order now | Download | Community
Open a group (Infrastructure → Server Groups → Open) to manage its members, its centrally‑managed hestia.conf, its DNS cluster and (for vanity groups) its sellable domains. A standard group has these tabs: Actions · General · All‑servers config · Web config · Mail config · DNS config · Variables · Standard files · DNS servers.
Actions — bulk apply per role
The Actions tab lists the members with their Type and Status, and pushes config/files per role: Apply Hestia config to all / web only / mail only / DNS only, Apply standard files to web, Refresh status. Applying enqueues one task per matching active node.
General — name & purpose
Name, description and the Group purpose (Standard vs Vanity). See Server Groups and the Vanity Mode chapter.
Managed hestia.conf (role‑targeted)
The module can centrally manage Hestia config keys and keep every node in sync (with drift detection on the node's Group config tab). The keys are split by role so they only ever land on the right tier:
-
All‑servers config — applied to every node (language, theme, security/API, user policies, plugins…).
-
Web config — web‑only (Apache/SSL/Nginx ports, web backend, sync error pages/skeleton, phpMyAdmin/phpPgAdmin aliases).
-
Mail config — mail‑only (SMTP/IMAP/Sieve systems, antispam/antivirus, webmail, use‑server‑SMTP, notification from‑address).
-
DNS config — Hestia‑DNS‑only (DNSSEC, DNS cluster / remote NS list). PowerDNS nodes have no
hestia.confand are skipped.
Empty fields are not managed — the module only pushes the keys you fill in.
Variables
Group‑wide {name} key/value pairs substituted into DNS zone template records (e.g. ns1, ns2). Empty values fall through to the product's WHMCS configoptions; if both are empty the worker drops template records that reference the variable.
Standard files (rebranding)
Rebrandable Hestia skeleton files for web nodes — error pages (403/404/410/5xx), the default user index.html / robots.txt, the suspended‑account page, and the unassigned‑IP vhost. Each can be Overridden (your content) or Pulled from a server, with default/overridden badges.
DNS servers (the cluster)
Attach independent DNS servers to the group (active‑active replication) and set the group's default zone template + SOA defaults.
A Vanity group shows only General / Variables / DNS servers / Vanity domains — the hosting‑config tabs are hidden. See Vanity Mode → Setting up the vanity group.
DNS Zones & Templates
PUQ Web Hosting module WHMCS
Order now | Download | Community
DNS Zones
Infrastructure → DNS Zones lists every logical zone (one row per zone). The Cluster column shows the per‑DNS‑server deploy state, so you can see at a glance that a zone is live on every nameserver. A Redeploy action re‑pushes the zone.
Because zones are logical and replicated, the module gives you an active‑active nameserver cluster — the same zone is served identically by every attached DNS node.
DNS Zone Templates
Infrastructure → DNS Zone Templates holds the record sets used when a new zone is created. You can mark one Default, add more, or Seed from file.
Open a template to edit its records. Placeholders are substituted at provisioning time — {domain}, {server_ip}, {mail_server_ip}, {mail_server_hostname}, {ns1}…{ns8}, {domainkey} (DKIM), {client_id}, {service_id}, {year}, {unixtime}.
The shipped Default template is a complete, modern web + mail record set:
-
NS
@→{ns1}/{ns2} -
A
@→{server_ip}, CNAMEwww/ftp - CAA for Let's Encrypt (issue / issuewild / iodef)
-
A
mail→{mail_server_ip}, CNAMEwebmail, MX@ -
TXT SPF, DMARC, DKIM (
mail._domainkey→{domainkey}), TLS‑RPT -
MTA‑STS (
mta-stsCNAME +_mta-stsTXT), autodiscover/autoconfig
A record that references an empty placeholder (e.g.
{domainkey}when DKIM isn't ready) is simply skipped — so partial state never produces broken records.
Settings
PUQ Web Hosting module WHMCS
Order now | Download | Community
Settings has three pages — General, Cron and Vanity widget. The General page is organised into tabs. The defaults are sensible; tune them as you scale.
General
The General tab itself holds API timeouts and the task retry policy (max attempts, back‑off minutes, batch size per cron run, finished‑task retention):
The remaining tabs:
| Tab | Controls |
|---|---|
| Provisioning | Defaults for new users — FTP root path, login shell (nologin for managed hosting), Hestia admin/SSH usernames. |
| DNS | Record TTL (default/min/max, max value length) and module‑wide SOA defaults. |
| SSL | Auto‑SSL cadence (fast‑mode count/interval, normal interval, active‑cert interval) and the Let's Encrypt rate‑limit guard. |
| Mail & Security | Webmail / phpMyAdmin URL patterns, DKIM key size, max auto‑reply length, minimum password length. |
| Logging & Performance | Log download size cap, tail line limits, mail‑log filter window, SSH heavy‑bash & apt‑lock timeouts. |
| Integrations | Overridable upstream URLs — FileGator/net2ftp zips, FTP host fallback, PHP repos (Ondrej PPA, Sury), GPG keyserver, IonCube installer. |
| Notifications | Failure‑ticket toggle (department + priority), client‑area toast/poll durations, analytics lookback windows. |
| Maintenance | The schema Check & repair tool + the deactivation data‑retention toggle. |
Cron
The Cron page picks the cron mode (WHMCS vs Standalone), shows the crontab line to install, and lists every scheduled task with its enable/interval/last‑run/status, plus concurrency limits.
Vanity widget
Generates the standalone "claim your name" shop widget — see Vanity Mode → The vanity shop widget.
Task Queue & Logs
PUQ Web Hosting module WHMCS
Order now | Download | Community
Everything the module does runs through a task queue processed by the cron runner. The Logs menu exposes both the live queue and a persistent operation history.
Task Queue
Logs → Task Queue is the live worker view: each task's ID, service, target, action (e.g. server.collectStatus, web.addFtp), status, attempts, priority, schedule and error.
Bulk controls let you tidy up: Delete success / error / cancelled, Clean all completed, and Force‑fail stuck (for tasks wedged by an unreachable node).
Operation Log
Logs → Operation Log is a persistent, per‑operation timeline (status collection, deploys, etc.) — useful for auditing what happened and when.
Click a row to open the full detail — the operation, target, step, status and the complete message body:
The retry policy (how many times and how fast failed tasks retry) and the optional support ticket on terminal failure are configured in Settings → General / Notifications, and explained in Cron & Automation → Task queue, retries & tickets.
Vanity Widget
PUQ Web Hosting module WHMCS
Order now | Download | Community
Settings → Vanity widget generates a standalone "claim your name" landing page (two files) that you can drop on any marketing domain to sell vanity slots outside the WHMCS portal.
In short, you: (1) get/regenerate a shared API key, (2) pick the vanity product, (3) copy the config block into proxy.php, (4) choose the cart behaviour, then download proxy.php + index.html and upload both to each marketing domain's web root.
The browser only ever talks to the widget's own proxy.php (which holds the key and caches answers) — the key never reaches the visitor.
The full setup, the buyer's flow and the security model are documented in the dedicated Vanity Mode → The vanity shop widget page.
Admin Area
How your staff configure products and manage individual services from inside WHMCS — the product Module Settings, and the powerful admin service panel embedded in every service page (overview, per‑resource tabs, credentials, deploy timeline, verify & repair, factory reset).
Product Configuration (reference)
PUQ Web Hosting module WHMCS
Order now | Download | Community
A product's behaviour is defined on its WHMCS Module Settings tabs. Installation & Configuration → Create a product walks the happy path; this page is a reference to the moving parts and how they fit together.
How the pieces connect
General tab → roles (Web/Mail/DNS) + Deployment mode (Split/Unified/Vanity)
Web/Mail/DNS limits → Hestia package quotas + module caps, each keyed to a Configurable Option
Client tab → which client-area pages/actions are visible
Email tab → WHMCS email template per module event
Config options tab → Create/sync the WHMCS Configurable Options + the vanity_name Custom Field
At order time the module reads each customer's chosen limits from the WHMCS Configurable Options (whose keys it created), overlays them on the product defaults, and stores the resolved set on the service. You can inspect that resolved set on the admin service panel (the Resolved limits table).
Deployment mode decides the tab set
- Split / Unified → separate Web / Mail / DNS limits tabs.
-
Vanity → a single Vanity limits tab (Website quota + Mailbox quota), plus the
vanity_domainConfigurable Option and thevanity_nameCustom Field.
See Deployment & Segmentation → Deployment models for what each mode does, and Vanity Mode → The vanity product for the vanity specifics.
Limits → Configurable Options
Every limit field names its override key (e.g. web_disk_quota, mail_accounts, dns_records). The Config options tab turns those keys into real WHMCS Configurable Options in one click, so customers can pick tiers and you can price upgrades.
| Tab | Key examples |
|---|---|
| Web limits | web_disk_quota, web_bandwidth, web_databases, web_ftp_accounts, web_cron_jobs, web_backups |
| Mail limits | mail_disk_quota, mail_accounts, mail_backups |
| DNS limits | dns_records |
| Vanity limits | vanity_site_disk_quota, vanity_mail_quota, vanity_domain |
Client permissions & emails
The Client tab hides/shows client‑area features per product; the Email tab maps each lifecycle event to a WHMCS email template. Both are covered with screenshots in Create a product.
Re‑running Create / sync missing is always safe — it only adds what's missing and never rewrites existing options or values. Run it again after enabling a new role or switching deployment mode.
Service Management
PUQ Web Hosting module WHMCS
Order now | Download | Community
Every hosting service is managed from inside its WHMCS service page. At the top you get the standard WHMCS editor with the Configurable‑Option dropdowns and the Module Commands (Create / Suspend / Unsuspend / Terminate / Change Package):
Below that, the module embeds a full admin service panel — your staff's day‑to‑day console for the service.
Overview
The Overview shows two role cards. Web & DNS lists the web Hestia user, the DNS user and zones (with deploy badges) and the website usage gauges; Mail lists the mail user, mail/webmail links and the mailbox gauges. Both show the SSL state. Top buttons: Edit DB row · Reveal credentials · Redeploy service · Factory reset · Change domain.
Per‑resource tabs
The tab bar mirrors the client area but read/write for staff:
| Tab | What you do |
|---|---|
| Web settings | PHP version, HTTPS redirect, proxy extensions. |
| SSL | Auto‑SSL state per role + custom‑cert upload; Issue/Renew now. |
| FTP | FTP accounts (full prefixed username). |
| Databases | Databases (name/user, engine, charset, size). |
| DNS | The service's zone records (type/name/value/pri/TTL) with per‑server deploy state. |
| Mailboxes | The service's mailboxes (email, quota, status). |
| Cron | Cron jobs (schedule, command, status). |
| Backups | Web + Mail backup lists with Backup now / Sync from server / Restore / Delete / Check restore. |
| Logs | Real Hestia log tail (Apache/Exim/Dovecot), grep‑filtered to the domain. |
Deploy & Tasks
The Deploy tab shows live deploy status, a full event timeline and Redeploy (hard reset). The Tasks tab lists this service's tasks (action, target, server, status, attempts, timestamps); each opens a detail modal with the streamed SSH log.
Limits, usage & power tools
The Overview tab also carries the Resolved limits and live Usage tables, with Force usage sync and a Verify & Repair panel:
-
Reveal credentials — decrypted logins/passwords for the web (FTP/panel/unix), mail and DNS Hestia users.
-
Edit DB row — a raw editor of the service record for fixing rows that got into a bad state (bypasses provisioner validation — power users only).
-
Factory reset — wipes the Hestia users + local child rows and re‑runs the full deploy chain (two‑step confirm).
Cross‑service list
The addon Services page is the fleet‑wide view — search/filter by deploy or DNS state, see each service's Mode (Split/Vanity) and DNS ownership, open the admin panel, redeploy, unlock or force‑delete, and run Verify (probe panels + DNS and repair).
Client Area
The self‑service control panel your customers get inside WHMCS: a live dashboard plus pages for web settings, FTP, databases, DNS, mailboxes, SSL, cron, backups and logs. Every page is permission‑gated by the product's Client tab, and every action runs through the same asynchronous task queue (so the customer sees live "queued → creating → active" status).
Client Dashboard
PUQ Web Hosting module WHMCS
Order now | Download | Community
When a customer opens an active hosting service they land on a two‑column Web | Mail dashboard that summarises everything at a glance.
Layout
- Web card — website URL, web server, PHP version, SSL state, and live usage bars (disk, bandwidth, databases, FTP accounts…).
- Mail card — webmail link, mail server, SSL state, and mailbox/quota usage bars.
- Quick actions — one‑click shortcuts to the panel, webmail, and the most‑used resource pages.
The usage bars are read from the local database (kept fresh by the usage‑sync cron); Sync now enqueues an on‑demand recompute if the customer wants the latest numbers immediately.
Navigation
During deployment the customer sees a live progress splash instead of the dashboard; on failure, an error screen with a Try again button (if the product allows redeploy). See Deployment & Segmentation → How deployment works.
Web Settings
PUQ Web Hosting module WHMCS
Order now | Download | Community
The Web settings page lets the customer self‑serve the three most common website tweaks without a ticket.
| Section | What it does |
|---|---|
| PHP version | Pick any PHP version installed on the web server (e.g. 7.4 → 8.3). Applies the matching Hestia web template. |
| HTTPS redirect | Force http → https. Only selectable once SSL is active for the domain. |
| Proxy extensions | Choose which static file extensions the front proxy serves directly (with Defaults and Disable shortcuts). |
Each Apply is asynchronous: the request is queued, a spinner badge shows while the worker runs, and an error tooltip surfaces if Hestia rejects the change. The page mirrors the live state back from the server, so what you see is what's actually applied.
These controls appear only if the product's Client permissions enable hosting settings. On a Vanity service this page is simplified to the relevant subset.
FTP Accounts
PUQ Web Hosting module WHMCS
Order now | Download | Community
Customers manage their own FTP accounts here, up to the product's FTP‑account limit.
Creating an account
Enter a suffix and a password (or generate one) and submit. The real Hestia username is the main web user plus your suffix (<webuser>_<suffix>) — the page shows the full username so the customer knows exactly what to type into their FTP client. The home directory and shell are set by the Provisioning defaults (typically nologin, so FTP/SFTP only).
The action is queued, so the new row appears with a Queued badge first:
…and flips to Active once the worker has created it on the server:
The suffix length is budget‑aware: the module reserves enough characters so the combined username stays within Hestia's limit. If a suffix would overflow, it's rejected before submission.
Open the file manager (FileGator / net2ftp) from the dashboard quick actions for in‑browser file access without a desktop FTP client.
Databases
PUQ Web Hosting module WHMCS
Order now | Download | Community
The Databases page lets customers create and manage MySQL/MariaDB databases up to the product's database limit.
Each database is created with its own dedicated user. As with FTP, the database and user names are prefixed with the main web user (<webuser>_<suffix>), and the page shows the full names plus the live size of each database.
- Create — pick a suffix and password; the database and matching user are provisioned together (queued → active).
- Delete — removes the database and its user.
- phpMyAdmin — opens the configured phpMyAdmin URL for in‑browser administration.
Database size is read by the usage‑sync cron and counts toward nothing by itself, but the number of databases is capped by the product limit / Configurable Option.
DNS Records
PUQ Web Hosting module WHMCS
Order now | Download | Community
If the product includes the DNS role, customers manage their zone's records here, up to the product's record limit.
Editing records
Add, edit or delete A / AAAA / CNAME / MX / TXT / SRV records. The editor validates the type/value and shows the TTL within the configured min/max bounds.
Every change is fanned out to all DNS servers attached to the service's group (the active‑active cluster), so records stay identical on every nameserver. See Deployment & Segmentation → Server segmentation for how the DNS pool works.
External DNS
If the service was set up with external DNS (the customer keeps DNS elsewhere), this page instead shows the records they need to publish at their own provider, plus a Verify check that probes the live nameservers and confirms the records resolve:
Mailboxes
PUQ Web Hosting module WHMCS
Order now | Download | Community
On a service with the Mail role, customers manage their mailboxes here, up to the product's mailbox limit.
Per‑mailbox settings
Create a mailbox with an address and password, then open it to manage:
- Password — reset the mailbox password.
- Quota — per‑mailbox storage limit (or unlimited), within the service's mail quota.
- Forwards — forward incoming mail to one or more addresses.
- Auto‑reply — vacation / out‑of‑office responder.
Webmail opens the configured webmail URL for the mail server.
On a Vanity service this is the single
name@<your-domain>mailbox, presented as a simplified Email page — see Vanity Mode → Order & client experience.
SSL
PUQ Web Hosting module WHMCS
Order now | Download | Community
The SSL page shows certificate status and lets customers upload a custom certificate.
Automatic SSL
In the common case there's nothing to do: the module issues and renews Let's Encrypt certificates automatically for the website (and for mail. / webmail. on the mail role). The page shows the current state and expiry; the cadence and rate‑limit guards are described in Cron & Automation → SSL automation.
Custom certificate
Customers who already have a certificate (e.g. a wildcard or EV cert) can upload it here — certificate, private key and optional CA bundle:
Uploading a custom certificate installs it on the domain and suspends auto‑SSL for that role so it won't be overwritten. A daily cron checks custom‑cert expiry and notifies before it lapses.
Backups, Cron & Logs
PUQ Web Hosting module WHMCS
Order now | Download | Community
Three more self‑service pages round out the client area.
Backups
Customers can take and restore their own snapshots, up to the product's web/mail backup quota.
- Create — schedules a snapshot on the server (asynchronous; the row shows a creating badge until the file appears).
- Restore — restores a snapshot; a typed RESTORE confirmation is required, and write actions on the service are locked while the restore runs.
- Delete — removes a snapshot.
Web and mail snapshots are listed and quota‑counted separately.
Cron
Customers manage scheduled jobs for their website, up to the cron‑job limit.
Add a job with a schedule and command; it's queued (Queued badge) and goes Active once installed on the server:
Logs
The Logs page tails the website's real server logs (Apache/Exim/Dovecot as applicable), grep‑filtered to the customer's own domain, with a size‑capped download.
Every one of these pages is gated by the product's Client permissions, so you can expose exactly the feature set each plan should have.
Deployment & Segmentation
This chapter explains the heart of the module: how a service is deployed, why you split your infrastructure across servers, and the three deployment models (Split, Unified, Vanity) you can sell. Read it before building products — the choices here decide how your hosting scales and how your costs and isolation trade off.
Deployment Models (Split · Unified · Vanity)
PUQ Web Hosting module WHMCS
Order now | Download | Community
Every product you sell has a Deployment mode set on the product's Module Settings → General tab. It decides how many HestiaCP accounts back each service and where the web, mail and DNS roles live. This is the single most important product decision.
The three modes
| Mode | Hestia accounts per service | Best for |
|---|---|---|
| Split | A separate Hestia user per role — one web user, one mail user, one DNS user (each can live on a different server). | Classic shared/business hosting where you want maximum isolation and the freedom to put web, mail and DNS on different, independently‑scaled servers. |
| Unified | One Hestia user holds web and mail (and local DNS) for the service. | Simpler, denser, cheaper hosting where web and mail naturally live together on one node. |
| Vanity | A per‑service web user for one subdomain + one mailbox on your shared provider mail account. | Selling name.yourdomain.com websites and name@yourdomain.com mailboxes on a domain you own — see the dedicated Vanity Mode chapter. |
Split deployment
In Split mode the module provisions up to three independent HestiaCP users for the service — for example customer-com-web, customer-com-mail and customer-com-dns. Each is placed on a server that has the matching capability, so the website, the mailboxes and the DNS zone can sit on completely different machines.
The admin service panel shows this clearly — a Web & DNS card and a separate Mail card, each with its own Hestia user, server and certificate:
Split is the mode to choose when you want to segment your fleet by role (the next page) and keep mailboxes off your web servers.
Unified deployment
In Unified mode a single Hestia user owns the website and the mailboxes, so web and mail are always co‑located. There is no separate mail user to manage. Unified products use a single combined account package and a single set of backups (role = all). Choose Unified when you run general‑purpose nodes that do both jobs and you want fewer accounts to manage.
Vanity deployment
Vanity is a different business model rather than a different server layout: you own a domain (e.g. benchwords.com) and sell slots on it. Each order becomes name.benchwords.com (a normal per‑service web account) plus name@benchwords.com (one mailbox on your shared provider mail user). The parent domain, its DNS zone and the provider mail account are never modified per order — the model is destructive‑safe by design.
Vanity has its own chapter because the setup (sellable parent domains, reserved names, the order flow and a drop‑anywhere shop widget) is substantial — see Vanity Mode.
Which roles does a product include?
Independently of the mode, the product's General tab lets you tick which roles the package includes — Web, Mail, DNS. Unticking a role (or setting its disk quota to 0 in the limits tab) simply omits it. For example, a "mail‑only" product ticks Mail and leaves Web off; a "website‑only" product ticks Web and DNS.
The limits for each ticked role are configured on the matching Web limits / Mail limits / DNS limits tab (or the single Vanity limits tab in Vanity mode) — see Installation & Configuration → Create a product.
Rule of thumb: Split = isolation + segmentation; Unified = density + simplicity; Vanity = a productised "personal site + email" offer on your own domain. You can sell all three side‑by‑side — they coexist on the same servers.
Server Segmentation (Web / Mail / DNS tiers)
PUQ Web Hosting module WHMCS
Order now | Download | Community
One server or many?
You can run the whole module on a single HestiaCP node that does everything. That is perfect for getting started, for small offers, and for testing.
But the module is designed so you can segment your fleet as you grow: put websites on one set of servers, mailboxes on dedicated mail (MX) servers, and DNS on separate nameservers. Each role then scales on its own hardware, and a busy mail queue or a heavy website can't starve the others.
The mechanism that makes this possible is server capabilities + server groups.
Capabilities — what a node is allowed to host
Each server you add (Infrastructure → Web / Mail / DNS Servers) has three capability flags: Web, Mail, DNS. You tick them when you add or edit the node. A node can carry one role, two, or all three.
This is how you decide your topology. Typical patterns:
| Pattern | Web nodes | Mail nodes | DNS nodes |
|---|---|---|---|
| All‑in‑one | one node ticks Web + Mail + DNS | (same node) | (same node) |
| Web / mail split | nodes tick Web only | dedicated Mail nodes (your MX) | nodes tick DNS only |
| Full three‑tier | Web pool | Mail pool | Nameserver pool (e.g. ns1, ns2) |
In the Infrastructure pages the same physical servers appear under Web Servers, Mail Servers and DNS Servers filtered by their capability — so a mail‑only node only shows up under Mail:
When a Split service is provisioned, the module places each role on a least‑loaded active node that has the matching capability: the web user lands on a Web node, the mailbox on a Mail node, the DNS zone on the group's DNS nodes. That is the load balancing — it is by role and by capacity, automatically.
Server groups — the unit you sell from
A server group ties a set of nodes together and is what a product points at (the product's Server Group dropdown). Open a group to manage it.
The group's Actions tab shows the members with their Type (WEB / MAIL) and lets you push configuration to all servers, web servers only, mail servers only or DNS servers only. That last point is the key to safe segmentation: a web‑specific setting is never applied to a mail node and vice‑versa.
Role‑targeted configuration
The group editor has separate config tabs whose values are pushed only to nodes of that role during Apply Hestia config:
-
All‑servers config — keys applied to every node (language, theme, security/API, user policies…).
-
Web config — web‑only keys (Apache/Nginx ports, web backend, phpMyAdmin alias…).
-
Mail config — mail‑only keys (SMTP/IMAP system, antispam/antivirus, webmail, notification from‑address…).
-
DNS config — DNS‑only keys (DNSSEC, DNS cluster). PowerDNS nodes have no
hestia.confand are skipped automatically.
The worker filters every managed key by its category target, so "mail‑only keys never land on web servers and vice‑versa". This means you can, for instance, enable ClamAV/SpamAssassin only on your mail tier without touching the web tier.
DNS is active‑active across the tier
DNS servers are independent — you attach them to a group on the group's DNS servers tab, and one DNS server can serve many groups. When a zone is created it is replicated to every attached DNS node, so you get an active‑active nameserver cluster out of the box. The DNS Zones page shows the per‑server deploy state for each logical zone:
Watching the balance
The addon Statistics page reports usage per domain, split into Web and Mail columns, so you can see at a glance how load is distributed and when a tier needs another node:
The Home dashboard's Server capacity table lists each node by type with its capacity and last sync time — a quick health view of every tier.
Why segment? Mail and web have very different load profiles. Keeping them on separate, capability‑tagged tiers lets you scale each independently, isolate failures, and apply role‑specific tuning — while the module's per‑capability placement spreads new accounts across the least‑loaded node automatically.
How Deployment Works
PUQ Web Hosting module WHMCS
Order now | Download | Community
Orders return instantly — work happens in the background
When a service is created (a WHMCS order goes active, an admin clicks Create, or the API is called) the module does not try to build everything inside the HTTP request. It writes a service record, returns success to WHMCS immediately, and lets the cron‑driven task queue do the real work.
This is what the customer sees right after ordering — a live deployment splash that polls for progress and refreshes itself:
Each step is a queued task processed by the cron runner. As steps complete, the bar advances and the recent‑activity feed updates:
When the last step finishes the page flips to the live control panel:
This design makes provisioning resilient to slow panels, SSH timeouts, apt‑get locks and long operations — none of them block the order, and any failed step is simply retried.
The pipeline (Split example)
A Split service is built by a chain of idempotent tasks, roughly in this order:
- Create the web package + web user on a Web node.
- Add the web domain (and the web account's quota/PHP settings).
- Create the mail user + mail domain on a Mail node (with DKIM).
- Create the DNS user + zone and deploy the zone to every attached DNS node.
- Seed Auto‑SSL so Let's Encrypt issues as soon as DNS resolves.
Unified runs the same idea with one combined account; Vanity runs a trimmed chain (one web account, one mailbox on the shared mail user, one DNS record). Every task is idempotent — re‑running it is safe — so the chain can resume from wherever it stopped.
Watching and driving it from the admin panel
The admin service panel's Deploy tab shows the live deploy status and a full timeline of every task with its duration and result, plus a Redeploy (hard reset) button:
The Tasks tab lists this service's tasks (action, server, attempts, timestamps); each row opens a detail modal with the streamed SSH log:
Retries, failures and tickets
A failed task is retried with exponential back‑off. Once all attempts are exhausted it is terminally failed, the service shows a deploy error, and — if you enabled it — the module can open a support ticket for your staff. The retry policy and the failure‑ticket behaviour are configured in addon Settings (see Cron & Automation → Task queue, retries & tickets).
Key takeaway: deployment is an asynchronous, idempotent, resumable pipeline. The order is accepted instantly, the queue does the work, failures self‑heal on retry, and both you and the customer get live progress.
Vanity Mode
Vanity mode is the module's signature feature. It turns one domain you own into thousands of sellable “personal site + email” products: a customer picks a name and instantly gets name.yourdomain.com as a website and name@yourdomain.com as an email address. This chapter covers the whole story — what it is and why it sells, how to set up a vanity server group and its sellable domains, how to build the vanity product, what the order and client experience look like, and the standalone shop widget you can drop on any marketing site. It is intentionally detailed: Vanity is a complete go‑to‑market in itself.
What Vanity Mode Is (and Why It Sells)
PUQ Web Hosting module WHMCS
Order now | Download | Community
The idea in one sentence
You own a memorable domain — say benchwords.com — and you rent out names on it. A customer who picks ruslan gets:
- a website at
ruslan.benchwords.com, and - an email address
ruslan@benchwords.com,
…provisioned in seconds, billed by WHMCS, and fully self‑service. One domain you already own becomes an unlimited catalogue of "personal site + email" products.
Why customers buy it
Registering a domain, configuring DNS, setting up mail and getting a website online is intimidating for most people. Vanity removes all of that: pick a name on a brand they already like, and they have a real site and a real inbox. It is the simplest possible hosting product to buy — which makes it the easiest to sell.
This is exactly what the customer ends up with — a clean two‑card dashboard, Website and Email, with nothing else to configure:
How it differs from normal hosting
A normal (Split/Unified) service gives the customer a whole domain and the full toolbox — DNS records, multiple mailboxes, SSL, backups, subdomains. A vanity slot is deliberately minimal:
| Normal hosting | Vanity slot | |
|---|---|---|
| Domain | the customer's own domain | one name on your domain |
| Website | full account | a per‑service web account for name.yourdomain.com |
| Mailbox | create/delete many | exactly one fixed mailbox name@yourdomain.com |
| DNS | full zone editor | nothing to manage — one record on your zone |
| SSL / Backups / Subdomains | customer‑managed | handled for them (mail SSL lives on your provider domain) |
The customer never sees DNS, SSL, backups or zone editing — those don't apply to a slot. The trimmed client menu reflects that.
The safety guarantee (read this)
Vanity mode is destructive‑safe by design. No matter what a customer does — order, change password, set forwards, cancel — the module only ever touches:
- the per‑service web user for that one subdomain,
- one mailbox on your shared provider mail user, and
- one DNS record (in push mode) for the subdomain.
It never touches the parent mail domain, the DNS zone, or your provider Hestia user. One customer's actions can never affect another customer or your base domain. You will see this guarantee restated on the setup screen — it is a load‑bearing invariant of the whole model.
Two ways to sell it
- Inside WHMCS — a normal product with a live name‑availability check on the order form (covered in The vanity product and Order & client experience).
- Anywhere — a standalone shop widget (two small files) you drop on any marketing domain. It shows a "claim your name" landing page and sends buyers straight into your prefilled WHMCS cart (covered in The vanity shop widget).
The next pages set it up end‑to‑end: first the server group + sellable domains, then the product, then the order/client experience, then the widget.
Setting Up the Vanity Group & Sellable Domains
PUQ Web Hosting module WHMCS
Order now | Download | Community
A vanity offer is built on a special server group whose purpose is Vanity. This page sets up that group and the parent domains you will sell names on.
Step 1 — Make a group a Vanity group
Create a server group (Infrastructure → Server Groups → Add Server Group), open it, and on the General tab set Group purpose to Vanity.
Switching to Vanity changes the group editor: the hosting‑config tabs disappear and a Vanity domains tab appears. A vanity group only has four tabs — General, Variables, DNS servers, Vanity domains.
Reserved names
The General tab has a Reserved names box (one per line). These are names customers may not register on this group's domains (e.g. admin2, your own brand words, etc.). They are enforced on the order form, the client setup page, the API and at provisioning — on top of the built‑in technical reservations (www, mail, admin, ns1, _dmarc, …), which you never need to list yourself.
Step 2 — Attach DNS servers
On the DNS servers tab, tick the nameservers that will carry the subdomain records for this group's domains. Subdomain records are pushed to every attached DNS node (active‑active).
If a domain uses External / wildcard DNS (next step), the module writes no DNS at all and this selection is irrelevant for that domain.
Step 3 — Add the parent domains you sell
Open the Vanity domains tab. This is the core of the setup. Note the banner restating the safety guarantee — the module only adds/removes the per‑service subdomain, one mailbox, and (in push mode) one DNS record; it never touches the parent mail domain, the zone, or your provider Hestia user.
Click Add domain and configure each parent domain:
| Field | What it means |
|---|---|
| Parent domain | The domain you own and sell on (e.g. benchwords.com). Sold as name.<domain> (site) + name@<domain> (mailbox). |
| Mail server + Provider mail username | The shared Hestia mail user that already owns the mail domain. This user must already own the mail domain on HestiaCP before you sell slots on it. Every customer mailbox is created on this one user. |
| Mail domain | Usually the parent domain; leave blank to use it. |
| DNS mode | External / wildcard — you maintain a *.domain wildcard (or manage DNS yourself) and the module touches no DNS. Push — the module writes the name A/AAAA record into your existing zone. |
| Web servers | Which Web nodes may host this domain's sites. The least‑loaded ticked node is chosen at order time. Tick at least one (leave empty only for a mail‑only vanity product). |
| Status | Active (sellable) to offer it; otherwise hidden from new orders. |
DNS mode tip: a
*.benchwords.comwildcard A‑record pointing at your web tier is the simplest setup — every newname.benchwords.comresolves immediately with zero per‑order DNS work. Use Push mode only when you need exact per‑name records in a zone the module manages.
Step 4 — Variables (optional)
The Variables tab works the same as for standard groups — group‑wide {name} values used by DNS zone templates. Most vanity setups don't need it (the subdomain record is the only DNS the module writes). Note that a vanity group shows only four tabs — General / Variables / DNS servers / Vanity domains — the hosting‑config tabs are hidden.
Once the group has at least one Active parent domain with a mail user and a web server, it is ready. The next page wires up the product that sells from it.
The Vanity Product
PUQ Web Hosting module WHMCS
Order now | Download | Community
With the vanity group ready (previous page), create a WHMCS product that sells from it. Create a normal product (Setup → Products/Services), set its module to PUQ Web Hosting, and point its Server Group at your vanity group.
Step 1 — Set the deployment mode to Vanity
On Module Settings → General, set Deployment mode to Vanity. The limits tabs collapse into a single Vanity limits tab.
Step 2 — Vanity limits
The Vanity limits tab sets the slot sizes and the per‑slot caps:
| Field | Meaning |
|---|---|
| Website quota | Disk for the name.<domain> website. 0 = no website (skip the web role). |
| Mailbox quota | Disk for the single name@<domain> mailbox. 0 = no mailbox (mail‑only off). |
| Cron jobs / Max databases / Max FTP / Default PHP | Caps for the website account (same meaning as normal hosting). |
| Auto‑install Let's Encrypt / Rate limit | Auto‑SSL on the website + outbound mail rate limit. |
Tick Web and/or Mail on the General tab to control which the buyer gets (a website‑only or mailbox‑only vanity product is possible).
Step 3 — Create the Configurable Options & Custom Field
The product needs two things wired into WHMCS so the order form can expose them:
- a Configurable Option named
vanity_domain(its values are the parent‑domain strings from the group's Vanity domains list — this is how the buyer picks which domain), and - a product Custom Field named
vanity_name(text, required — the buyer's chosen name).
The module creates both for you. Open the Config options tab and click Create / sync missing:
You'll see vanity_domain come up as dynamic (its values come straight from your group's sellable domains), the website/mailbox quota options, and the vanity_name custom field marked PRESENT. It's safe to re‑run any time — existing options and values are never changed. Tune the prices afterwards under WHMCS Configurable Options.
Step 4 — (Optional) client permissions
The Client tab toggles which client‑area actions are visible. For vanity, the relevant control is Mailbox settings — forwards / auto‑responder (the customer gets one fixed mailbox, so "create/delete mailbox" don't apply). Leave DNS/SSL/backup toggles off for a clean vanity experience.
What it looks like to your staff
Once a vanity service exists, its WHMCS service page shows the vanity configurable options — the parent Domain, Website quota and Mailbox quota — instead of the full split set:
The product is now ready to sell. The next page walks the buyer's experience and the client area they get.
Vanity: Order & Client Experience
PUQ Web Hosting module WHMCS
Order now | Download | Community
This page follows a vanity order from the WHMCS cart through to the live customer dashboard.
On the order form
The vanity product's order form asks the buyer to choose a name and a domain, with a single helper line: “lowercase letters, digits and hyphens — this is your website name and your email name.” Website/mailbox quota dropdowns and a live price summary sit alongside.
As the buyer types, the module checks availability live against your API. A taken or reserved name is rejected with the reason, and a live preview shows exactly what they'll get:
A free name turns green and unlocks Continue:
In the cart
At checkout the cart line is human‑readable — it shows the resolved Website (name.domain) and Email (name@domain) plus the chosen quotas, so the buyer sees precisely what they're paying for:
Deployment
After payment the service deploys with the same live splash as any product (web account → mailbox → SSL), then flips to the dashboard. See Deployment & Segmentation → How deployment works for the progress screens.
The vanity client dashboard
The customer lands on a deliberately simple, two‑card dashboard — Website and Email — each with an Open button and a Settings button, plus a small usage gauge:
The single mailbox page
Because a slot has exactly one mailbox, there is no mailbox list — just a Mailbox settings page for name@domain: storage, change password, forwarding, and an auto‑responder. Open webmail is one click.
The customer can still manage their website like normal hosting — PHP version & HTTPS (Web settings), FTP accounts, databases, cron jobs and logs — all scoped to their name.domain site.
What your staff see
The admin service panel for a vanity service makes the shared model explicit: the Website card shows the per‑service web user and a "single record on the provider zone (cluster‑managed)" note; the Email card shows the one mailbox on the shared provider mail user, and notes that "Mail SSL is managed on the provider mail domain (not per‑service)."
The SSL tab confirms it — only the website certificate is shown; mail SSL belongs to your provider mail domain, not to each slot:
Everything the customer does stays inside their own slot. The parent domain, the shared mail account and the DNS zone are never modified per order — exactly as promised on the setup screen.
The Vanity Shop Widget
PUQ Web Hosting module WHMCS
Order now | Download | Community
Besides selling vanity slots through the normal WHMCS cart, the module ships a standalone “claim your name” widget — two small files you can drop on any marketing domain (you can deploy it on hundreds of them). It shows a polished landing page that live‑checks names and sends the buyer straight into your prefilled WHMCS cart.
How it works (and why it's safe)
The widget is just two files — index.html (the landing page) and proxy.php. The browser talks only to the widget's own proxy.php, which holds your shared API key and talks server‑to‑server to your WHMCS. The key never reaches the visitor, and proxy.php caches answers so it stays fast.
- The visitor picks a name, a domain and the website / mailbox sizes; the widget shows a live total price.
- As they type, the name is checked live against your WHMCS — reserved/taken names are rejected, free names are accepted with a
name.domain/name@domainpreview. - On Get it now the widget redirects the visitor to your WHMCS cart with the product, domain, name and quotas already filled in.
Configure it (addon → Settings → Vanity widget)
In the addon, open Settings → Vanity widget:
Then download the two files and upload both to the web root of each marketing domain:
Prerequisites: the product must be a Vanity product whose group has Vanity domains configured, and it must have the
vanity_domainConfigurable Option + thevanity_nameCustom Field (the product's Config options tab creates them — see The vanity product).
The buyer's flow on the widget
A reserved name is rejected inline, with the live preview:
A free name turns green and enables the button:
On Get it now the button shows a spinner while it redirects…
…and the visitor lands on your WHMCS cart with the Vanity product, the website and email, the quotas and the price already filled in — they just pay:
One vanity product can be fronted by a single WHMCS order form and by as many drop‑anywhere widgets as you like — every landing page funnels into the same prefilled cart.
Cron & Automation
Everything the module does in the background: the deploy pipeline, the task queue with retries and failure tickets, automatic SSL, usage metering & metric billing, and suspend/terminate. All of it is driven by the addon's cron runner.
The Deploy Process
PUQ Web Hosting module WHMCS
Order now | Download | Community
Provisioning is not done synchronously inside the WHMCS order. _CreateAccount simply records the desired service and enqueues the work; the cron‑driven task runner then builds the service step by step. This is what keeps orders instant and makes every step retryable.
The chain
A new order fans out into a chain of idempotent tasks, roughly:
create package → create web user → add web domain → (PHP/SSL/proxy)
→ create mail user → add mail domain → DKIM/SPF/DMARC
→ create dns user → add zone → add records (× every DNS server)
→ mark service active
Each task does exactly one thing on one target, checks whether it's already done before acting, and reports back. Because every step is idempotent, re‑running the chain (a retry, a Redeploy, a Factory reset) converges on the same end state instead of duplicating resources.
What the customer sees
While the chain runs, the customer sees a live progress splash with a timeline; on success they land on the dashboard, on failure an error screen with Try again. This is covered visually in Deployment & Segmentation → How deployment works.
Why async
- Instant orders — checkout doesn't block on SSH to several servers.
- Resilience — a momentarily unreachable node just delays its tasks; the rest proceed and the failed ones retry.
- Observability — every step is a row you can watch, retry or inspect in the Task Queue and Operation Log.
See the next page for the retry/back‑off policy and failure tickets.
Task Queue, Retries & Tickets
PUQ Web Hosting module WHMCS
Order now | Download | Community
Every action — deploys, client‑area changes, status collection, SSL, usage sync — is a row in the task queue, processed by the cron runner.
How a task runs
- The cron runner picks up due tasks (respecting per‑server concurrency limits and the batch size per run).
- Each task is dispatched to its target server (critical for the DNS active‑active cluster — a task carries its
server_id). - On success the row is marked done; on failure it's scheduled for retry.
Retry & back‑off
The retry policy lives in Settings → General:
- Max attempts — how many times a failing task retries.
- Back‑off minutes — growing delay between attempts, so a flaky node isn't hammered.
A task that exhausts its attempts is marked error and stops retrying.
Failure tickets
When Settings → Notifications → failure ticket is enabled, a task that fails terminally opens (or notes on) a WHMCS support ticket in the chosen department/priority, so staff are alerted without watching the queue. Subsequent failures on the same operation append a note rather than spamming new tickets.
Watching & cleaning up
The addon Logs → Task Queue page shows the live queue with bulk controls (delete success/error/cancelled, clean completed, force‑fail stuck). Logs → Operation Log keeps the persistent history. See Addon Module → Task Queue & Logs.
Stuck tasks (node permanently gone) can be cleared with Force‑fail stuck; the matching Verify & Repair on the service then rebuilds whatever's missing.
SSL Automation
PUQ Web Hosting module WHMCS
Order now | Download | Community
SSL is hands‑off by default: the module issues and renews Let's Encrypt certificates automatically, and gets out of the way when a customer brings their own.
Acquisition
For each role that needs a certificate, an auto‑SSL worker:
-
Checks DNS — confirms the domain (and
mail./webmail.for mail) resolves to the right server. - Probes TLS — checks whether a valid cert is already present.
- Issues — runs the Let's Encrypt request only when the checks pass.
Cadence (Settings → SSL)
The check interval adapts to the situation:
- Fast mode — a few quick attempts shortly after provisioning (configurable count + interval), so a new site goes green within minutes of DNS pointing.
- Normal interval — the steady‑state re‑check.
- Active‑cert interval — the slow re‑check once a valid cert exists (renewals).
Rate‑limit guard
To respect Let's Encrypt limits, a domain that fails repeatedly is frozen for a configurable window (freeze after N fails, for M hours) before trying again. All of these knobs live on Settings → SSL.
Custom certificates
When a customer uploads a custom certificate (client SSL page), auto‑SSL is suspended for that role so the upload isn't overwritten, and a daily custom‑cert expiry cron warns before it lapses.
The per‑service SSL state, plus manual Issue / Renew now buttons, are on the admin service panel's SSL tab and the client SSL page.
Usage Sync & Metric Billing
PUQ Web Hosting module WHMCS
Order now | Download | Community
The module keeps live resource figures (disk, bandwidth, mailboxes, databases…) in the local database so both the admin and client areas render instantly, and it feeds WHMCS metric billing.
Per‑server batch sync
Usage is collected per server, not per service. A server.syncUsage worker lists all users on a node in one shot and recomputes every service on it, turning what used to be N × several SSH calls into one batch call per server. The cron schedules these per‑server jobs; Refresh all, Force sync and bulk actions all enqueue the same per‑server task.
Statistics page
The addon Statistics page reads purely from the database (no SSH at render time): an aggregate summary plus a per‑service usage DataTable, with Refresh all usage to enqueue a fresh collection.
Metric billing
The module exposes usage to WHMCS's MetricProvider, so you can bill on actual consumption (e.g. disk or bandwidth over an included allowance) in addition to flat plan pricing. The figures billed are the same ones shown in the client dashboard gauges.
A customer can pull fresh numbers on demand with Sync now on their dashboard; it enqueues the recompute→sync chain for just their service.
Suspend, Unsuspend & Terminate
PUQ Web Hosting module WHMCS
Order now | Download | Community
The WHMCS lifecycle commands map onto the same async, idempotent task model as provisioning.
Suspend / Unsuspend
- Suspend — disables the service's users across its servers (web/mail/dns) so sites and mail stop serving, without deleting anything. While suspended, client‑area write actions are blocked.
- Unsuspend — re‑enables them. Because the data was never removed, the service comes straight back.
These follow WHMCS automation (overdue suspend, etc.) or can be triggered manually from the service's Module Commands.
Terminate
Terminate removes the service's resources from every server it touches and cleans up the local rows in a transaction. A pending‑terminate state is finalised by cron, and a force‑terminate path exists for cases where a node is unreachable at termination time so the service can still be closed out cleanly.
The Vanity invariant
On a Vanity service these operations are deliberately scoped: they only ever touch that service's own subdomain, its single mailbox and its single DNS record. The shared provider domain, its mail user and its DNS zone are never modified — that invariant holds through suspend, unsuspend, terminate, redeploy and factory reset alike. See Vanity Mode → What it is & why.
Lifecycle commands always report
successto WHMCS immediately and do the real work via the queue, mirroring the provisioning model — so a slow or temporarily unreachable node never blocks the WHMCS workflow.
Troubleshooting
Common issues and the tools the module gives you to diagnose and repair them — Verify & Repair, the deploy timeline, the streamed task logs, Reveal credentials, the raw‑row editor, and the per‑service Factory reset.
Common Issues
PUQ Web Hosting module WHMCS
Order now | Download | Community
Most problems come down to one of: cron not running, a node unreachable over SSH, or DNS not yet pointing. The queue and the per‑service Verify & Repair are your main tools.
Deployment stuck or failed
The customer sees the error screen; the service shows error state.
- Open the service → Deploy tab and read the timeline /
deploy_error. - Open Tasks and the failed task's detail to see the raw SSH log.
- Fix the cause (credentials, package, reachable node), then Redeploy or Verify & Repair.
Common causes: SSH/sudo not set up on the node, wrong server IP, package not yet created, DNS server unreachable.
A node was unreachable
Tasks for that server pile up. Once it's back, they retry automatically. If a task is permanently wedged, use Logs → Task Queue → Force‑fail stuck, then run Verify & Repair on the affected services to rebuild what's missing.
Backups show errors
Backup rows can show an error when the snapshot failed on the server (disk full, Hestia busy). Use Sync from server to reconcile the list with reality; missing‑on‑server rows are pruned automatically on sync.
FTP / DB account won't create (Vanity)
A too‑long suffix on a Vanity service can overflow Hestia's username limit. The username is budget‑aware now, but if you see an invalid format error, shorten the suffix.
A row is in a bad state
For records that got inconsistent (e.g. a half‑created resource), use the service panel's Edit DB row to correct the raw record, or Reveal credentials to log into Hestia directly and inspect.
DNS doesn't resolve / SSL won't issue
Auto‑SSL waits for DNS. Confirm the records are published (client DNS page → Verify for external DNS), give it a propagation cycle, and the fast‑mode SSL worker will pick it up. Check Settings → SSL isn't in a freeze window for that domain.
Golden rule: is cron running? Almost every "nothing is happening" report is a cron that isn't firing. Verify the crontab line from Settings → Cron is installed.
Questions & Answers
Short answers to the questions providers ask most often when setting up and selling with the module.
Frequently Asked Questions
PUQ Web Hosting module WHMCS
Order now | Download | Community
Do I need separate servers for web, mail and DNS? No. One server can do all three. But you can split them by capability and balance load by server type — heavy PHP sites on web nodes, mail on mail nodes, an active‑active DNS pool — without changing products. See Deployment & Segmentation.
What's the difference between Split, Unified and Vanity?
Split gives each role its own Hestia user; Unified puts web+mail under one user; Vanity sells name.<your-domain> + name@<your-domain> slots on a domain you own. See Deployment Models.
What is Vanity mode for?
To monetise a domain you own by selling personal sub‑sites and mailboxes on it (e.g. john.yourbrand.com + john@yourbrand.com). It's a distinct product type with a simplified client area and an optional standalone shop widget. See Vanity Mode.
Why does provisioning happen "in the background"?
Orders are instant and every step is retryable. _CreateAccount enqueues work; the cron task runner builds the service idempotently. See Cron & Automation → The deploy process.
Nothing is provisioning — what's wrong? Almost always cron isn't running. Confirm the crontab line from Settings → Cron is installed, then watch Logs → Task Queue.
How does SSL work? Let's Encrypt is issued and renewed automatically once DNS points at the server; customers can also upload a custom certificate. See Cron & Automation → SSL automation.
Can customers manage their own FTP, databases, DNS, mail, backups and cron? Yes — each is a client‑area page, and each is gated by the product's Client permissions so you decide what every plan exposes. See Client Area.
How is usage billed? Live usage is synced per‑server and exposed to WHMCS metric billing, on top of flat plan pricing. See Usage Sync & Metric Billing.
Which DNS backends are supported? HestiaCP and PowerDNS, mixable in one cluster. DNS is active‑active: every record is replicated to all attached DNS servers.
Does terminating a Vanity service hurt the shared domain? No. Vanity operations only ever touch that service's own subdomain, single mailbox and single DNS record — never the shared provider domain, mail user or zone.
A node went down mid‑deploy — did I lose the service? No. Its tasks retry when it's back; if a task is permanently stuck, Force‑fail stuck then Verify & Repair rebuilds what's missing. See Troubleshooting.
How do I move a product to a new deployment mode or add a role? Change it on the product's General tab, re‑run Config options → Create / sync missing (safe, additive), and redeploy affected services.
Which PHP version / module build do I need? Install the build that matches the PHP version your WHMCS host runs on. The module ships builds for PHP 7.4, 8.1 and 8.2. WHMCS 8 runs on PHP 7.4, 8.1 or 8.2 → use the matching build; WHMCS 9 runs on PHP 8.2 → use the 8.2 build; on any host with PHP 8.3 / 8.4 or newer, use the 8.2 build. This is the WHMCS host's PHP — separate from the PHP versions you offer to hosting customers on each Hestia web server. Full table in Installation & Configuration → Requirements & Installation.
Where do I get help or ask questions? Join the PUQ community at community.puqcloud.com.