This website runs on WordPress, and over the past several years has seen its hosting move from the DreamHost shared environment, to DreamPress managed hosting, to GoDaddy managed hosting to, finally, DigitalOcean. This article explains why.
Beginning with DreamHost
Probably close to 10 years ago, I signed up for an unlimited shared hosting account at DreamHost. At around $100 per year for unlimited websites, storage and bandwidth, it’s a great deal, and it’s in this environment that my website was first hosted.
Of course, the problem with shared hosting is that the server resources are shared. Although the use of caching plugins like WP Super Cache help keep the public side accessible, working in the WordPress CMS itself is very slow, and ultimately is what drove me to look for a better solution.
Moving on to DreamPress
Just around the time I seriously began investigating hosting alternatives, DreamHost announced their specialized managed solution for WordPress hosting called DreamPress, which consists of a pair of VPSs (virtual private servers)—one for the WordPress installation and one for the MySQL database—specially configured and “optimized” for running WordPress.
A benefit of going with DreamPress for existing DreamHost customers is the ability to move an existing WordPress install from the shared environment into DreamPress with a click of a button.
So for several months this site ran on DreamPress, and I enjoyed much better responsiveness in the CMS than when the site operated in the shared environment.
In the end, however, I became dissatisfied with DreamPress for the following reasons:
- $20 per month is about the limit of what I’m comfortable paying for the hosting of my personal website, and that’s what DreamPress costs. And in addition to my own website, I manage several other WordPress sites, and always felt it was a pity that I couldn’t somehow move those into my DreamPress environment as well, since for sure my little blog didn’t consume a fraction of the resources available in the DreamPress environment.
- DreamPress advertise a custom-built caching and resource scaling environment such that plugins like WP Super Cache aren’t needed. Well, the one time my website actually got linked to by someone popular, the site went down. I was out on a hike when I got the notification from the monitoring system, and by the time I got back home several hours later, I’d missed most of the traffic opportunity. When I got in touch with DreamHost support, they had to restart my environment, and never did figure out what had gone wrong. So the one time I actually needed the performance I was paying so much for, DreamPress didn’t deliver.
Moving on to GoDaddy
Once again researching managed WordPress hosting, I came across a number of articles that surprisingly pointed to GoDaddy Managed WordPress Hosting as one of the best services in terms of cost versus value. Although nobody would traditionally think of GoDaddy as a leading managed hosting provider, that changed with their acquisition of Media Temple back in 2013.
The GoDaddy economical offer was attractive — for $15 per month, I could host up to five WordPress sites. I signed up, and began the process of migrating this website, and four others that I manage, to GoDaddy.
GoDaddy’s migration wizard actually didn’t work successfully on any of my sites. Unlike DreamHost, GoDaddy don’t offer online chat-based support, but rather require that you call in, something I wasn’t too fond of. But credit where credit is due, GoDaddy’s telephone support provided excellent service in hand-migrating each of my sites into their hosting environment.
In terms of performance, I found GoDaddy’s environment to be much faster than DreamHost’s shared environment, but slightly slower than DreamPress—which made sense, since sites at GoDaddy live in a shared-resources environment. And like DreamPress, GoDaddy’s managed environment take care of caching and scaling, and so you’re not allowed to run your own caching plugins. And in fact, you’re not even allowed to perform your own update of the WordPress core; that’s handled by the “platform”.
When the second month at GoDaddy rolled around, I was surprised to see a charge of $25 appear on the credit card. When I called, the GoDaddy staff explained that the $15 sign-up offer is only valid for a many months as I committed to paying up front, which on a monthly billing plan is one. Upon the first “renewal”, the price reverts to the normal price of $25.
I said that if the onboarding process had made that clearer, I would have paid for a year in advance. The GoDaddy support person then “spoke with a manager”, and allowed me to go ahead and pre-pay for a year at the monthly cost of $15. She also said that after a year, I would automatically get moved to $25 per month, and that I should make a note to call in just prior to that renewal and ask for a continuation of my current price.
So for close to a year, this site and four others I manage have been hosted at GoDaddy and for the most part I’ve been satisfied. The one negative, which turned out to be enough to keep my eyes open for alternatives, was that in the GoDaddy environment, working in the WordPress CMS was just slow enough that it frequently caught my attention.
Settling on DigitalOcean
Going through my RSS feeds at lunch one day, I read an article by Don Melton (creator of Safari and WebKit at Apple) talking about how just after having moved his blog to WordPress an article of his got linked to by John Gruber, Rene Ritchie and iMore. As a result, it received nearly 100,000 page requests in a day, and handled them all without breaking a sweat.
He pointed to two reasons for being able to handle this traffic:
- Running his site in a VPS environment at DreamHost
- Running, of course, the WP Super Cache plugin
The first time I’d come across the idea of hosting WordPress in a VPS was when my friend Michael Tsai told me that he hosts his own blog in a VPS at DreamHost. But I discounted the idea given that operating a VPS requires knowing how to manage Unix servers using the command line — things like configuring the Apache web server, MySQL database, applying security patches, etc. I’d had enough experience tinkering with that stuff in Mac OS X to know that my level of knowledge was just enough to get me in trouble.
A few years back, in 2014, my office mate experimented with the hosting of a WordPress site in a $5-per-month droplet at DigitalOcean. He’d been very impressed with both the low cost and high performance, but at the end of the day a DigitalOcean droplet is a VPS, and he ended up spending so much time with things like enabling swap spaces that he finally also moved to a provider like Media Temple.
But since that was a few years ago, reading Don’s article prompted me to check whether the situation of hosting WordPress sites at DigitalOcean had improved since my colleague’s experience.
Turns out, it has.
There is now a service available called ServerPilot (and if you signup through that link, I’ll get a little tip!) that handles most of one’s server-management needs when hosting WordPress in DigitalOcean droplets, including one-click installations of WordPress, setup and configuration of Apache and MySQL, and automatic server security patches when necessary. The basis service is free. A $10 per month paid upgrade gives you access to stats and some other services that, currently, I don’t really need.
I decided to give it a try:
- I signed up for an account with DigitalOcean, and spun up a $10/month droplet with 1GB RAM, 30GB SSD and 1 CPU. This is the minimum size they recommend for running WordPress. It’s important to note that if you’re going to use ServerPilot, you should not use DigitalOcean’s one-click WordPress installer
- I signed up for an account with ServerPilot, and let it connect to my DigitalOcean droplet. The ServerPilot setup process modifies the terminal login screen to remind you that it’s now managing your server (and you probably shouldn’t).
- I then started ServerPilot’s cleanly-designed Create an App workflow to create my first WordPress site in my DigitalOcean droplet. I used the domain new.dafacto.com, having setup that hostname in my DNS at CloudFlare. Within moments I could login to the new WordPress install at new.dafacto.com. As part of the creation process, ServerPilot creates a non-root user for you to use to SFTP connect to your site, if ever necessary.
- I use a plugin called UpdraftPlus to automate backups of my WordPress sites, storing the backup files at Amazon S3. I used the UpdraftPlus Migrator paid add-on to “push” a backup of all the data—themes, plugins, database, and all files in wp-content—from dafacto.com to new.dafacto.com.
- In new.dafacto.com, I used UpdraftPlus to then restore its newly-received backup data, and was careful to choose the “replace domain name” option so that after restoration, the site would still understand itself to be new.dafacto.com, and not dafacto.com.
- Once I confirmed that everything was running properly at new.dafacto.com, I used ServerPilot to add dafacto.com and www.dafacto.com as domains in my WordPress “app”, and then I switched the DNS for dafacto.com to point to the DigitalOcean droplet.
From creating the DigitalOcean droplet, to setting up a WordPress site on it using ServerPilot, to migrating my website, the total amount of time involved was about an hour. And that’s only because I was doing things extremely carefully.
With my entire site migrated, I logged into the WordPress CMS and was delighted to find that it absolutely screams. It’s even faster than what I remember at DreamPress. And once again using the WP Super Cache plugin, the public side of things feels super snappy as well. (Maybe somebody like John Gruber could link to this article, so I can really check that out properly.)
And of course, what’s great about this setup is that the DigitalOcean droplet is just a VPS—which means I can install as many WordPress sites on it as I wish! (I’ve read, however, that this is precisely the reason one should not use DigitalOcean’s WordPress installer, as apparently that limits the droplet to a single install.)
Seeing how fast dafacto.com was running, I then migrated the Money for Something over as well. I figure that with caching, the server should easily handle the load of both sites, and I’ll only ever work in one CMS at a time. That second migration took only perhaps 20 minutes in total.
With both sites publicly running for a while in the single droplet, I checked in on the stats in ServerPilot and DigitalOcean. The memory usage has remained very stable at about 30%, and the CPU seems hardly used at all. (And as it happens, my 2011 blog article about The Big Short has been getting a lot of traffic since the release of the movie.)
While ServerPilot handles regular security patches automatically, I was initially a little concerned about what I’ll do when major upgrades are needed to the OS or components like PHP. For that, instead of hiring a Linux admin, I think I’ll just spin up a new droplet and move my sites over! Heck, maybe I’ll even do that one a year just to be on the latest stack.
What’s also nice about this setup is that if the site goes down again when I’m on a hike, I can simply fire up an iOS app and reboot the whole server.
So at long last, I seem to have found what I’ve always been looking for — a way to host WordPress that’s fast, economical, doesn’t limit me to a single site and doesn’t require me to do any Unix system administration.