A little over a month ago, for reasons that I suppose everyone knows, I decided to “test” Virtualmin as a replacement for cPanel. It wasn’t so much the cPanel price increase as the way it was implemented that drove my decision. I lost faith in the company’s ethics.
So I leased a server, installed a fresh CentOS 7 on it, updated it, and installed Virtualmin. I also created a dummy site on a domain that I registered because the name rolls off the tongue nicely. (Seriously.) I then moved a monetized (barely) site that I own over from the cPanel server. And then one by one, I migrated the rest of my personally-owned sites with the exception of two whose domains are hostnames for other servers; so now my Virtualmin “testing” server is in full-time revenue service and generating about a third of my income.
All in all, the process has been painless and the learning curve shallow. I’ve encountered several quirks, but only three that I can fairly call bugs, all of which have easy workarounds:
-
Sometimes, on a migrated site, Virtualmin creates a duplicate SPF entry. But only sometimes. When it happens, the solution is to delete the duplicate.
-
On sites with unusual DNS entries (for example, on one site that had sub.domain.tld pointed to a remote webcam’s IP address), the unusual settings may not migrate with the site (using the same example, sub.domain.tld was pointed to the new server’s shared IP rather than the webcam’s IP). The solution is to copy the DNS before migrating and fix any incorrect entries.
In fairness, I’ve also had this happen when migrating sites from one cPanel server to another. In fact, I’d guesstimate that more than half of the cPanel -> cPanel migrations I’ve done over the past ~20 years have hosed DNS in some way or another – and usually far more seriously than Virtualmin did.
- cPanel separates the AWStats data for http and https, with the latter being stored in a non-standard location where Virtualmin doesn’t look during the migration. If the site previously was forced to https, then the solution is just to copy the files into the standard location. If the traffic was mixed (either all the time or just during the month when the site was first forced to https), the log files can be merged using various CLI tools, if it’s worth the bother.
Those are really the only quirks that I would rate serious enough to be called “bugs.” So all in all, I’m overjoyed. I honestly expected a lot worse. I’d rate the cPanel -> Virtualmin as an “A” because the bugs were so few, so minor, and so easily fixed. Stomp them, and I’ll make it an A+.
Now, as for quirks…
-
cPanel used non-standard paths to PHP (and pretty much everything else, truth be told). Most of these are brilliantly sorted out by the migration script. But PHP paths in cron jobs are not. They have to be fixed manually. I won’t call that a “bug” because it’s something where there are options involved, and I would rather make those decisions myself than have the machine guess at them. However, it would be nice if the migration routine notified the user that the paths are invalid when the cron jobs are imported.
-
On a freshly-migrated site, it’s a good idea to have a cup of coffee between changing the nameservers at the registrar and requesting the SSL cert from Let’s Encrypt. If it hasn’t propagated yet, Let’s Encrypt will reject the request. That’s not a bug. It’s really not even a quirk. Let’s Encrypt waits until the change has been made at the registrar and has propagated at least as far as whatever DNS server they use. So give it 10 or 15 minutes. Too many failures in too short a time will put you in Let’s Encrypt’s penalty box for a while.
-
If you want to use KernelCare, you have to change the update setting in Webmin / Virtualmin to “Notify Only,” then manually run all the updates except the kernel updates (for example, on CentOS,
yum update --exclude=kernel*
).
And that’s about it. All in all, it’s been a wonderfully painless experience. Knowing how many things cPanel does in, shall we say, “unorthodox” ways, it’s actually very impressive how well Virtualmin sorts them out and how little manual post-migration tweaking is needed. I’m impressed.