As a client, you care about your Ghost updates. This is the place to see how we manage updates. Under the hood, many updates are happening all the time. Here are some of them:

  • See the latest Ghost version on our GitHub release page
  • Caddy | 0.11.4 | 2019-02-26
  • Docker engine | 18.09.1 | 2019-02-02
  • OS | Ubuntu 16.04.5 LTS Xenial | 2019-02-02

Manually triggered

Here is an example showing why we don't automatically update Ghost when it's released. We usually wait 2-3 days before applying updates to Ghost (and all our software packages really). This way, as a community we can catch emergency bugs that could emerge.

Best practices

DevOps best practices are essential to us. Many checkpoints ensure your Ghost software runs smoothly. This is how we carefully push every Ghost updates to you.

There are three main checkpoints:

  1. site alpha
  2. site bravo
  3. site zebra (all sites we manage)

Let's start:

  1. We use a repeatable Dockerfile declaration that executes everything that needs to happen in order to have a perfect install of the software (Ghost in this instance).
  2. We build (from scratch) our Docker image in a CI (continuous integration) system (Travis).
  3. Within the CI, we do many tests. You can see one of them here. The CI confirm that the Docker container runs normally. If something is failing, everything stops at this point, and we receive an email saying something as failed.
  4. On our cluster (all our sites run on it), we have a unique Ghost (alpha) site which is automatically updated using our latest build (edge). This happens every 24 hours.
  5. We manually surf on few pages of the edge site (alpha). When edge is considered as "passed", we push another docker image with a specific tag. i.e. 2.13.2-cf33b4d. Find them all here. If something is failing, we can see it visually.
  6. On our cluster, we have second unique Ghost site (bravo) which is automatically updated using our latest build (i.e. 2.13.2-cf33b4d).
  7. We manually surf on few pages of the 2.13.2-cf33b4d site ( bravo). When 2.13.2-cf33b4d is considered as "passed", we are ready to update your Ghost site using the Docker image 2.13.2-cf33b4d. If something is failing, we can see it visually.
  8. Finally, we update your site and everyone's site (zebra). The best thing for you it's that there is zero downtime when we do this. Not even one second down!
  9. If something is failing it's probably not related to the docker container. It might be a network issue, a proxy issue, a load balancer issue, or something else. Keep in mind that we test all that on steps 4 and 6 because it all happens on the same cluster which serves your site.

Cluster

  • There is no staging cluster. The staging is done in the CI (step #2). We only have staging sites (alpha, bravo) along with all other sites we manage in the cluster.
  • Our main cluster lives in New-York on top of one of the big cloud providers.
  • In the future, we might run two clusters in two regions. Per example, one in New-York and the other in Amsterdam. This will depend on our client's location. Fortunately, this is not a challenge as your site run behind a powerful CDN powered by CloudFlare.

Conclusion

You can see how we do everything we can to avoid human errors and ensure that you are always running a fresh build.

It's good to understand that we never update the existing docker image (there is no such thing actually). We always build a new one from scratch. This way, all patches and security fixes are applied up to your Ghost site on every update.

Cheers!
Pascal — FirePress Team 🔥📰