Running a scalable site in 2020

Running a scalable, fault tolerant, backed up, HTTPS secured, automate-able blog in 2020, for around €3,50 a month, is easier than ever. Background When I set out to start this blog, I wanted to have a cost effective setup, which would also allow me to scale the blog in future if I somehow got a load of traffic I didn’t expect. In this post, I’m briefly going to go over a few of the points around the features that this blog has for it’s incredibly low price, and hopefully show that in this day and age, it’s pretty easy to run a site for a fairly low cost, while still being confident that it can be scaled up and support thousands of requests fairly easily and efficiently if required.

Migrating from Traefik V1 to V2

As I’ve mentioned before, this blog runs a very simple set up, literally 2 containers, Traefik itself, and Ghost, the blog platform. This means, that embarking on a migration from Traefik V1 to V2 for this blog was not such a daunting task! I embarked on this project, and it was completed and up and running on V2 about an hour later! A really impressive feat, primarily brought on by the simple and effective configuration and setup of Traefik itself.

Deploying this blog with Github Actions

Having extensively used Concourse CI (, Jenkins ( and Gitlab CI ( for various different situations in a work capacity, I decided to try something new with this blog, Github Actions! With Github now having unlimited free private repos, and allowing one to use their actions platform for free (with some limits) - it seemed fitting to try and keep the codebase, as well as deployment infrastructure in the same place, without the need for an external CI/CD platform to manage this.

Validating Docker Compose files with a pre-commit hook

The Problem We have all run into this issue - you’re mid getting a service ready to deploy or update, and you make an on-the-fly change to a compose file, to update a health-check, change a deploy parameter or modify the update interval, and then, when you go to deploy the service… yaml: line 12: did not find expected key Dang! What a mess up, now we have to go back, fix the issue (hopefully test it a bit better) re-commit to the code base, potentially re run test steps, and trigger redeployments.

Offload Docker tasks to a remote Windows host!

Time for another work from home related post! We all love Docker! - it makes our lives easier, and it lets us package up just what we need into finite packages for reproduction, testing, distribution or pretty much anything else we can think of. But it definitely isn’t light on system resources. Reserving 2GB of RAM by default (at least on MacOS) and potentially using a lot of CPU power to keep all the applications we need running in the background.

Concourse CI Basics - Part 1

Recently, I began working with Docker, and this opened my eyes up to the extremely versitile nature of Docker, and what all can be done with building Docker containers for applications. As an extension of this, I dug into what can be done to achieve CI/CD with Docker, and that introduced me to Concourse. If you haven’t heard of Concourse, you can find their home page here: Concourse, to me, makes a lot of sense in a world with Docker Swarm, where one is working with microservice architecture, and trying to push towards a CI/CD environment.

Upgrading Docker - The Basics

It has been brought to my attention that the way that I have been installing Docker in some of my previous posts, while it does work (and in my opinion is the easiest way to install) does not yield the latest version of Docker being installed. Therefore, I thought I’d do a quick post on how to get the latest version installed (from the official repo), as usual, this is done on an Ubuntu 16.

Basic HTTP Auth with Traefik

No way, two posts on one day! Starting up a container with Docker, and exposing it via a hostname using Traefik is something that a lot of us are familiar with, however something that I myself did not realise, is that you can actually do basic HTTP auth on frontends that are registered with Traefik. Why would you want to do this? I realise that there are much better ways to do auth apart from HTTP auth, however in a situation where you simply need to make sure that a user has some sort of password prompt before being given access to a service, (such as a web interface to something) then HTTP auth can be very effective.

Getting this blog up and running using Ghost, Traefik and Docker - more complicated than I expected!

Welcome to the first post on my blog! I am very new to this, so don’t expect anything too exciting just yet. I started this blog to help convey everything I am learning on a day-to-day basis in some sort of interesting or helpful way. For my first post, I thought the best idea would be to explain how I am running this blog, and where it is hosted. I will be going into more depth on each one of these services in future, in separate posts.