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 https://github.com/kevmcdonk/GhostFabric.
Hosting
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 *.yourdomain.com AND yourdomain.com (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.