Skip to content
Indra on Cloud
Go back

Welcome, how this blog is built and served

This is my engineering blog. Before the posts about Cloud Run bills, Terraform drift and MQTT fan-out, a quick note on the platform hosting this site, because the architecture is the point.

The constraints

I spend most of my time keeping cloud bills down for clients, so the blog had to follow the same rules:

The shape

A static Astro site. At build time everything becomes plain HTML and CSS: no server rendering, no database.

git push → Gitea Actions builds Astro → dist/ synced to gs://softion-blog-indra
        → Cloud Run (nginx) serves the bucket → the browser

Two components:

  1. GCS bucket (softion-blog-indra) holds the built files, private to the project, written only by the deploy service account.
  2. Cloud Run runs a minimal nginx image that mounts the bucket read-only at /srv/blog via the gcsfuse CSI driver, and serves it. Ingress is the only public surface. The service scales to zero when nobody is reading.

Adding a post

Drop a markdown file in src/content/posts/:

---
title: "My post"
description: "One-line summary for SEO"
pubDatetime: 2026-08-10T00:00:00.000Z
tags: ["kubernetes"]
---

Your content here.

Commit, push, done. The build validates the frontmatter, so a malformed post can’t ship.

More soon.


Share this post:

Previous Post
Hello, world, a blog that costs almost nothing to run
Next Post
Building an Internal Developer Platform That Deploys Into Someone Else's Cloud