A migration to Ghost from Jekyll
I just want somewhere I can quickly & easily share things. So, I'm testing out what a new iteration of dzombak.com may look like, running a self-hosted instance of the Ghost CMS.
I last moved blogging platforms in 2011, when I switched my website from Wordpress to the static site generator Jekyll.
Recently I've been feeling constrained by my Jekyll setup. It feels creaky, with outdated load-bearing dependencies that I can only run in Docker and a system of tags that requires significant logic in my templates to make everything work correctly. And I'm tired of needing to rebuild every CMS feature I want for my site, particularly on the UI side of things, where modern responsive CSS is just not my strong suit.
I just want somewhere I can quickly & easily share things I make: writing, photos, 3D models, etc.
So, I'm testing out what a new iteration of dzombak.com may look like, running a self-hosted instance of the Ghost CMS.
This site is very much a work in progress. If you're reading this before the migration, you'll note that your browser's address bar reads www2025.dzombak.com
. My intent here is to use this as a "staging" site where I can play with this new CMS, learn to use and manage it, implement and test features I need (e.g. an embedded 3D model viewer), and work toward a design I'm happy with.
Eventually, the plan is, I'll import everything from my Jekyll site into Ghost and this site will move to dzombak.com
. Nginx will just redirect www2025.dzombak.com/*
to the correct site. Importing everything will require generating a JSON file in the import format Ghost expects, which I'll accomplish either with a one-off script that processes the source Markdown and HTML files directly or via a Jekyll "layout" that actually just generates JSON.
Obviously that will take some time and effort. If I don't get around to that quickly enough, plan B is to hack together a Jekyll layout that duplicates the design of a post on the Ghost site, regenerate all my old posts with that layout, and use Nginx to serve all those pages at their old URLs. Those wouldn't be integrated into the Ghost system, so they won't appear in Ghost-generated indexes or tag lists, but at least the URLs won't be broken.
Any migration like this is stressful. In particular I hate the idea of breaking links (cool URIs don't change!) because I forgot some special case or routing rule. My plan to deal with that is:
- Use Google Search Console to know when a URL breaks
- Write a script that parses my Nginx error log for 404 errors and summarizes the affected URLs, sorting by the number of occurrences for prioritization