After finding inspiration from Matthew Jones's blog posts Developers, Blog More and Own Your Words and Everything It Takes to Self-Host a Ghost Blog with DigitalOcean I finally took the leap to set up this blog.
This 1st post describes my experience setting up a Ghost blog on DigitalOcean following the steps in Matthew's original post from 2017.
1. Buy a domain name
iwantmyname, recommended by Matthew, looks a decent option with a simple sign up process. They are however, more expensive than a number of competitors and after reading more reviews I settled on namecheap.
2. Get remote access tools
While on the PuTTY website to download their telnet client (used to access remote servers using telnet and SSH) I saw the link to Bitvise, which I've used in the past to access remote servers over SSH.The Bitvise client is free (paid version with support is available) and provides terminal (command line), SSH, SFTP and RDP features.
3. Get hosting space
Per Matthew's recommendation I went with DigitalOcean. Their cheapest plan it still $5/month (as an aside: both namecheap and DigitalOcean pricing is in USD - I could not easily find pricing in AUD. namecheap did show AUD pricing on checkout, but DigitalOcean billed in USD).
4. Test access to your server
To access your server, or in DigitalOcean speak "Droplet", you can either open the console from DigitalOcean's dashboard, or use the Bitvise client - which I found to provide a better experience. Using the latter, however, assumes you have the root user's password, so the 1st time you access your Droplet you'll need to log in using DigitalOcean's console and set the root password.
I did not set up a non-root account at this point - that was done by the ghost installation in a subsequent step.
5. Add your Domain to DigitalOcean
Nothing has changed here since Matthew's post - use the Networking tab on DigitalOcean's site to add your domain.
6. Change your nameservers with your registrar
It took less than an hour before I could ping/nslookup the domain.
8. Prepare server and 9. Install Ghost
This was the biggest departure from Matthew's experience. DigitalOcean provides a Ghost One-Click Application install hosted on Ubuntu 18.04. No need to manually install all the requirements. This made it trivially easy to install, though I did make the mistake of installing Ghost before the nameserver switch from namecheap to DigitalOcean had completed. Not 100% sure if this was the cause, but after the DNS propagation was complete I could resolve the DNS but not run the Ghost site. Rebuilding the Droplet (server) from the DigitalOcean > Droplets > Destroy > Rebuild Droplet options fixed this.
10. Pick a theme
This was painful. There is a market place with paid and free themes and numerous themes on Github, but most that I tried were not compatible with the latest version of Ghost (2.18), including some that were compatible with version 2.10 (you can work through the Ghost log files and try to fix all the errors to make it compatible with the current version). I eventually stumbled upon The Shell theme which looks nice enough but I haven't looked at it's syntax highlighting capabilities yet.
11. Add Cloudflare and 12. Wait
No issues here, other than waiting a bit for DNS to propagate after changing nameserver to Cloudflare. They have a great on-boarding experience, walking you through the steps to change the nameserver from DigitalOcean.
13. Install Google Analytics
I haven't done this yet and will likely first see what the alternatives are as I am weaning myself of Google products.
14. Add Disqus
Haven't decided whether I'll do this off the bat, or wait until I decide whether the blog will be mostly for my own consumption (a place to record stuff I can come back to), or whether I'll write for a wider audience and put in the effort that requires.
15. Submit to Google Search Console
16. Write Great Content!
This will be a challenge. Even writing up this simple post piggy backing off Matthew's has made me appreciate how much time and effort blogging requires. Maybe that's the payoff - forcing yourself to put your thoughts in sufficient order that you can communicate them.