Hosting a Ghost publishing blog on AWS using a custom Office UI Fabric theme

Having blogged at work previously, I thought making a decision on where to blog externally would be a nice simple one. My first thoughts were to use a platform to get up and running quickly. I had a Blogspot login from many years back and follow a few people from LinkedIn and Medium but that didn't quite feel right. This will have elements of technical delivery on it so to have a site that can hold that as well as the blog content felt right. I already had my domain which was running my Office 365 domain but the public site on that was due to be decommissioned in March so it was time for a new site.

How do you host your own blog?

The first thing to decide on was a blog engine. I wanted something easy to host and deploy on a cloud platform. Coming from a C# background, my first thought was to use BlogEngine and found that there was an Azure marketplace entry to get started quickly. With this, I was up and running in about 15 mins and could start creating my content. So did I stick with this?

No. Unfortunately while doing this, I was also watching Halt and catch fire with Joe MacMillan talking about challenging yourself to be better. I know C# but want to know more about NodeJS so took a look at what engines were available on that. The strongest one that I found was the Ghost publishing platform and as well as having a large marketplace of themes, it could host html content directly. A quick download from the developers site and I was up and running (I already had Node JS and NPM installed).

Changing the theme

Browsing through the marketplace, I found a few different themes I liked the look of but what I really wanted was to look like an Office 365 blog. I had used the new blog pages from Delve and wanted to retain the look and feel. Having used Office UI Fabric, I took this as a basis and built up a similar look to the main Delve blogs. Being new to Ghost, I needed a little kick start to get moving and found that Raivis Vitols Willow Theme was a close look to what I wanted and acted as a basis for it.

With some rework, I now had a theme which could be uploaded and you can see the SourceCode at


Next on to where it would be hosted. A blog about Office 365 had to be hosted on Azure, right? That was certainly my first reaction. I had four criteria:

  • Easy to deploy
  • Could host NodeJS
  • Have a custom domain
  • Supports SSL

Then the final thing was to be as cheap as possible.

Azure met all four criteria but to host a web app with SSL and a custom domain was looking at a higher price than I was hoping to pay. Next stop Amazon.

With their free tier for a year, ability to have SSL and custom domains, this certainly felt like the right answer. I had used Azure to set up web apps quite a bit but this was my first proper exploration of AWS. The GhostForBeginners page on setting up Ghost on AWS got a site up on the AWS domain but finding out details around setting up the custom domain and SSL took a lot longer.

To help others get ahead, the first thing to say is that EC2 will only support SSL through a Load Balancer - here's the post that gave me the best confirmation of this. I followed this guide to set up the certificate and then this post to set up the load balancing. I hit a few bumps along the way with my domain provider, mostly due to trying to remember what a A record and CName is but it is also important that you set up with the certificate with * AND (thanks to vercettie in this post for pointing me right there).

The final step was to set up SMTP and I decided to keep it simple and used GMail. Bitnami's help page got me details of the config but I also had to install and connect with Putty - make sure you check the bitnami docs to get the correct username.

And that's where it is now. There are a few changes I'd still like to make:

  • Add discussions, probably with Disqus
  • Improve on the profile pane on the homepage
  • Add some navigation for static pages
  • Support more profile links and make them dynamic

I'll certainly give AWS a year and then review what the costs would have been after that.

Please do tweet me or contact on LinkedIn if you have any questions or comments.