DevOps. Self-hosted. Security.
RSS FeedNotes on DevOps, infrastructure, self-hosting and cybersecurity — practical guides from real-world operations.
Read the posts below or head over to the About page.
Recent Posts

VictoriaMetrics instead of Prometheus+Thanos: one binary instead of three — when it's honest savings
Long-term metric storage on Prometheus means Thanos: sidecar, store gateway, compactor and query on top of S3. Where VictoriaMetrics single-binary covers the same with one process: active-time-series thresholds, the vmagent/vmalert/vmbackup ecosystem, two migration paths, and RAM/disk numbers.

Crossplane 2.0 and the coming v1.20 EOL: cloud infrastructure via GitOps instead of Terraform state
Crossplane v1.20 hits EOL with the v2.5 release in November 2026 — the migration window is closing. What changed in 2.0: compositions from any Kubernetes resource, provider functions instead of monolithic providers, delivery through Argo CD — and an honest answer to when Crossplane is not for you.

GPUs in Kubernetes without device plugins: how DRA changes accelerator allocation
Dynamic Resource Allocation (DRA) is the standard way to hand out GPUs since Kubernetes 1.34: a ResourceClaim instead of nvidia.com/gpu, attributes instead of counters, CDI instead of device mapping. We walk through the three new API objects, DRA mode in the NVIDIA GPU Operator, and what exactly breaks when you migrate.

A contact form on a static site: Cloudflare Turnstile + Pages Functions + D1 + Telegram — no backend of your own
A live contact form on a static Astro site, entirely inside Cloudflare's free tier: a Turnstile widget against bots, server-side token verification in a Pages Function, a message archive in D1 and an instant Telegram push. The whole "backend" is one TypeScript file — and the real traps were in configuration, not code.