Setting up a blog (Part 1): Background

Over the years I've architected, developed and rolled out a number of large scale deployments, but having never built out anything for personal use I figured it was time to get something hosted on https://abovethewater.co.uk.

This is the beginning of a series to document the steps needed to get a self hosted blog up and running.
It's a long one as it documents a bit of research.

TL;DR

We're going to build out a self hosted Ghost blog on a Digital Ocean droplet

The Constraints

This is a personal project. I don't intend to make money from it, but rather use it as a showcase.
That said, I don't want to build a financial liability for myself either, so I have come up with a list of constraints that I will try to adhere to throughout.

  • Cost - It doesn't have to be free, but combined costs need to be reasonable. Let's start with a target of £20 a month, and see how reasonable that ends up.
  • Customisation - I've had an idea of what I want the end product to look like for a while now. To allow me to achieve this, any components I use need to be visually customisable.
  • Modification - Being technically capable, I want to ensure that if something doesn't work exactly the way I want it to then I should be able to modify it to meet my needs. This brings me onto the next point..
  • Open Source - I'm a huge fan of Open Source. I'll write about it at length one day I'm sure, but for now, let's just say I appreciate the hard work done by many, and where possible want to give back the best way I can.
  • Security - Whilst it may only be a personal project, it is my name on the line. I'd rather not have the site defaced or host malicious content. Any solution must be secure and allow for upgrades over time.

Options for the blog

Blogging has been happening on the web for years, so there are no shortage of tools and platforms available. Below is a small subset of platforms that I considered for this blog.

WordPress

For years the defacto blogging platform has been WordPress; Used by millions daily, and with its vast array of themes and plugins, and numerous options around hosting it would appear to be the obvious choice.

Quick and easy to set up, and with various pricing points available, WordPress gets you up and running quite quickly. Numerous themes exist, from free to prohibitively expensive. Updates are published regularly and be applied automatically.

However, WordPress can be slow. Quite often it's a third party plugin that is the culprit, but it takes time to get to the bottom of.

The quality of the third party plugins varies greatly. Free plugins generally come with some associated cost. Whether it's ads, traffic logging, referrals etc, you can never be sure what is actually being installed without going through each plugin line by line. Paid plugins are no better; I've had third party devs ask for root access to the WordPress installation to allow them to debug issues seen with the plugin. More than once.

Security can be an issue. Due to the sheer number of people using WordPress it is a natural target. Exploits are found quite regularly, with sites such as https://wpvulndb.com/ available to track them; unless you are using the latest version at all times you are considered susceptible.

I have set up and used WordPress previously, and whilst it did what it needed at the time, once I got to a certain point with it I decided I probably wouldn't use it again.

Svbtle

svbtle burst onto the scene with its clean look and fast performance, inspiring a new generation of blogging platforms. Initially way to insular, with no way to get access outside of the developer's network, it is now open to all.
Sadly in the interim period it missed the boat, and others took what could have been its crown.

Medium

Launching just a few months later, Medium took the best bits of svbtle and made them available to everyone.
Clean design puts reading content first, and with fast loading pages it is the blogging platform of choice for many.
The search could well stop here, but unfortunately medium screams of lock in. You can't customise your layout, you can't self host, and it doesn't really showcase anything other than the ability to write (subjectively) good prose.
Due to its size, Medium enjoys good visibility in Search Engine rankings, so it is quite often used to cross post blog content.
Maybe we'll come back to that.

Ghost

Sticking with the modern clean look, Ghost is a "publishing platform for professional bloggers".
Whilst I don't quite fit into that category, Ghost is a very open, welcoming platform for developers.

All code is open source, which ticks a big box, and whilst a hosted version exists, one click installs are available on various PAAS providers.

The open nature of the platform, along with theme availability, and the general good feedback I've seen whilst researching these blogging platforms, put Ghost as my bogging engine of choice.

GitHub Pages

GitHub Pages are a great way to host static content. All scaling and security issues are handled by GitHub, and there are numerous guides available that illustrate how to get up and running on them.

Using the likes of Jekyll, which builds a static site from source, it doesn't take long at all to set up.

Themes exist for Jekyll, and this could be a contender, however Jekyll simply takes the markdown and generates the site; it does not provide an editor.
Whilst not entirely averse to using Sublime Text to write blog posts, a proper editor, including management of entries and the site as a whole, is likely to encourage me to actually post something.

Wheat

A basic Markdown blogging engine, Wheat provides the functionality needed to simply get content hosted. However, it hasn't received much love in years, and pushes a lot of the design detail onto the user, and as such is not such an out of the box solution as I am looking for.

Why mention it? Back in the day I built a fork on GitHub called Chaff; that took the essence of Wheat and added the bits that were left out. Namely a plugin architecture.

Options for the hosting

Whilst using a cloud hosted solution might make life simpler in the short term, it does limit the learning potential of this exercise, so we will go for a self hosted solution. A few of the options are below.

Heroku

I'm a huge fan of Heroku. Having used it for numerous prototype projects, I can attest that its strength is in its simplicity.

Providing an interface to easily install apps, code is pushed via git to the heroku VM.
However, Heroku recently changed their pricing structure and no longer provide the same free plan. Historically a web app could be set to run 24/7, and would shut down after a period of inactivity, to be restarted on the next connection. Add in something likely Uptime Robot and your site was always available. Nowadays you can run for pretty much half the month before paying.

Prices aren't extortionate, but it's a good opportunity to have a look around.

OpenShift

Again, I'm a huge fan of OpenShift, having used it extensively, even for commercial products.

The free plan provides three "gears" which can be assigned to cartridges. A basic blog would take one small gear, so ideal.
Imagine my horror then, that when I tried to set up an account specific for this site, they are no longer taking new signups.

Users can sign up for a dev preview of their new platform, but you get 30 days to try it out, after which everything is deleted.
Doesn't bode well for any of my apps on the old platform, and no real timeframe on when the new platform is ready for use. Time to look around again then.

Digital Ocean

I've heard great things about Digital Ocean. Cheap and reliable, with a one click app install for Ghost. Time to learn something new. Sold.

I'm aware that Digital Ocean do a referral program, which gives new users $10 credit (two months of a single instance), and a kickback to the referrer once a certain amount has been spent on the platform. I don't have a referral, but a quick google found a code, and some lucky soul is going to get that kick back eventually.

I've included the referral in links to DO, every little helps, and all that, but explicitly it is https://www.digitalocean.com/?refcode=d8c1a52327fe if you simply want an initial $10.