Welcome to my blog! This will mostly be technical stuff and whatever else I find interesting.


I came across Host your blog on DigitalOcean with Docker, Nginx and Let’s Encrypt which inspired me to start this blog. I followed the pattern in that post, but the particulars were very different: I built this on a Linode server (instead of Digital Ocean) that runs Ubuntu (instead of CoreOS) that I've had for a few years (instead of creating via docker-machine) and served by Caddy (instead of nginx). I guess the only thing that's the same is that the blog itself is running as a docker image of Ghost.

Here are some of the differences between my implementation and the one outlined in the post.

Host and System

I don't have serious workloads in either Linode or DigitalOcean so I can't say much between them, besides that the experience I've had with Linode so far has been great. As far as I can tell, the two services have pretty good feature parity between them. With one exception relevant to this post: Linode's API is not published in SDK form (at this time), and it doesn't have integration with Docker Machine. This is something I'm trying to actively fix and I will post about any progress I've made.

HTTP Server

This is currently set up with Caddy running as a systemd service using the reccomended configs. In the future I might think about moving Caddy into a container and linking the containers with docker bridge networks.

The great thing about caddy is the extremely simple configuration and don't-even-think-about-it automatic https. Configuration consisted of adding the following to my Caddyfile and restarting the daemon:

blog.josephtaber.com {
        tls email@example.com

        # reverse proxy everything to the local port exposed by docker
        proxy / localhost:2368 {

Boom site online with https. Caddy is great.