During the past weeks I’ve been discussing with some community members about having a Ghost blog. That’s why I decided to share my experience using Ghost over a decade now.

In October 2014 I moved my blog from WordPress to Ghost because of two main reasons. First and most important WordPress is more a kind of CMS than a pure blogging platform (for me it’s totally overloaded and the codebase… well you can imagine my thoughts on that…).

Second is performance. My tests showed that both, the load times for readers and -more important- the admin dashobard -because that’s my view for my blog- were faster with Ghost than with WordPress!

Another but not so important reason was that ghost looks more promising when having a developer blog using lots of code snippets.

The section below is focusing on operations. I will not talk about ghost’s features itself or how it is using Ghost. There are no differences in using self-hosted or hosted Ghost blogs.

Self Hosted Ghost

I started with a self hosted ghost installation on Azure using a plain, free, web-app. Which was fine (for two days or so) :D After that short amount of time I realised the disadvantages of Azure’s free web site plan. Azure was shutting down my page after some time, when a user came to my blog, both IIS and the Node process had to spin up which took about 5 to 7 seconds. So I migrated to a bigger, paid Azure plan and everything works like a charm. This plan was about $30 per Month. When your looking for SSL you’ve to use Azure’s S2 plan which is about $75 per month. Which is a lot of money for a blog

I was really happy with that solution until January 2016. But there were some pain points during that 15 months that I want to share with you guys.

When it comes to rebasing my private fork of ghost, I ran into issues each and every time. NPM wasn’t correctly pulling sqlite3 on Azure’s machines. I had wired issues because the npm installation on Azure had problems to pull the correct version of sqlite3 in some situations it pulled the ia64 and on other days it pulled x86 of the module. node-gyp was able to build the module but it tanked during startup of the node webserver. Also locking the target-architecture wasn’t helpful at this point. For each and every update I’d do invest a lot of time to get it up and running using a lot of manual tasks.

This was really frustrating because I was facing downtimes when trying to upgrade my blog to recent ghost releases.

Moving to MySQL could have been the solution, but taking care about another service was not an option for me! We’re talking about a blog, not about a service that generates tons of $$$ per month :D

Another problem I was facing, the mail integration. I don’t know exactly why, but I never got mail system working when running on Azure.

I did some tests using a hosted ubuntu, and ghost again worked like a charme. Again, taking care about an entire ubuntu distribution because of my blog was not what I was looking for.

Hosted on ghost.org

Since the end of January 2016 I’m now running directly on ghost.org and until now I’m fine with that. I’m not facing any issues so far. The migration process is a bit strange. You’ve to export your blog from the self hosted edition and import this on ghost.org. But the images you’ve to forward to support@ghost.org. I had more than 50mb of images on my self-hosted version. So sending it by mail wasn’t an option. I asked to support how to handle this. After a waiting time of 2 Minutes they reached out and asked me to upload it to OneDrive or DropBox and provide the link to the images archive. Another 5 minutes later all my images were up and running on ghost.org.

For those of you who are asking what’s possible on ghost.org, here a list of things I’m currently using

Perhaps there is more, but that was just the actual dump form my brain. I hope this post helps some people to find the right way how to host their ghost blog.


Due to the rise of the monthly fee for a hosted ghost plan, I’ve migrated my entire blog to jekyll and host it on github pages.