About This Blog
Frameworks
This blog is the second iteration of my blog. The first one was a WordPress site hosted on GoDaddy using a version of PHP that was many versions too old, a super heavy theme, and an extremely complex block based layout generator.
This second iteration is a completely static site generated by Hugo. The theme is called smol and it uses no javascript client-side.
Architecture
This blog is served by Cloudflare Pages, using their built-in Hugo integration. In particular, I use their integration with github, where they subscribe to the main
branch of a dedicated blog repository. So, when I push to main
, Cloudflare will react by pulling down my changes and re-building and re-deploying the site. In practice, this takes less than a minute, sometimes less than 30 seconds.
But how does my code get to Github? Here’s where it gets weird.
This site is actually a follower of a site in my home network - blog.leo (Yes, I know that using a non-existent TLD for local DNS is potentially unsafe, I’ll be posting a discussion of that one later).
That site runs as a docker compose
stack containing the generated static site files and a nginx web server.
The code for blog.leo is stored in a self-hosted Gitea instance and deployed to a NUC in my home network using self-hosted Drone CI.
Gitea mirrors the code to GitHub using a push mirror authenticated with a GitHub Personal Access Token.
Ergo - when I push to main in Gitea, Drone CI deploys my blog locally, Gitea force-pushes to Github, and Cloudflare deploys my site to the public internet.
It’s fun watching them race, sometimes.