I ran Plesk on my VPS for years. It hosts this blog and a handful of other sites: several WordPress installs, a Laravel app with queue workers, and a couple of static sites. Plesk was never the problem. It’s polished, it mostly just works, and its WordPress Toolkit is genuinely good.
The problem was the licence. Plesk is billed monthly per server, and the price has crept up over the last few years. On a mid-range VPS hosting a few sites, the panel licence had become one of the biggest lines on the monthly bill, sometimes rivalling the server itself. I was paying for mail hosting, DNS hosting, a reseller model, an extension marketplace and a dozen features I’d switched off years ago.
So I went looking for Plesk alternatives, specifically free and open-source ones. This post covers what I considered, what each option is actually good at, and why I landed on CloudPanel. The companion post, Migrating from Plesk to CloudPanel on a Single VPS With Zero Downtime, is the hands-on guide to doing the move in place, on the same server, without taking the sites offline.
First: work out what you actually use
Before comparing panels, list what Plesk does for you, not what it can do. For me that list was short:
- nginx in front of PHP-FPM, with several PHP versions side by side
- per-site system users, so one compromised site can’t read another’s files
- MariaDB/MySQL databases per site
- Let’s Encrypt certificates that renew themselves
- a firewall and fail2ban
- the odd cron job and a supervisor-managed queue worker for a Laravel app
- occasionally, custom nginx directives and headers per site
What I didn’t need is just as important. Mail is on Google Workspace, and DNS is on Cloudflare, which also proxies almost everything. That rules nothing out, but it means I didn’t have to weigh mail and DNS features at all. If you host mail on the box, your shortlist will look different.
The shortlist
CloudPanel
CloudPanel is a free, lightweight control panel built specifically around nginx and PHP-FPM, with MySQL or MariaDB, Redis, Varnish and multiple PHP versions (7.1 through 8.5 at the time of writing). It’s aimed squarely at people hosting PHP applications on a single server.
What I liked:
- nginx-native. No Apache behind nginx, so fewer moving parts and lower memory use.
- Vhost templates for WordPress, Laravel, Symfony, Magento, static sites, Node.js, Python and reverse proxies. The generated configs are sensible, and you can edit each site’s vhost directly.
- A usable CLI (
clpctl) for creating sites and databases, importing dumps, installing certificates and managing users. That makes it scriptable, which mattered a lot for the migration. - Per-site users and PHP-FPM pools, built-in Let’s Encrypt with automatic renewal, ufw integration, fail2ban, basic auth for the admin panel, and a “Cloudflare only” toggle per site.
- It’s light. After the move the whole server sat at about a third of the disk and a fraction of the RAM Plesk used.
What to know going in:
- It’s free, not open source. The application code is shipped obfuscated. For me that’s an acceptable trade for a free panel, but if “open source” is a hard requirement, look at HestiaCP or ISPConfig below.
- No mail and no DNS hosting. That’s by design.
- nginx only. Anything you relied on in
.htaccessor Apachevhost.confhas to be translated to nginx. Plan for this; it’s where most of my migration effort went. - One server per install. There’s no multi-server clustering.
- Its installer expects a clean machine. It refuses to run if ports 80, 443 or 3306 are in use, and it takes over the apt configuration. You can’t just install it next to Plesk, which is exactly what the migration guide works around.
HestiaCP
HestiaCP is a community fork of the old VestaCP, released under the GPL. It’s the closest thing to a free, open-source, “classic” hosting panel: web (nginx, optionally with Apache), mail (Exim/Dovecot), DNS (Bind), databases, multiple PHP versions, Let’s Encrypt, firewall and fail2ban, with a clean UI and an active community.
If you host mail on the server and want everything in one open-source panel, HestiaCP is probably the one to look at first. It supports fewer distributions than some (Debian and Ubuntu), and like any panel it wants a fresh server.
CyberPanel
CyberPanel is free and open source, built on OpenLiteSpeed (or LiteSpeed Enterprise, if you pay). LiteSpeed is fast, it has its own excellent LSCache plugin for WordPress, and CyberPanel bundles mail, DNS, backups and one-click installs.
Two reasons I didn’t pick it. First, OpenLiteSpeed isn’t nginx, so every site’s config would still need translating, just into a different dialect. Second, in late 2024 critical pre-authentication vulnerabilities in CyberPanel were exploited at scale, with tens of thousands of servers hit by ransomware in a matter of days. It has been patched, but for a panel that holds the keys to every site on the box, that history counts.
ISPConfig
ISPConfig is a mature open-source (BSD-licensed) panel that can manage multiple servers from one interface: web, mail, DNS and database servers, each on its own box if you like. It’s powerful and has been around for well over a decade, but it’s also the most “sysadmin” of the bunch. The UI is dated and the setup takes real time. It’s great if you’re running a small hosting operation, but overkill for one VPS.
Webmin / Virtualmin
Webmin is the venerable, open-source, do-everything system administration UI, and Virtualmin layers virtual hosting on top of it (Virtualmin GPL is free; Virtualmin Pro is paid). It can manage almost anything on a Linux box, which is both its strength and its weakness: the interface is dense, and it’s easy to end up with a configuration only Virtualmin understands.
aaPanel
aaPanel is the international edition of a very popular free panel from China, with one-click stacks, an app store and a friendly UI. It’s widely used, but parts of it aren’t open, the plugin ecosystem pulls you towards paid add-ons, and it has had its own serious security issues over the years. It wasn’t for me on a production box.
Froxlor and KeyHelp
Two smaller options worth knowing about. Froxlor is a lightweight, open-source (GPL) panel aimed at small hosting providers. KeyHelp is a free, polished German panel, but it’s closed source.
The PaaS route: Coolify, Dokploy, CapRover, Dokku
If your sites are (or could become) containers, a self-hosted PaaS is a different and very modern answer. Coolify is the big one: open source, Docker-based, with git-push deploys, automatic TLS and one-click databases, essentially a self-hosted Heroku or Netlify. Dokploy, CapRover and Dokku occupy similar ground.
They’re excellent for apps, less so for a pile of traditional WordPress sites that you’d have to containerise first. For me, that was more change than I wanted in one move.
No panel at all
The zero-licence, zero-lock-in option is to run nginx, PHP-FPM, MariaDB, certbot, ufw and fail2ban yourself, ideally with the whole thing described in Ansible so you can rebuild the server from scratch. You get complete control and there’s nothing to break during a panel upgrade.
The cost is your time: every new site, PHP version, certificate or database user is a job for you rather than a form. If you enjoy that and have only a few sites, it’s a perfectly good answer. I’ve done it before. This time I wanted something between that and Plesk.
Cheaper paid options (for completeness)
If you’d rather keep paying but pay less: DirectAdmin is a traditional panel that’s generally much cheaper than Plesk or cPanel. Hosted server managers like Ploi, RunCloud, SpinupWP, GridPane and Laravel Forge manage a server you own over SSH for a flat monthly fee. cPanel is the one the others compare themselves to on price, and not favourably.
Side-by-side
| Panel | Cost / licence | Web stack | Mail & DNS | Best for |
|---|---|---|---|---|
| CloudPanel | Free (not open source) | nginx + PHP-FPM | No | PHP apps and WordPress on one server |
| HestiaCP | Free, GPL | nginx (+ optional Apache) | Yes | All-in-one open-source hosting, including mail |
| CyberPanel | Free, open source (paid LiteSpeed optional) | OpenLiteSpeed | Yes | WordPress with LSCache |
| ISPConfig | Free, BSD | nginx or Apache | Yes | Multi-server setups |
| Virtualmin GPL | Free, GPL (Pro is paid) | Apache or nginx | Yes | Admins who want every knob |
| aaPanel | Free (partly closed) | nginx / Apache / OLS | Yes | Quick one-click stacks |
| Coolify and friends | Free, open source | Docker + Traefik/Caddy | No | Containerised apps |
| No panel | Free | Whatever you build | Whatever you build | Small, stable setups; Ansible fans |
Why I chose CloudPanel
It matched my actual list almost exactly. It’s nginx and PHP-FPM with multiple PHP versions, per-site users, Let’s Encrypt, ufw and fail2ban, Redis and Varnish, a Laravel vhost template, and a scriptable CLI. Nothing I needed was missing, and nothing I didn’t need was running.
Not being open source was the one real drawback. I weighed it against HestiaCP (open source, but built around features I don’t use) and the no-panel route (more ongoing work). For a handful of sites on one box, CloudPanel was the best fit, and at a licence cost of zero.
It isn’t a drop-in replacement, though. The Plesk → CloudPanel move surfaced a list of things Plesk had been quietly doing for me:
- Apache happily falling back to
index.phpfor “missing” files, which a Laravel app relied on without anyone noticing - security headers set in Apache config
- a long list of old
Redirect 301rules in.htaccess - certificates that renewed themselves
- a queue worker defined in Plesk’s supervisor config
- deployments via Plesk’s Git extension
Every one of those needed a deliberate replacement.
The other catch was practical: I don’t have a second server to migrate to, and these are production sites. So the whole migration had to happen in place, on the same VPS, with the sites staying up throughout. The installer’s clean-machine requirement makes that impossible the obvious way. The trick that made it work was running CloudPanel in an LXC container on the same host as a staging copy, cutting traffic over to it, removing Plesk, and then installing CloudPanel natively and moving everything back.
That whole process, with every command I ran, is in the companion post: Migrating from Plesk to CloudPanel on a Single VPS With Zero Downtime.
Quick advice if you’re choosing
- Host mail on the server? Start with HestiaCP.
- Mostly WordPress plus PHP apps, with mail and DNS elsewhere? CloudPanel.
- Several servers? ISPConfig.
- Everything already in containers? Coolify.
- Three stable sites and you like config files? No panel, plus Ansible.
- Want to keep paying, just less? DirectAdmin, or a hosted manager like Ploi or RunCloud.
Whichever you pick, do the “what do I actually use” list first. It’s the difference between a migration that goes smoothly and one where you find out what the old panel was doing for you after the sites break.
If you’re tightening up the WordPress side while you’re at it, my WordPress security notes are a good companion. For the Laravel side, the PHP & Laravel hub collects the production-practice posts.

Leave a Reply
You must be logged in to post a comment.