<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bulent Kocaman</title>
    <description>The latest articles on DEV Community by Bulent Kocaman (@bkocaman).</description>
    <link>https://dev.to/bkocaman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4246044%2Fe3ecc3ee-62a5-44bf-898b-72fa54f7a926.jpg</url>
      <title>DEV Community: Bulent Kocaman</title>
      <link>https://dev.to/bkocaman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bkocaman"/>
    <language>en</language>
    <item>
      <title>How to sell DigitalOcean Droplets from WHMCS as your own VPS product</title>
      <dc:creator>Bulent Kocaman</dc:creator>
      <pubDate>Sun, 15 Nov 2026 14:21:04 +0000</pubDate>
      <link>https://dev.to/pdmodules/how-to-sell-digitalocean-droplets-from-whmcs-as-your-own-vps-product-138l</link>
      <guid>https://dev.to/pdmodules/how-to-sell-digitalocean-droplets-from-whmcs-as-your-own-vps-product-138l</guid>
      <description>&lt;p&gt;If you run a hosting business on WHMCS, selling cloud servers is an obvious next step. You don't need your own hardware for it: DigitalOcean already runs the servers, and your customers just want a VPS, a fair price and a control panel that works.&lt;/p&gt;

&lt;p&gt;The hard part is everything in between. Someone has to create the server when an order is paid, give the customer a way to manage it, resize it on upgrade, power it off when an invoice goes unpaid, and remove every last piece when the service ends, so nothing keeps billing your DigitalOcean account. Doing that by hand doesn't scale past a handful of customers.&lt;/p&gt;

&lt;p&gt;This post walks through how that flow works in WHMCS, and the decisions worth getting right whichever tool you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flow you want
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;A customer orders a server in your WHMCS and picks a region, a plan and an operating system.&lt;/li&gt;
&lt;li&gt;When the first payment arrives, WHMCS sets up the order and a Droplet is created on &lt;strong&gt;your&lt;/strong&gt; DigitalOcean account.&lt;/li&gt;
&lt;li&gt;The customer manages it from their client area, under your brand. They never need a DigitalOcean account.&lt;/li&gt;
&lt;li&gt;Upgrades, suspensions and cancellations in WHMCS change the Droplet to match.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;WHMCS bills your customers; DigitalOcean bills you. Your margin is the difference, and you set every price.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Connect DigitalOcean to WHMCS
&lt;/h2&gt;

&lt;p&gt;Create a DigitalOcean API token with read and write access to Droplets (Full Access is simplest). A read-only token will pass a connection test and then fail on the first real order, which is a confusing way to find out.&lt;/p&gt;

&lt;p&gt;In WHMCS the token belongs on a server record, stored encrypted. Your customers never see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Build checkout options from the live catalogue
&lt;/h2&gt;

&lt;p&gt;The tempting shortcut is to hard-code a few plans in WHMCS configurable options. It works until DigitalOcean adds a region or retires a size, and then your order form quietly drifts out of date.&lt;/p&gt;

&lt;p&gt;It's better to generate the options from DigitalOcean's live catalogue: region, server plan and operating system, plus the extras you want to sell, such as extra storage (Volumes), automated Backups and a dedicated reserved IP. Then price what you sell and hide the rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F697al5a322lyz3hcvpub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F697al5a322lyz3hcvpub.png" alt="The WHMCS product's settings, with checkout options generated from DigitalOcean's catalogue" width="800" height="1287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Give customers a real control panel
&lt;/h2&gt;

&lt;p&gt;A VPS customer expects to manage their own server. At minimum that means power controls, connection details and a way to recover from mistakes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;power on, shut down, reboot and rename;&lt;/li&gt;
&lt;li&gt;IP addresses, an SSH key generated for that server, and a ready-made SSH command;&lt;/li&gt;
&lt;li&gt;a firewall they can edit themselves (DigitalOcean's Cloud Firewalls work well per server);&lt;/li&gt;
&lt;li&gt;snapshots, restore and rebuild;&lt;/li&gt;
&lt;li&gt;CPU and bandwidth graphs, and a history of what happened.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6yyg7ari2r70nwqfkhfi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6yyg7ari2r70nwqfkhfi.png" alt="A customer's server page in the WHMCS client area" width="800" height="1112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F89r0sk8cy5mzpqpodv9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F89r0sk8cy5mzpqpodv9r.png" alt="Connection details with a downloadable key and an SSH command" width="560" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A browser console is worth offering too: a terminal in the client area means customers don't need an SSH client to fix a broken config at 2am.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Get the money details right
&lt;/h2&gt;

&lt;p&gt;These are the parts that cost hosts money when they're overlooked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A powered-off Droplet is still billed.&lt;/strong&gt; Suspending an unpaid service by powering the server off protects your customer's data, but DigitalOcean keeps charging you. Terminate services that stay unpaid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snapshots are billed per GB while they exist.&lt;/strong&gt; If customers can take snapshots, give them an allowance and sell extra slots, rather than letting storage grow unchecked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Termination must clean up everything.&lt;/strong&gt; Deleting the Droplet isn't enough. Its Volume, firewall, reserved IP and SSH keys should go too, and the clean-up should confirm with DigitalOcean that they're gone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7u0mo6tho1renqajuip.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7u0mo6tho1renqajuip.png" alt="Snapshots counted against the allowance the customer bought" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Mind the cron
&lt;/h2&gt;

&lt;p&gt;Creating a server is quick, but the follow-up work (recording its IPs, attaching storage, creating its firewall, carrying out a customer's reboot) usually runs on a schedule. On the standard WHMCS cron that's typically every five minutes, so a customer's reboot can sit waiting. A dedicated one-minute cron makes the panel feel responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The module we built for this
&lt;/h2&gt;

&lt;p&gt;We make PD DigitalOcean Droplets, a WHMCS module that does all of the above: options generated from DigitalOcean's live catalogue, the customer control panel (including the browser console), resizing through WHMCS upgrades, and a clean-up that checks with DigitalOcean when a service ends. It runs inside the free PD Modules panel, which also offers that one-minute cron.&lt;/p&gt;

&lt;p&gt;If you're setting this up, the &lt;a href="https://www.pdhosting.co.uk/modules/whmcs/pd-digitalocean-droplets/" rel="noopener noreferrer"&gt;module page&lt;/a&gt; has the details. Questions about selling DigitalOcean from WHMCS in general are welcome in the comments too.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PD Modules is made by Projektif Digital Ltd, the team behind PD Hosting.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>whmcs</category>
      <category>digitalocean</category>
      <category>hosting</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
