I’ve become a huge fan of Digital Ocean, to the point that the only WordPress hosting I’d recommend is either that (or very similar provider like Linode), or going with a managed WordPress host like WPEngine, Flywheel, Kinsta, Pressable, etc.
Shared hosting is nice and easy and safe, but there’s just too much cruft around to ever be considered close to a “WordPress optimized” environment. But it can be sufficient for some.
Price-wise and power-wise, you’re not going to get any more bang for your buck than something like Digital Ocean or Linode.
Plus, it opens up the option of a more advanced infrastructure, like a separate database server, load balancing, and the like.
With management and all that includes (updates, security, backups, etc.), the managed WP hosts I’ve listed above are a total bargain.
I have a bit of a different method of building a WordPress server, but for starters I’d add this to Devin’s tutorial:
Use another user other than root. At the very least install Fail2Ban to prevent bruteforce attacks. This tutorial from Digital Ocean covers those initial server setup basics. It’s an unmanaged provider so they’re generally not going to help you clean up an infection like a managed WP host, so taking basic precautions is a must.
I like to store my files in a private BitBucket repository, which eliminates the step of scp’ing your files over. All you need is a git clone. And there are other benefits of storing your code off-site in version control as well.
Not sure if EasyEngine includes a mail server, but outsourcing email accounts to something like Google Apps or Zohomail is a good idea. And transactional email to Mandrill (which has a super easy to use WordPress plugin, btw). I prefer to keep all email off the server to preserve as many resources as possible for web serving.
Using WP CLI is probably one of the favorite parts about running my own servers. A lot of the time I don’t even bother logging into WordPress, rather just managing stuff with WP CLI. The “wp db import filename.sql” command can replace the MySQL command line database import stuff in Devin’s tutorial.
Any other thoughts?
Oh and don’t forget to vote in the WPChat-official best WordPress hosting poll where “Custom setup on an unmanaged cloud server provider (Digital Ocean, Linode)” is currently in the lead.