Infrastructure
Is Alpine actually the right base image for Node?
Alpine saves 86 MB over slim and every classic reason to avoid it has quietly expired. What still costs you is sharp running 1.8x slower on musl, and apk. Measured on Node 22.
Infrastructure
Alpine saves 86 MB over slim and every classic reason to avoid it has quietly expired. What still costs you is sharp running 1.8x slower on musl, and apk. Measured on Node 22.
Infrastructure
Measured on Postgres 16 at one million rows: a UUID primary key costs about 2.6x on bulk insert, 1.4x on index size, and nothing at all on cached point reads. Time-ordered UUIDv7 removes most of the write cost — and made the index bigger, not smaller, which turned out to be the interesting part.
Infrastructure
A /health that always returns 200 tells you the HTTP listener works — which was never the thing that broke. Split liveness from readiness, put a timeout on every dependency check, and never let a downstream failure trigger a restart that cannot fix it.
Infrastructure
Shipping software customers run themselves means every install is a machine you cannot log into. Five things — a bounded support window, idempotent migrations, a preflight that names the missing variable, a curlable /health, and a support bundle — decide whether that is a product line or a queue you
Infrastructure
Ignore the cost numbers. Put your finger on the estimated rows and the actual rows of every node, and find the first place they disagree by more than an order of magnitude. That node is your bug, and everything above it is a consequence.
Infrastructure
A backup nobody has restored is a hypothesis. Here is a restore drill that runs in under four seconds against a scratch container, compares row counts against the source, and fails loudly when the dump is quietly incomplete.
Infrastructure
GPTBot, ClaudeBot and PerplexityBot do not run JavaScript. A client-rendered SPA serves them an empty div, so nothing you wrote can ever be quoted. Prerendering fixes it without giving up a dynamic site.
Infrastructure
If the customer has Docker, they have the product. The build is the easy half — the rest is drawing a clear line between what you ship and what stays theirs, so support does not become the business.
Infrastructure
A named volume hides your data inside Docker, where one wrong flag deletes it and ordinary tools cannot see it. Moving Postgres to a bind mount takes about a minute — here is the order that keeps a rollback available the whole time.
Infrastructure
Caddy issues and renews certificates itself, so the entire TLS setup is a hostname. Here is the config running a site, a blog and an app on one domain — plus the certificate failure that had nothing to do with Caddy.
Infrastructure
No git remote, no scp, no keys — just a command channel. Base64 in chunks works, but two silent failures will corrupt the file first: protected /tmp writes, and a pty rewriting your bytes.
Infrastructure
A shared token in a header is the right amount of auth for a machine, not a user. The three things that make it safe: fail closed when unset, compare in constant time, and scope the token to one job.