As a client, you probably care about your Ghost updates. This is the place to see about what manage our updates. Under the hood, many updates are happening all the time. Here are the major ones:

  • Ghost | 2.14.0 | Node 10.15.1 | GitHub release
  • Caddy | 0.11.3 | 2019-02-05
  • Docker engine | 18.09.1 | 2019-02-02
  • Cluster OS | Ubuntu 16.04.5 LTS Xenial | 2019-02-02

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. Here is an example showing why we don't automatically update Ghost when it's released.

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.

  1. We use a repeatable Dockerfile declaration that executes everything that needs to happen in order have a running 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 confirmed that the Docker container can run normally. If something is failing, everything stops at this point, and I receive an email.
  4. On our cluster (all our sites run on it), we have a unique Ghost 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. 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 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. When 2.13.2-cf33b4d is considered as "passed", we are ready to update your Ghost site (2.13.2-cf33b4d). If something is failing, we can see it visually.
  8. Finally, we update your site (and everyone's site). The best thing for you it's that there is zero downtime when we do this. 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

  • Our main cluster lives in New-York on top of one of the big cloud providers.
  • We don't have a staging cluster. We only have staging websites that run on the main cluster.
  • 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 an issue as your site run behind a powerful CDN server 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 freshly 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