Captain Codeman Captain Codeman

New BlogServe Blog Engine

Why I decided to write my own

Contents

Introduction

Because everyone should write a blog engine at some point in their life …

This is the story of how I went from WordPress, to Jekyll, to Hugo, thought about going back to WordPress, briefly considered Ghost but ultimately decided to write my own multi-tenanted blog engine instead, powered by Google Cloud, Go and Polymer.

A few years ago I switched from WordPress to Jekyll so that I could host my blog on GitHub.

It was successful in that I was no longer using WordPress, but I wasn’t an avid user of Ruby and installing any of it just to run a blog was a nuisance.

I looked around for other options and, since switching to Go as a programming language, came across Hugo. One of the benefits of Go is that it produces a single binary so deployment is easy and means you don’t need to know any Go to use Hugo, but I like to use software that I can maintain and modify if I need to.

That worked for a while, but I found I blogged less and less. It was still just too much effort. Sure, if I was sat at my development machine with the blog and git installed it was great, but then I tended to be working. Many times I just wanted to make some quick additions or changes to an existing article but couldn’t do it from another machine, tablet or phone.

So I was gradually being drawn back to the world of online database-driven blog engines. Also pushing me were friends wanting to setup blogs and, well, Jekyll and Hugo are both great but they are by techies and for techies. Trying to show someone how to publish their site and maintain the blog just didn’t work.

But having looked around, I’m kind of astonished how expensive blogs are. Some, like WordPress, want you to pay and they still get to put ads on your site. If you want to put your own ads up you have to still pay and use their ad system. It’s also, IMO, starting to look rather old and is way too complex.

Newer alternatives like Ghost look much more modern and clean but the price is ridiculous. $29 per month to host a few blog pages, are they nuts? I wonder if it’s the technical choices they have made - it appears that each instance is a separate server and the database is Postgres. Yes, I know it’s one of the darlings of the open-source / RDBMS world but it’s complicated and expensive when all you need is a bit of text and I suspect the cost is more todo with managing it all.

I just want a blog that is simple and cheap. So in the end I decided I’d write my own. I mean, how hard can it be … right?

And this is it. It’s going to be a multi-tenanted blogging engine running on Google Cloud. All the blog content is stored in their NoSQL Datastore which provides a fantastic “namespace” feature to separate each blog’s content. The serving part seems to run plenty fast enough even on the ultra-cheap AppEngine F1 front-end instances. They are just 128Mb / 600Mhz machines but because it’s all written in Go and makes good use of the memcache service it’s pretty fast (and there are faster machine options).

The great thing about AppEngine is that it is pure Platform as a Service - all the scaling and management is all done for you and the free tier means even a number of blogs could effectively be hosted for free and cost very little once it goes beyond that.

This is the first post authored using the admin panel I’m working on which is powered by Polymer. If you don’t know Polymer and you are a front-end web developer you should check it out. It’s built on browser standards like Web Components and is, IMO, very much the future of web UI. It’s particularly good at Progressive Web Apps which allow websites to look and feel like native apps on mobile devices, even to the point of working completely offline.

So, with a bit more work I’ll soon have a fully mobile friendly blog admin app to use with my new cloud-based multi-tenanted blogging engine.

Oh, and did I mention that it can also run on any hosting, because the storage can use MongoDB, BoltDB, the file system, or pretty much any storage system you want to write a little code for.

Not bad for a week’s worth of dabbling!