The business side of starting a host (who to sell to, what to promise, the legal basics) is in our earlier guide on how to start a web hosting business. This post is the build: the exact pieces of a WHMCS and DirectAdmin stack, the order to set them up in, the fields that matter, and the checks to run before a paying customer touches any of it.
The stack and who does what
A small hosting brand in 2026 is four parts, and only the first is someone else's to run.
| Part | What it does | Who runs it |
|---|---|---|
| Servers, network, backups, CloudLinux | Keeps sites online and isolated | Your provider |
| DirectAdmin, Reseller Level | Creates and limits customer accounts | You, in a browser |
| WHMCS | Orders, invoices, payments, automatic setup and suspension, tickets | You |
| Brand domain, nameservers, mail | What the customer sees | You |
DirectAdmin has three levels: Admin (the server owner), Reseller (you) and User (your customer). A reseller plan gives you the middle level. WHMCS logs in to DirectAdmin with your reseller credentials and does what you would otherwise do by hand: create the user when an invoice is paid, suspend it when one is overdue, terminate it when the service is cancelled.
What it costs to start
Using our own reseller plans as the worked example (US dollars, VAT included):
| Item | Monthly | What you get |
|---|---|---|
| Partner Start | $15.99 | 10 customer accounts, 15 GB SSD, 300 GB traffic |
| WHMCS Starter licence add-on | $13.90 | Billing for up to 250 clients |
| Fixed cost | $29.89 |
Divide by ten accounts and each one costs you $2.99 a month with billing included. At a selling price of $8 a month you cover the fixed cost with four customers (4 × $8 = $32).
The other sensible entry point is Partner Pro paid annually: $449.90 a year, which is $37.49 a month, for 50 accounts with the WHMCS licence included rather than added. That is $0.75 per account at full occupancy. Start small if you have no customers yet; go straight to the annual plan if you are moving an existing portfolio.
Step 1: brand domain and private nameservers
Register the brand domain first, because everything else hangs off it. Then create nameserver names on it so customer domains point at ns1.yourbrand.com and not at your provider's names.
In DirectAdmin: Reseller Level → Account Manager → Name Servers. Enter the two names and use the IP addresses your provider gives you for the purpose. The resulting records in your brand zone look like this:
ns1.yourbrand.com. 3600 IN A 203.0.113.10
ns2.yourbrand.com. 3600 IN A 203.0.113.11Then log in at the registrar of yourbrand.com and register the same two names as host records (also called glue records or child nameservers) with the same IPs.
Check from outside:
dig +short NS yourbrand.com
dig +short A ns1.yourbrand.com
dig +short A ns2.yourbrand.com
dig SOA yourbrand.com @ns1.yourbrand.com +norecurseThe last command should return an answer with the aa flag set. If it times out, the glue or the A records are wrong.
Tip: do this on day one. Changing them for 30 live domains later is 30 emails and several domains that nobody updates.
Step 2: packages in DirectAdmin
A package is a set of limits you attach to a user. Create them under Reseller Level → Account Manager → Manage User Packages → Add Package. Three is enough:
| Package name | Disk | Traffic | Domains | Mailboxes |
|---|---|---|---|---|
starter |
1 GB | 20 GB | 1 | 5 |
business |
3 GB | 50 GB | 3 | 20 |
plus |
5 GB | 100 GB | 5 | 50 |
Keep the names lowercase, short and free of spaces. WHMCS matches a product to a package by name, exactly, and a package called Business Plan with a trailing space is a failed provisioning waiting to happen. The full form is in creating packages and user accounts in DirectAdmin.
Two limits are not yours to set freely. The plan's storage and traffic are a pool across all your users, and the daily outgoing mail limit (500 a day on Partner Start) is also shared across every account you create. You cannot give a package a higher mail ceiling than the plan has.
Step 3: connect WHMCS to DirectAdmin
Install WHMCS on a subdomain of the brand, for example billing.yourbrand.com, with HTTPS in place before you log in for the first time. WHMCS needs the ionCube Loader and a PHP version its release supports; check the WHMCS system requirements and pick that version for the domain in DirectAdmin. We supply the licence, not the installation, so plan an hour for this yourself.
Add the cron job straight away. Without it nothing is invoiced, suspended or reminded:
*/5 * * * * php -q /home/USERNAME/domains/yourbrand.com/public_html/billing/crons/cron.phpAdjust the path to where your crons directory actually lives. If invoices do not appear the next morning, start with WHMCS cron not running.
Now the server. In System Settings → Servers → Add New Server:
| Field | Value |
|---|---|
| Module | DirectAdmin |
| Hostname | The panel hostname from your welcome email |
| Username / Password | Your reseller login |
| Secure | Ticked (HTTPS) |
| Port | 2222 unless told otherwise |
| Nameservers | ns1.yourbrand.com, ns2.yourbrand.com |
Press Test Connection before saving. Then create a product under System Settings → Products/Services: type Shared Hosting, your price on the Pricing tab, and on the Module Settings tab choose the DirectAdmin module, the server, and the package name exactly as it is spelled in DirectAdmin. Select the option to set the product up automatically when the first payment is received. Pricing cycles and options are covered in WHMCS products, pricing and configurable options.
Tip: the nameserver fields on the server record feed the welcome email. Leave them blank and your first customer receives an email with empty nameserver lines.
Step 4: mail records for the brand
Invoices and welcome emails come from your brand domain, and an invoice in the spam folder is an unpaid invoice. DirectAdmin creates SPF and DKIM records when DNS for the domain is hosted on the server; confirm they exist and add DMARC:
yourbrand.com. IN TXT "v=spf1 a mx ip4:203.0.113.10 ~all"
x._domainkey.yourbrand.com. IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBg..."
_dmarc.yourbrand.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@yourbrand.com"dig +short TXT yourbrand.com
dig +short TXT x._domainkey.yourbrand.com
dig +short TXT _dmarc.yourbrand.comSend a WHMCS test invoice to a Gmail address and read the original message: SPF, DKIM and DMARC should each say pass. What the three records do is in SPF, DKIM and DMARC explained.
Step 5: place a test order
Before telling anyone the shop is open, be your own first customer.
- Order the cheapest product as a new client with a domain you control.
- Pay the invoice with the real gateway, not a manual "mark paid".
- Confirm the user appears in DirectAdmin under List Users with the right package.
- Read the welcome email as a customer would: panel address, username, nameservers.
- Log in to the panel with those details and install WordPress.
- In WHMCS, run Suspend on the service, check the site shows the suspended page, then Unsuspend.
- Refund yourself and run Terminate. Confirm the user is gone.
Tip: the suspend test is the one people skip. Automatic suspension is how you get paid without chasing anyone, and it is better to find out that it fails on your own account.
What to leave for later
Domain registration through WHMCS, configurable options, affiliate schemes and a custom client area theme can all wait. None is needed for the first ten orders. Get one product provisioning cleanly, then add the second.