3 min read

DigitalOcean + Docker + Ghost, the Three Musketeers of Blogging

This website has been neglected for far too long now. I tend rely on my online presence only to sell myself when I'm seeking new employment. It's high time that changed!
A cartoon rendition of the core technologies leveraged in this blog post.
G the Ghost, Docker the whale and Deo the shark pal around in the digital ocean. Illustrations by Marc Bossé.


This website has been neglected for far too long now. I've noticed that I tend to go through cycles of highly-focused work for a company/clients that cannot be added to my personal portfolio due to NDAs and other contractual clauses. This leaves me to rely on my online presence only to sell myself when I'm seeking new employment.

It's high time that changed!

Core issues to resolve:

  1. Let's Encrypt SSL certificate has expired and I have no way to self-renew due to the age of Droplet (no console access like new/modern droplets, can no longer SSH into server, etc.) and a cancelled Plesk hosting account.
  2. I'm also thinking: "I have minimal content on the existing site, why use Concrete 5? Plus the stack is VERY outdated."
  3. Maintain & develop my online presence outside of social media from a stable starting point.


  1. I've established that all I need is a simple blog, don't overcomplicate it & find a platform to support this.
  2. Leverage DigitalOcean technologies (which I'm already being billed for) & use some of the skills I never fully dove into in my previous role - apparently they work nicely together!
  3. If this works out, I can standardize the process I went through to launch my blog and make this deployment model available to others as-a-service. I have another project in mind that will also benefit from this update.


Deeper Dive

Thankfully I already had an account with DigitalOcean and had previously repointed my domains DNS settings from my registrar to the DigitalOcean nameservers (tutorial here). From this point I was able to:

  1. Created a new/second Droplet to run the Ghost Docker image

  2. Setup & deployment were fairly straight-forward courtesy of the following tutorials & videos:

  3. After confirming the new Droplet was live, I cleaned-up and re-assigned DNS configs for honorbound.ca to the new Ghost Droplet within DigitalOcean (propagation can take some time)

  4. Upon confirming the new Droplet was working with my domain, the old Droplet running the Concrete5 version of the Honor Bound Design site was safely destroyed

  5. Setup Ghost CMS & pick a starter Ghost theme (uses Handlebars.js)

    • I chose Dawn, but I'll be editing this soon to be unique
  6. Setup Mailgun to handle transactional and bulk emails (for registration & newsletters)

Minor Pitfalls

SSL Certs

Problem: www.honorbound.ca is blocked by NET::ERR_CERT_COMMON_NAME_INVALID SSL error. Root domain appears to be working well though.

Justification: During the setup of the Ghost Docker image an SSL certificate was only created for honorbound.ca instead of a wildcard - user error on my part.

Solution: Simply create an additional Let's Encrypt certificate for the www subdomain on the new Droplet running the Ghost image. See this DevAnswers blog post for step-by-step instructions.


Problem: After following docs on setting up emailing for Ghost and a sandbox domain on Mailgun, users attempting to register were receiving a 500 error from the send-magic-link endpoint. Multiple failed attempts would result in a 429 error being thrown for too many attempts. This issue could not be replicated by the email address used to register for Mailgun (because it is automatically registered so the email goes through).

Justification: The default free account/sandbox domains will only allow registered recipients (within Mailgun) to subscribe to your site. This means a sandbox domain works fine for initial testing but won't do for Production.

Solution: Register for the Free/Flex plan, includes 5000 emails per month + $1/1000 emails after that (at time of writing). Once you've upgraded to this plan and registered your credit card, you'll be able to setup your own domain to use instead of the default sandbox one. Make sure to update the Ghost config file on the Droplet accordingly & restart Ghost!


The amount of effort to complete the work outlined in this post and in the tutorials that were followed are clearly why Docker and Ghost are as popular as they are. All together this entire site rework took maximum 6 hours from idea to final testing (including old site clean-up) and currently only costs $6 CAD/month to run!

Needless to say, I'm impressed. This gives me a base site running a theme provided by Ghost which is an excellent launching point for my own creativity.

Make sure to register to stay up to date with all new posts and projects here on Honor Bound Design.