To reduce the number of VMs I pay for each month I've shifted this blog over to Netlify, powered by Pelican and Netlify CMS. After getting a sample blog up and running using an existing template, I exported my existing posts as .md files with some frontmatter and commited it to a Gitlab repository.
Being able to post in a web browse via Netlify CMS means I don't need a command-line to write a post or do a deployment. It also means I don't need to run a Django VM with Postgres database and more attached to it - which all works perfectly well, but is overkill for this dinky little rarely-updated blog.
I did come across one minor issue: post titles with colons aren't nicely passed between Netlify CMS and Pelican. Netlify CMS quotes the entire title, which Pelican renders verbatim. Changing from markdown to restructured text would probably fix it, as would changing from Pelican to another static site generator such as Hugo. To be honest it was not a big deal to just remove the colons and be done with it. Netlify CMS doesn't have great error reporting so it took a little while to realise colons in titles was the reason for my random Javascript bugs - but now that it's sorted out, updates really are quite simple.
Job done, one less VM on the monthly bill.