Introduce CloudNativePG as shared app Postgres; Umami as first tenant #327

Closed
opened 2026-06-15 00:18:06 +00:00 by coilysiren · 1 comment
Owner

Stand up CloudNativePG as the shared Postgres operator for app workloads on the k3s cluster, and deploy Umami as its first tenant.

Why

Current state: exactly one Postgres in the cluster - postgres:17 running inside the forgejo deployment (deploy/forgejo.yml:99). Everything else is SQLite (2fauth, etc.). Umami (the picked web-analytics tool) needs Postgres and would be the second Postgres-needing app, with GlitchTip a possible third. This is the moment to set the pattern before it sprawls.

Decision: do NOT graft new apps onto forgejo's in-pod Postgres - that couples blast radius and upgrade timing to the source-of-truth git server. Instead run a declarative operator that gives each app its own database/role in one managed cluster.

Scope

  • Deploy CloudNativePG operator to the k3s cluster
  • Define a shared apps Postgres Cluster CR (sizing for a homelab single node)
  • Wire backups to S3 (fits the existing AWS posture) via the operator's barman/object-store support
  • Provision a umami database + role
  • Deploy Umami pointed at it (cookieless web analytics for coilysiren.me surfaces)
  • Reverse-proxy the Umami tracking endpoint under coilysiren.me (ad-blocker resilience)

Refs

  • Parent backlog: #326
Stand up [CloudNativePG](https://cloudnative-pg.io/) as the shared Postgres operator for app workloads on the k3s cluster, and deploy Umami as its first tenant. ## Why Current state: exactly one Postgres in the cluster - `postgres:17` running *inside* the forgejo deployment (`deploy/forgejo.yml:99`). Everything else is SQLite (2fauth, etc.). Umami (the picked web-analytics tool) needs Postgres and would be the second Postgres-needing app, with GlitchTip a possible third. This is the moment to set the pattern before it sprawls. Decision: do NOT graft new apps onto forgejo's in-pod Postgres - that couples blast radius and upgrade timing to the source-of-truth git server. Instead run a declarative operator that gives each app its own database/role in one managed cluster. ## Scope - [ ] Deploy CloudNativePG operator to the k3s cluster - [ ] Define a shared `apps` Postgres Cluster CR (sizing for a homelab single node) - [ ] Wire backups to S3 (fits the existing AWS posture) via the operator's barman/object-store support - [ ] Provision a `umami` database + role - [ ] Deploy Umami pointed at it (cookieless web analytics for coilysiren.me surfaces) - [ ] Reverse-proxy the Umami tracking endpoint under coilysiren.me (ad-blocker resilience) ## Refs - Parent backlog: https://forgejo.coilysiren.me/coilyco-flight-deck/infrastructure/issues/326
Author
Owner

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: burndown-2026-06.

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: `burndown-2026-06`.
coilysiren 2026-06-17 08:22:31 +00:00
Sign in to join this conversation.
No description provided.