Today, I migrated my blog: to Ghost. I was previously writing blogs and maintaining my static blog website using Nikola. I like Nikola for being a very featureful and powerful static blog generator. I find the ReStructuredText format handy when generating complex HTML, and especially, I fell in love with the custom RST shortcuts provided by Nikola. But, flexibility breeds complexity.

Why migrate?
  • A blog post should be simple and easily renderable in blog aggregators. When you do too much custom HTML/CSS stuff in your post, e.g., playing grid layout of Twitter bootstrap, etc. things break.
  • When you start using a lot of custom things provided by a static blog generator like Nikola, migration becomes a pain. Luckily, I had just started to use Nikola specific RST shortcuts.
  • You want to write blogs, and not code. It was a pain to migrate to newer versions of Nikola. Usually, it involved a lot of fiddling with the conf files, sometimes the source code as well.
  • I kinda like WYSIWYG, and especially web based editors accessible from anywhere over the internet.
  • The final blow was my nikola based blog’s RSS feed not being parsed by the planet aggregator: used by Fedor planet, DGPLUG planet, etc. For a second, I thought, I can write a patch to fix wherever the bug is. But then, enough is enough. I want to write blog posts and not code each time to do it.
  • Installed ghost plugin in my wordpress blog and exported all content in a format ghost understands
  • Installed ghost on local machine
  • Signup and enter the admin dashboard
  • Import blog posts from my wordpress blog
  • Migrate RST blog posts from Nikola to Ghost
  • Once everything looked fine, I installed ghost on my server
  • Exported all local ghost content and imported that in my ghost instance for
  • Rsync’d all the local images from content/images/ to the remote server
  • Setup supervisord to run ghost on my server as a daemon
  • Added nginx rules to allow access to all public pages of over HTTP and blocked access to admin pages at I’ve configured another nginx virtual host to allow access to the admin pages over HTTPS.

Migration was not that painful as I was expecting it to be. It took me a few hours for doing the entire migration. I am liking Ghost’s simplicity and the admin dashboards and the web editor for writing blog posts.

Now, I can focus on writing blog posts when I write one and not go debugging through some code :)