post(case-studies): running production infrastructure solo — 162 containers, three hosts (EN+ZH) + og/banner
Deploy / build (push) Successful in 18s

The Phase C1 keystone asset (Story B). Publishes the infra case study:
- architecture: 3 hosts / 162 containers / 78 compose stacks with the per-host split
- incident record: the monitoring panels that lied, and the Passbolt cascade
- how the numbers are re-derived (verify_infra.py) rather than remembered
- no uptime percentage: availability is not measured, so the post says 'monitored'
- hire CTA (case-study convention)

EN + ZH twins, og + banner generated and measured (OG 5 tags/1 row, banner 8 lines delta 2).
This commit is contained in:
2026-10-06 08:04:02 +08:00
parent fbec241d0d
commit 67b844e3a0
6 changed files with 113 additions and 2 deletions
+21
View File
@@ -1091,6 +1091,27 @@ BANNERS['stop-writing-agent-prompts-for-deterministic-work'] = {
],
};
BANNERS['running-production-infrastructure-solo'] = {
titlebar: "root@hoe-lee — three hosts, one operator",
lines: [
{ t: 'prompt', text: "$" }, { t: 'cmd', text: "docker ps — three hosts, one operator" },
{ t: 'prompt', text: "DSM" }, { t: 'cmd', text: "86 containers · 44 stacks — storage, SSO, services" },
{ t: 'prompt', text: "unRaid" }, { t: 'cmd', text: "37 containers · 21 stacks — CI runner, monitoring" },
{ t: 'prompt', text: "VPS" }, { t: 'cmd', text: "39 containers · 13 stacks — mail, public sites" },
{ t: 'prompt', text: "WARN" }, { t: 'err', text: "cAdvisor count inflated · one volume counted three times" },
{ t: 'prompt', text: "$" }, { t: 'cmd', text: "verify_infra.py — re-measure, never remember" },
{ t: 'prompt', text: "" }, { t: 'ok', text: "162 containers · 78 compose stacks ✓" },
{ t: 'prompt', text: "" }, { t: 'dim', text: "a number you cannot re-check is not a number you can defend" },
],
flow: [
{ n: '1', label: "3 hosts" },
{ n: '2', label: "162 ctrs" },
{ n: '3', label: "monitor lied", err: true },
{ n: '4', label: "re-measure" },
{ n: '5', label: "honest ✓" },
],
};
// ---------- read frontmatter ----------
const postPath = join(ROOT, 'src', 'content', 'posts', `${slug}.md`);
let category = 'devops';