Dieser Blog macht nichts Besonderes — und genau das ist der Punkt. Es gibt keinen Server, auf dem ich mich einlogge, kein rsync, kein FTP. Ich schreibe eine Markdown-Datei, mache git push, und ein paar Minuten später steht der neue Beitrag online. Dazwischen läuft eine Kette, die es wert ist, einmal aufgeschrieben zu werden.

Die Kette

git push (main)
  → Forgejo Actions (Codeberg)
  → docker build: Hugo → distroless nginx
  → push nach codeberg.org/.../fxb-k8s-blog
  → Argo CD Image Updater schreibt den neuen Digest nach Git
  → Argo CD synct → neues Deployment im Cluster

Kein Schritt davon ist neu erfunden — die Cluster-Website nebenan läuft schon genauso. Der Blog klinkt sich einfach in dieselbe Infrastruktur ein.

Warum Hugo

Ein einzelnes Go-Binary, kein node_modules, Builds in Sekunden. Für einen Textblog gibt es wenig Gründe, komplizierter zu werden. Der Build passiert in einem Multi-Stage-Image:

FROM hugomods/hugo:exts AS build
WORKDIR /src
COPY . .
RUN hugo --minify

FROM cgr.dev/chainguard/nginx:latest
COPY --from=build /src/public /usr/share/nginx/html

Das Ergebnis ist ein unveränderliches Image: eine Version des Blogs = ein Image. Rollback heißt git revert.

Warum im eigenen Cluster

Weil es geht — und weil jeder Dienst, der hier läuft, ein Stück weniger Abhängigkeit von fremder Infrastruktur bedeutet. TLS terminiert am Reverse Proxy, dahinter spricht alles nur noch schlichtes HTTP im LAN.

Mehr dazu in den kommenden Beiträgen. Bis dahin: >_