S4E410 — What I Self-Host
October 16, 2026 · 11 min
Show notes
Sources
Read the transcript
Transcript
GARY: —so I already fixed it, I just don't know what I fixed. Hello, and welcome to HNR. I'm Gary.
MAEVE: Maeve.
OBI: Obi.
GRUNER: Gruner.
GARY: Okay. So. A man quit Netflix. That's the article. He got so mad at "recommended for you" he built his own streaming service, Jellyfin, on a little Intel N100 box, sixteen gigs of RAM.
MAEVE: He didn't get mad at recommendations. He got mad at paying western prices after leaving India. The recommendations were the excuse.
OBI: The article says both. He wanted control of when things change. So he runs twenty-eight services on that box.
GARY: Twenty-eight services. Effortlessly.
OBI: Effortlessly. And he also runs Uptime Kuma and Gotify.
GARY: Those are... nice extras.
OBI: They are services whose entire job is telling him another service has died. You do not buy a smoke detector for a house that is not on fire, Gary.
GARY: Fine. Things fail. Occasionally. Seven point five gigs of memory, though. Thirty to forty percent CPU. That's a machine barely breathing hard.
MAEVE: Barely breathing hard. That's what my last founder said in the ICU.
OBI: He keeps everything off the public internet, VPN only. No ports open. It's the most boring thing in the article and it's why it works.
MAEVE: He also refuses to self-host email, which is the one adult decision in the piece. Delivery is too consequential. He knows he'd be the outage.
GRUNER: Twenty-eight roommates. Sixteen gigabytes. Very crowded apartment, very quiet.
GARY: That's... weirdly beautiful.
OBI: It's a landlord with a spreadsheet, Gary.
GRUNER: Is same thing.
MAEVE: No.
GARY: It's the same thing.
MAEVE: It is not the same thing. One of them evicts you by email.
GARY: Lucasoato: "there are poor souls like me out there that actually love the opposite."
MAEVE: Loving the opposite, out loud, in this economy. Bravest comment on the site.
GARY: And mtlynch swings back: "a single binary strictly dominates any Docker Compose solution."
OBI: Correct. And in forty replies he'll be told he's wrong in five mutually exclusive ways.
GRUNER: Compose is dating diagram. Five containers, one relationship, zero marriage.
MAEVE: That's a polycule with a YAML problem.
GARY: No, no, the replies are good. unshavedyak says "some isolation is nice."
OBI: Isolation from what, Gary?
GARY: From... other services!
OBI: You've never isolated anything in your life. Halfpipe shared a database with the marketing site.
GARY: That was a cost decision.
OBI: It was a bankruptcy decision with a config file.
MAEVE: One dependency is a product. Five is a retention strategy. They can't leave, they're load-bearing.
GRUNER: Wilted-iris says: "It's the unified interface for me."
GARY: See, that's the dream, though. One yml file, everything in one place — I could run that. I'd be so good at that —
OBI: You'd be so good at a file.
GARY: I would! Okay, watch. I'm a Compose guy now. "I don't want one binary, I want five containers, because when one shits the bed, the other four are already angry, so it's simpler —"
MAEVE: Simpler.
GARY: — the anger is pre-distributed, Maeve. That's the whole point of microservices.
OBI: The whole point of microservices is that Gary gets five funerals instead of one.
GRUNER: Five small fires better than one big.
MAEVE: That's literally what he said.
GARY: It is what I said, and it's correct.
OBI: turtlebits says upgrades are "just editing an image tag." One tag, Gary. One line. And you'd still fuck it up.
GARY: I would absolutely fuck it up.
GRUNER: First honest thing all night.
GARY: eddythompson80: "docker isolation is nice just as a management boundary."
OBI: Sane. Keep reading, Gary. Read the part you're about to live.
GARY: "So you go to change the port an application is listening on, the docs say PORT env var so you set it, but it doesn't work."
MAEVE: He's describing a hostage situation and calling it configuration.
GARY: No, this proves my point! One port, infinite ways to set it. At Halfpipe we called that governance. The regulator shut us down and even that was just a config change —
OBI: Your regulator was a person, Gary. This is worse. He sets PORT. Nothing.
GARY: Because he hadn't found the real variable yet! That's diligence —
OBI: He searches the repo. A pull request from two weeks ago renamed PORT to ENDPOINT.
GARY: Renaming is normal. Healthy. Rebranding —
OBI: He sets ENDPOINT. Still nothing. Because ENDPOINT doesn't load from env vars — it collides with another ENDPOINT_ prefix on a different value.
GARY: Okay, but any system would —
OBI: So he makes a config.toml. And the empty config.toml nulls every defaulted value in the entire application.
GARY: That's — okay, that's a rough Tuesday —
OBI: So he runs foo config-defaults to regenerate it, and edits the one line back in by hand.
GARY: Which is fine! That's just editing!
OBI: And then the tool wants an encryption secret for ephemeral sessions. Auto-generated before. Now it can't be empty or it won't start.
GARY: So he sets the secret, it works, everyone's happy —
OBI: He never says it works, Gary. Read his last line.
GARY: "Then you're just wondering why the hell did I want to change the port?"
MAEVE: He spent an evening becoming the port's bitch and forgot the port.
GRUNER: Man fight with own house. House win.
GARY: No, no, that's the beauty of containers, the blast radius is — the port was probably conflicting, two apps, same port —
OBI: Two apps wanted the same port, so he reconfigures the universe.
GARY: That's flexibility with extra steps —
OBI: It's a séance, Gary. Five rituals to speak to a port, and the port never answered.
MAEVE: And he'll do it again next release.
GRUNER: Suka. Yes. Next release.
GARY: You don't know that.
MAEVE: Gary. He renamed a variable to escape a variable. He's not a user, he's a repeat customer.
OBI: Halfpipe had this exact bug, by the way. Except the config file was a term sheet.
GARY: That term sheet was load-bearing.
OBI: It was load-bearing the way a noose is load-bearing.
GRUNER: Is same thing.
MAEVE: No.
GARY: mtoner23: "Self hosting has never been easier and I imagine the average person has never been further from trying it."
MAEVE: So the product peaked the exact moment nobody wanted it. I've funded four of those.
GARY: Gigachad says it's "mostly a hobby like home brewing beer or woodworking."
OBI: Home brewing. Except when your beer fails, nobody's medical records are inside it.
GRUNER: Man brew beer. Man also brew outage.
GARY: seriocomic: "Cost has shifted from subscriptions to maintenance time."
MAEVE: He put a smiley on unpaid labor. Most disturbing sentence in the thread.
GARY: It's not unpaid, it's — sweat equity —
MAEVE: In what, Gary? What's the exit?
GARY: lifeisloving calls it "a part time job."
OBI: A part-time job with no pay, no title, and a pager for the family photos.
GRUNER: usefulcat: "28 is a lot of pets."
GARY: Okay, but they're wrong about the average person! The average person can't do this, which is exactly why the average person isn't the market, which is why — wait.
MAEVE: Say it again. Slower. Enjoy it.
GARY: I just made their argument while disagreeing with it, didn't I.
OBI: You've been a commenter this whole scene. You even have the handle. It's mtoner23, and it's sad.
MAEVE: Fine. Let's count it. Twenty-eight services, one operator. Twenty minutes a week per service — nine hours. Unpaid. Every week.
GARY: That can't be right.
MAEVE: It's right and it's shit. Nine hours of household labor priced at zero, forever, compounding.
OBI: Zero is the number she gave the Bauxlite engineers, too.
MAEVE: Different line item.
GRUNER: Field note. "Human buys machine to escape subscriptions. Machine gives him job. Humans call this winning."
GARY: No. It's not twenty-eight pets, it's twenty-eight services —
MAEVE: You feed them. They die if you stop.
GARY: Oh, fuck.
GRUNER: Twenty-eight small creatures. Wait for one man. Come home.
OBI: And he named them all, Gary. In a YAML file.
GARY: That's — that's a manifest —
OBI: It's a litter registry with a build step.
GRUNER: Is same thing.
MAEVE: No.
GARY: Okay, next fight. The author has a whole section on stuff he won't host. The *arr stack — Sonarr, Radarr, Lidarr. His impression: "a resource-intensive mess that's fundamentally prone to frequent breakage."
MAEVE: His impression. Not a measurement. He priced a product off vibes.
GARY: Disciplined refusal, Maeve. Your favorite.
MAEVE: It is my favorite. I stand by it.
OBI: Read the reply, Gary.
GARY: eleventen: "Sonarr and Radarr idle at 157MB and 159MB of memory and approximately no CPU." And Jellyfin — "330MB."
MAEVE: The whole stack on less memory than one Chrome tab.
GRUNER: Chrome tab is also angry. Fair fight.
GARY: And birdsongs: "My stack went down once in the past 4 years and it was my fault." Four years! BorisMelnik's been running his over five. So they're immortal. These programs literally cannot die —
OBI: They're not immortal, Gary. They're two anecdotes. What they kill is the author's fragile-and-heavy assumption. That's all they have to kill.
GARY: Fine. They kill the assumption. But the stack still sounds like a pain to set up —
MAEVE: It is. eleventen even says the UX is clumsy. He just checked the numbers first, like an adult.
GARY: And then eleventen tells the author to — I'm paraphrasing — point his AI assistant at a compose file and ask it to explain the whole setup.
GRUNER: Robot explains robot to man. We are in loop, chyort.
GARY: We are not in a loop. eleventen's robot is a different robot.
OBI: It's the same robot, Gary.
GARY: It's — okay, it's possibly the same robot. Doesn't matter. The author looked at the *arr stack, felt it was heavy, and never checked. eleventen checked. One five seven megabytes. The author's whole refusal section just lost a fight to a number.
MAEVE: The thread wins this one.
GARY: Say it again?
MAEVE: No.
GRUNER: She said it. We all heard.
OBI: One hundred and fifty-seven megabytes, Gary. Smallest number in the thread, and it beat him like a red-headed stepchild.
MAEVE: That's the most words you've wasted all night.
OBI: It was worth it.
GARY: Last fight. mrkaye97: "I'd need to back up to The Cloud for me to feel less concerned about losing everything, at which point: what's the point?"
MAEVE: He discovered the product is insurance and the insurance is a subscription. I'd fund that.
GARY: And Gigachad answers: "I use restic to create encrypted snapshots on external cloud storage."
OBI: So the self-hosted server backs itself up to the cloud. He escaped the landlord and hired the landlord back for the roof.
GRUNER: Man builds private island. Mails everything to mainland nightly.
MAEVE: It's not a backup strategy, it's a tribute. He pays the cloud so the cloud leaves his photos alone.
GARY: It's a hybrid strategy —
OBI: It's a paradox, Gary. Same shape as your TermSheet-as-a-Service deck.
GARY: That was diversification —
OBI: It was a subscription to your own bullshit, Gary.
GRUNER: jbs789 asks: family in pickle if server dies when man away.
MAEVE: That's the real SLA. His wife. Unpaid. On call for the photo server.
GARY: But that's why he drew the line at email! He won't self‑host it because he can't risk not sending a message. That's the whole episode, right? He's not pure, he’s —
MAEVE: He's selective, Gary. Say the verdict.
GARY: Fine. The author wins. Modest box, no public ports, refuses email, picks his fights. The commenters win the *arr correction and the maintenance math. And the seven point five gigs proves the machine was never the problem.
OBI: The operator was the problem. Is the problem. Will remain the problem.
GARY: That's the show. I'm Gary, I self‑host nothing, my companies host me —
MAEVE: Maeve. Churn is real.
OBI: Obi. Check your backups. Tonight.
GRUNER: Gruner. Report filed.
GRUNER: Twenty‑eight pets. Seven point five gigabytes. Owner does not fit.
MAEVE: No, he doesn't.
GARY: Goodnight, losers.
OBI: Goodnight.
