This is pretty much how I do it. I built my SSG using Hakyll and host the resulting binary on my own Debian repo, that way I can write a post in any flavour of text that Pandoc supports (though I go with Markdown for simplicity) and within about 20 seconds my CI pipeline has built and pushed a new version of my site (using scp). Easily done by myself too but at least I know with the CI approach that I'm writing to git first and then publishing.

I'm part way through the implementation of showing the commit history for each post and linking it to the commit hosted on sourcehut. It provides another view on the content the same as hosting a gopher or gemini version would: clone it and read the things in the posts folder however you want.

How do you push and install a Debian package with scp?

After compiling the binary (with haskell-stack) I use fpm to package it up as a .deb (https://github.com/jordansissel/fpm).

I then scp the file into the pool directory on my server, and re-run a script that calls apt-ftparchive and regenerates the contents of the repo (https://manpages.debian.org/buster/apt-utils/apt-ftparchive....).

My web server hosts that directory with indexing enabled, but I don't use apache for it like most examples do. There's nothing special about it, it's just a directory tree built in a way that apt likes. (https://pkg.kamelasa.dev/). In fact, the entire configuration of the repo is visible there.

There's a step in the middle where I sign the packages with my GPG key, and the public key is available on Ubuntu's keyserver (http://keyserver.ubuntu.com/).

I don't need to run this workflow very often, as it'll take about 40 minutes to rebuild and push. But if I do update my SSG I know it'll end up in my debian repo with a version bump, so I'm happy.

On a second pipeline I can just do a simple 'add-apt-repository' and 'apt install'.