You might notice that this website looks a bit different now. There’s a reason for that: Thanks to the current ongoing drama around Wordpress.com, Automattic, and its competitors, I no longer felt confident in having my website hosted there, and frankly, I didn’t feel confident using a self-hosted Wordpress instance either.
This post will give you a quick rundown of the changes, and then a somewhat longer ramble about the new tech stack, and my experience upgrading.
Changes
Aside from the new site looking very different, there’s a couple of missing features. First of all, the comment function is gone. Frankly, I barely got any comments anyway, and most of them were spam, so I doubt anybody will mind. Pingbacks et cetera are also gone, but with the “blogosphere” as a whole having disintegrated long ago, I do not consider them important.
By-and-large, everything should still be where it used to be (once the migration is fully finished), including RSS feeds and all articles.
Some of the very old posts about ASL might lose some of their images in the near future, unless I manually migrate them.
On the bright side, you should no longer see any ads.
The Future
I haven’t blogged in four years, so why bother migrating at all? Well, firstly I do not want to nuke yet another archive of my online presence. Even though I no longer play Advanced Squad Leader (and I could rant at length about the reason), I do not want my days with the game to be gone entirely, for example. But I also feel like I might return to blogging in the future. I have largely given up on corporate-owned social media, and Cohost imploded just as I decided to give it a try, but I still have things I want to share with the world, from random photos to software development rants to travelogues, and perhaps even some upcoming game dev stuff.
The Migration
After some research, I chose Hugo as my new blogging software. I wanted to go self-hosted, to have full control, but didn’t want to deal with a complex tech stack. Hugo simply compiles a bunch of Markdown files into a set of static HTML files, which can then be tossed onto any webserver, including on Amazon S3 if you want to go cloud. This fits my requirements neatly, and also means there will be little need for software updates in the future.
I exported the contents of my old blog as an XML and tossed it into wp2hugo, “the best migrator for migrating WordPress export to Hugo” (according to its own author). wp2hugo manages things like aliases to keep old URLs working, and it can automatically download all images used in your posts, which is nice and did make things relatively easy, although it choked almost immediately because my blog embeds some images from different domains, and wp2hugo simply seems to be unable to handle that. (There is a command line option to proceed with the migration anyway, and I have filed a bug report).
The migration routine generated an entire Hugo site including all necessary configuration and a theme, so all that was left to do at that point was to run hugo server
to start a dev server and check in the browser to see if it worked.
It didn’t.
I don’t remember exactly, but at first, the configuration file generated by wp2hugo was misconfigured and simply crashed the compiler. It was an easy fix, at least.
The default theme (PaperMod), which I still use as of this writing, is rather simplistic and I tried to swap it out for something more feature-complete. Unfortunately, it seems like themes are far more than just a “look and feel”, but rather contain within them a lot of assumptions about how your site is structured (some are for blogs, some for portfolios, others for API docs, and so on) and what features it has, and Hugo itself does not really standardize common options, so the same feature might be configured by different flags in the hugo.yml
configuration file, or by different metadata in a blogpost’s Markdown file. As with everything of this sort, not every theme is going to have the same quality of documentation, so that’ll be fun.
Trying to switch to a different theme, I was faced with a blank starting page. The basic layout was there, but none of my posts were, and I flat-out was unable to figure out from the docs for that theme what I’d need to configure in order to take the content from my posts
directory and put it on the bloody starting page. The archive on /all/, and individual blogposts worked fine, but that’s a bit pointless if nobody can find them, isn’t it?
So, back to PaperMod. I needed some menu entries for the Archive and my Imprint, so I faffed about with various bits of contradictory documentation and example code from PaperMod and Hugo itself, but nothing worked, even though in theory it should only take five lines of YAML. After 15 minutes, I eventually assumed the dev server (which should have autoreload, similar to what you’re used from with ng serve
or whatever) had just frozen and restarted it. That worked, and I now had a menu. For the record, this works (as of right now):
menu:
main:
- name: "Posts"
url: /
weight: 1
- name: Archive
url: /all/
weight: 10
- name: Imprint
url: /imprint/
weight: 20
I am not going to try messing with the theme anytime soon, and I have zero desire to roll my own.
Of course, after every change, I need to run hugo
to rebuild the static HTML files, then upload the whole thing to my server. Luckily I already have Jenkins running on my VServer and could simply build a pipeline to download the current sources from my git repo, run hugo
, then upload the whole thing to my other (new) VServer that runs a simple nginx with a LetsEncrypt SSL certificate, on a Hetzner VServer running Ubuntu 24.04.
There is still some work left to be done (as of this writing, this site is in “staging” mode) but I hope to be done soon. Parts of this process have been quite janky, I’m not gonna lie, but all in all it only took me a few hours. Granted, I have very few posts, and most of them are pretty normal text with images in them, and even then, some of them are quite mangled. For a larger blog I could see quite a few hours going into proofing and overhauling old blogposts to render properly. Still, I feel vaguely optimistic. I have full control over this thing, including the template, and adapting it seems pretty straightforward if it should become necessary.