Blog v2: Returning as a Ghost 👻

Rebooting my blogging adventures.

Blog v2: Returning as a Ghost 👻

My blogging adventure began almost 4 years ago when I wrote my own blog website from scratch and managed to finish a grand total of 2 blog posts. Fast forward to today, and I am beginning to focus on writing again.

Specifically I am choosing to focus on writing content rather that writing software. A combination of building and running my own blog, and learning on the job has filled the software learning goal I originally set out to achieve, so now I can focus on my writing goals.

In order to focus on my writing, I have chosen to use the Ghost blogging platform, and in this post I am going to focus on the Why and How.

To build or not?

The first consideration I had when deciding to reboot my blog was whether to fix / rebuild my existing blog or to use software built by someone else.

Building your own blog gives you the opportunity to learn lots about building and running software, as well as always being customised to how you want to use the platform. It also means that if you are missing a feature you can just build it yourself. These are pretty compelling reasons, and even in the few weeks that I've been using Ghost, there are already some features that I notice are missing or are not done quite the way I'd like.

On the other hand, building your own blog means that you are responsible for everything, and this costs time. If a feature you want doesn't exist, you have to spend the time building it yourself. If a bug exists, it will continue to exist until you spend the time to fix it. Finally a big one is, that in building the software, you will eventually end up also building tooling for the whole software development flow (e.g. building, testing, deploying).

These are all worthwhile learning experiences and I do not regret spending any time on them, however it means that I only ended up ever publishing a total of 2 blog posts.

Two.

That includes me doing a welcome post and explaining the who, what, when, why, and how.

Given the amount of spare time I currently have, and the knowledge I am able to gain through my work, it no longer makes sense for me to choose writing my own website over using an existing blogging platform.

Choosing a platform

Before embarking on any kind of project, it is important to establish what your requirements are so that are able to stay focused and not get distracted by the shiny sales techniques. My major criteria were as follows:

Hosted or minimal setup options available. I've already emphasised that I don't wish to spend much time maintaining my blog. Hosted options are a natural choice for this, and probably where I spent a lot of my time researching. As hosted platforms can be pretty expensive, an acceptable alternative is using a self-hosted but minimal setup platform.

Very cheap or Free. Although my time is valuable to me, my blog does not generate any income, I'm not exactly made of money, and I'm unlikely to change my platform in the near future (and any move would have it's own associated migration cost). Although I'm prepared to pay for a platform (I already pay for my own domain names and hosting), I try to keep costs down, so any provider needs to be cheap (if not free).

Able to use my own domain. Realistically this blog will form part of my "personal brand", and I would rather not have it tied to someone else's. This immediately affects using platforms such as Medium, LinkedIn, or the blog of whatever company I work for.

Edit / manage from anywhere. When I find the time / inspiration to work on my blog, I want to actually do so, no matter where I am. I don't want to worry about having to setup a repository, having my favorite text editor around, or forgetting that I don't have the SSH/API keys I need to be able to publish changes. This removes site generators such as these, or platforms that work using them such as GitHub Pages or hosting static websites on S3. There is of course a trade off here in that I am mostly locking myself into requiring an internet connection, which may not be possible if I am travelling (the 8 hour flight to our Manila office is a good time for writing). In these situations I am happy to make do with what I have and moving the content to the proper platform when I do have internet again.

Good security practices. I want my readers to be safe when reading my blog. This means making sure that the platform is not vulnerable to common attacks like XSS, using HTTPS so that traffic can't be snooped or tampered, and ensuring that I can't become easily part of a larger threat such at the 20,000 strong WordPress Botnet. My now deprecated blog didn't meet these requirements and the effort required to fix it was one of the reasons that I chose to move away.

Not WordPress. This may be seem unfair, but given the sheer volume of security vulnerabilities that WordPress has, it's important to call it out. I would only consider WordPress if it was the best platform and it had a acceptably priced hosted  version. Managing it myself would offset any time savings and too easily fall out of the "Good security practices" requirement.

Ghost

Over the years I've done a fair amount of reading, so by the time it came to choosing a platform I already had my eye on Ghost.

Ghost is a fully open source, adaptable platform for building and running a modern online publication. We power blogs, magazines and journalists from Zappos to Sky News.

Troy Hunt, creator of Have I Been Pwned, has used Ghost for his blog since 2016, something which gives a lot of credibility to the platform. Troy has already written twice about why he likes the platform, and honestly many of the reasons he cites I find to be quite compelling. If you're currently also investigating blog platforms, I strongly recommend reading those two articles.

Checking in on the rest of Ghost's features it definitely meets most of my requirements:

Hosted or minimal setup options available. Ghost is not easily self-hosted out of the box. Although there exists a docker container for it, its not really production ready. There are a number of hosting options, meaning that this requirement is met.

Very cheap or Free. Ghost(Pro) is the official managed hosting by the creators of Ghost, however it comes in at a pricey $29 USD / month. This doesn't meet my requirements, however when checking on alternatives I discovered that Digital Ocean offers a 1-click install option. Further research suggested that the $5 USD / month option would be adequate for at least a basic blog. This is as much as I was spending on my old blog (also hosted at Digital Ocean), making this a reasonable option.

Able to use my own domain. All the hosted options I found offered the use of  a customer domain. Self hosting requires setting up the domain yourself.

Edit / manage from anywhere. Ghost has its management interface online, letting you edit online. In practice it's pretty good and auto-saves as you go. They also offer native apps that will connect to your website but also work offline, removing the whole "online editing is hard when in a plane" problem.

Good security practices. Although most hosting providers will provide HTTPS with Ghost, it actually has the ability to fetch Lets Encrypt (free HTTPS certificates) out of the box. The Ghost developers are committed to producing a secure application and adhere to pretty good practices.

Not WordPress. ✔️

At this point you may be wondering if I had evaluated many other websites in depth. The answer is no. There's a couple of reasons for this. Firstly, I've had a few experiences with full blow CMS systems such as Drupal and WordPress before, and honestly, I'd rather use a platform that is dedicated to blogging rather than dedicated to being everything. Using a dedicated tool can be pretty advantageous when it comes to things like ease of use, speed, and security. Secondly, I'm a believer in doing a good enough search rather than an exhaustive search. By the time I had investigated Ghost, I had already had enough experience or had thought through enough tooling to be satisfied that I had done my due diligence for finding a good tool without spending huge amounts of time.

Actual Setup

Software: Ghost

Hosting: Digital Ocean using their 1-click installer.
Server is their $5 USD / month variety (1GB RAM, 1 vCPU, 25 GB SSD, 1 TB transfer).
If you are interesting in using Digital Ocean, you can use my referral link to receive $100 USD free credit for use with 60 days.

Domain Name: namecheap

Other: I use Amazon Web Services for a variety of other tasks such as DNS (Route 53) and sending email (SES). The use of these services are pretty cheap, and lets me to continue to learn about Amazon's offerings.

I'll note that I did need to edit /var/www/ghost/config.production.json to change the server port to 2368, as for some reason it did not match what the rest of the server was configured to use. If your server stops working and returns HTTP 503 errors, this may be the cause.