Cloudy Weekend: Migrating My Blog Engine

I crashed my CMS server and had to do an emergency lift-and-shift upgrade over the weekend. Here's how it went

Cloudy Weekend: Migrating My Blog Engine
Join the Nerd Roundup Discord Server!
Check out the Nerd Roundup community on Discord - hang out with 81 other members and enjoy free voice and text chat.

Saturday morning I logged into my cloud provider and started updating my blogging engine. This crashed my server and caused a lift-and-shift and upgrade. I finished up Monday morning.

This is my story.

Quick Start

  • What was your old system? ghost running on an ec2 server
  • Why upgrade? I'd left it alone for years. It was time. Plus I broke it
  • Why pick the stack you did? I wanted something where I owned the content, it was reasonably customizable, and I could leave it alone for more years
  • Why not a static site? I like this, I've done it several times, I even wrote a serverless SPA that was a modular blogging engine and didn't require a build. But I suck at design. It was better to get something other folks made pretty things for

Target Architecture

  • Ghost on EC2
  • Ubuntu/MySQL/Nginx/S3/CloudFront
  • Talkyard forum software
  • Matomo self-hosted analytics
  • (optional) Wikimedia Wiki


Why did it take two days? Because obstacles. There are good reasons for most of these obstacles, including my coming in cold from not doing ops work for a long time. However, there are good reasons for lots of things, like the common cold. That doesn't make them good. As devs, we need to eliminate friction for fellow devs whenever we can. That means being honest about identifying friction when it happens. Hence the reason for this post.

Memorable Blocker Impact Reason
AWS Provisioning Low I already have a lot of experience with AWS, but god it keeps getting byzantine
Ghost Upgrade Medium Waiting years to upgrade was just too much. Auto-upgrade didn't work, things had moved around, little nits involved lots of diffing around for answers
Data Move Medium Much of the data moved fine, thanks to big honking JSON formats. Almost missed moving the members over, which is a separate process. Data in the commenting system was a total loss, although I could've hand-moved it
Commenting System Upgrade High Talkyard was a dumpster fire, although it's not their fault. All of these "free" software vendors are really folks who want to sell SaaS, so the do-it-yourself version is docker-heavy. I don't need half-a-dozen docker images to run a freaking commenting system. Decided to stick with the built-in system
Server Setup High Although I know what I'm doing with setting up a server, I made the mistake of relying too much on scripts and random "helper" sites on the net. Ended up in all kinds of messes, including locking myself out of my own database. Better just to take time and (re) learn, then do
Wikimedia Medium It's always a bit of a bear, and with multiple domains and subdomains, moreso. Love their docs and software, but it's a lot
Misc Medium Lots of little changes over the past few years, including new server-side cross-scripting directives. Not impossible to deal with, but a real time sink
Analytics Medium Struggled with this, much more from the privacy standpoint than picking a library. Decided on Matomo. So far it's awesome! We'll see
Discord (webhooks) Medium Who knew that something simple like a webhook would be a problem. Without being inside either the sender or reciever, though, how do I know what's going on? There are fixes, but I bailed out. Too much overly-complex nonsense for such a simple value proposition
Need a place for my cats


It's not a bad look, as you can see. There's a lot still left to tweak, as you can see, but that's best left to another day. Tech jobs must have a clear ending point (or they never end).


  • Dang nginx confi is like regex: I leave it alone just long enough to have to honk around with it uncomfortably when I need it again. I'll be glad when I get that brain upgrade I ordered
  • Many if not most times, debugging something led me to half-a-dozen pages that promised to help me and then regurgitated generic advice about webhooks. Yay ChatGPT content. I thought recipes were spam hell
  • Docker makes no sense to me, but I thought fine, I'll set up some pods. An hour or two later suddenly I'm knee-deep in docker images and poking around with certs and reverse proxy. Hell with that nonsense
  • Plugins, extensions, and themes were easy across the board. The tech community has done well on that. Yay good module system
  • Pictures on my old blog were not being stored in my S3 bucket although I thought they were. Ha! I must have not followed-up last time. The fix involved a bunch of manual moves. This is self-induced friction. Mea culpa
  • Our Discord community turned out to be hecka fun. As I went along, I could just throw out whatever I was thinking about in our off-topic channel and whoever felt like it could help. Small communities are the new Twitter