Area 02 — rack & ruin
Infrastructure
two servers, one electricity bill, every mistake documented
001
Hardware inventory reference
Server 1 — daily driver: Intel Xeon E5-2686 v4, 64GB DDR4, Intel Arc A770 16GB, X99 board. Works the day job and the night shift.
Server 2: dual Xeon CPUs, 128GB RAM, lots of storage. The heavy lifter.
Finding: last decade's enterprise hardware is this decade's homelab bargain. The cloud rents you less for more.
002
The electricity bill metric
The entire operation — both servers, the GPU, git, CI, storage, status page, and an AI chat — costs about 1000 rubles (~$10) a month in electricity, at full power, 24/7. Hardware owned, so that's the whole bill.
Finding: price/performance is the point. Less than a streaming subscription, more uptime responsibility than most jobs.
003
Postmortem: the shared postgresql alias fixed
Two stacks, one docker network, and a postgresql alias that resolved to the wrong database: Gitea connected to authentik's postgres. Everything "worked" until it very much didn't.
Finding: a network alias is a global variable. One alias per consumer, named like it hates ambiguity — because in a shared network, it will be shared.
004
Postmortem: hairpin NAT fixed
The server cannot reach its own public IP — hairpin NAT isn't happening on this network. Anything that "phoned home" through the public hostname simply didn't.
Finding: everything internal now talks over container networks or 127.0.0.1. Public hostnames are for the public; localhost is for family.
005
Postmortem: Cloudinary link-rot fixed
Externally hosted assets started returning 401s, and a deploy UI froze on them. The assets weren't ours, the outage wasn't ours, and the fix being "wait for someone else" was unacceptable.
Finding: everything is self-hosted now. An external dependency is an outage you haven't scheduled yet — see the design notes on why near-zero images is policy.
006
The 3am rule doctrine
If you can't fix it at 3am, you don't own it — it owns you. Everything on these servers has been broken at the worst possible hour at least once, and everything got fixed by the same pair of hands.
Finding: that's not a bug of self-hosting; that's the entire feature. Uptime is a personality trait now.
007
If You Can't Fix It at 3am, You Don't Own It post
The 3am rule: everything on these servers has broken at the worst possible hour at least once — and got fixed by the same pair of hands. That's not a bug of self-hosting; that's the entire feature.
Read the post →
008
The Server That Couldn't Call Home post
This server cannot reach its own public IP — hairpin NAT simply isn't happening on this network. Everything that phoned home through the public hostname silently didn't, until we rewired it all.
Read the post →
009
The Entire Operation Costs ~$10 a Month post
Both servers, the GPU, git, CI, storage, the status page and an AI chat — at full power, 24/7, for about 1000 rubles of electricity. Hardware owned, so the bill is the whole bill.
Read the post →
010
Applet — The Autopsy postmortem
Browser-based Android emulation with a free compute hour a month. Built, deployed, verified, and killed in one day. The stack worked perfectly — that was the problem.
Read the post →