The Day I Decided My Homelab Needed Therapy (A Notification Infrastructure Journey)
Or: How I Learned to Stop Worrying and Love SMTP
The Problem Nobody Asked Me to Solve
So there I was, traveling for work, when I had a thought that would consume my entire evening: “My homelab notifications aren’t elegant enough.”
You know you’ve gone too deep into homelab territory when you start critiquing the aesthetics of your alert delivery system. Most people get a text when their server is on fire. I apparently needed a philosophy.
I had Gotify. It worked. Proxmox and TrueNAS were happily shouting at it. But I’d discovered ntfy, and like a middle-aged man buying a sports car, I decided I needed to replace something that was working perfectly fine with something shinier.
The Planning Phase (Airport WiFi Psychology)
While my coworkers were watching Netflix on the plane, I was sketching notification architecture diagrams in my notes app. This is what homelabbing does to you. You become the person who finds SMTP routing genuinely exciting.
“I’ll just add ntfy,” I thought. “Quick weekend project.”
Narrator: It was not a quick weekend project.
But then Claude (my AI buddy who I probably talk to more than my actual friends) asked the fatal question: “What about Apprise?”
Oh no.
Now we weren’t just replacing Gotify with ntfy. We were building a notification orchestration platform. Because apparently, I’m the kind of person who needs enterprise-grade alerting for a homelab that primarily serves cat photos via Immich.
The “While I’m At It” Cascade
You know that thing where you go to fix a light bulb and end up rewiring the entire house? Yeah.
- “I’ll deploy ntfy” became “I’ll deploy ntfy + Apprise + Mailrise”
- Which became “In a new dedicated LXC”
- Which became “With proper Docker Compose”
- Which became “And expose it securely to the internet”
- Which became “And migrate all my services”
- Which became checks watch “…and there goes my entire evening”
The mission creep was real, folks.
The Great Memory Incident
So I spun up the new Debian 13 LXC, gave it a whole 2GB of RAM (luxury!), and fired up the stack.
Everything started up beautifully. Containers running, logs looking good, and then…
::LXC immediately maxes out CPU and RAM and becomes completely unresponsive::
Me, frantically checking Proxmox stats: “98.19% CPU, 99.97% RAM used… WHAT THE HELL IS APPRISE DOING?!”
For a brief, terrifying moment, I thought Apprise was mining Bitcoin or trying to achieve sentience. The LXC was so locked up I couldn’t even SSH in.
From the Proxmox host, I tried the graceful approach:
pct stop 125 --force
Proxmox: “Unknown option: force”
Right. Because when would you ever need to force stop a container? /s
Eventually got it killed, doubled the resources (because throwing RAM at problems is the homelab way), and discovered… Apprise was using 3.3GB of memory on startup.
3.3 GIGABYTES. FOR A NOTIFICATION ROUTER.
Turns out it was some weird startup anomaly. Restarted it, and Apprise settled down to a totally reasonable 2MB. But for a hot minute there, I thought my notification system was preparing to launch Skynet.
The SMTP Detective Story
With the stack finally stable, I started testing. Sent a notification via Apprise to ntfy and… nothing.
Logs showed Apprise received it. Logs showed it sent to ntfy. But ntfy? Crickets.
Ten minutes of head-scratching later, I realized: I was testing against the internal IP but viewing the external domain in my browser. The notifications were going to the internal ntfy, but I was watching the external ntfy through NPM.
Facepalm.
Fixed the NPM config, refreshed the browser, and BOOM – there were all my test notifications, patiently waiting like dogs at the door.
The Mailrise Revelation
Then came Mailrise testing. This was supposed to be the easy part. SMTP goes in, notifications come out. You can’t explain that.
Except Mailrise kept rejecting everything:
ERROR: Recipient is not configured: root@localhost
ERROR: Recipient is not configured: critical@mydomain.com
ERROR: Recipient is not configured: literally-anything@anywhere.com
I had configured routing! I had a default catch-all! What more did it want?!
Turns out Mailrise’s “default” isn’t actually a catch-all. It’s more like a “default suggestion that we’ll completely ignore.”
The fix? Just… explicitly configure every recipient email address. No wildcards, no clever routing, just good old-fashioned manual labor.
Once I figured that out, the beautiful moment arrived:
swaks --to notifications@mydomain.com --body "Test from Mailrise SMTP"
And on my phone, 3,000 miles away from my homelab:
๐ฑ ding “Test from Mailrise SMTP”
Chef’s kiss.
The TrueNAS Plot Twist
TrueNAS Scale has moved the email settings in Electric Eel (version 25.10), and apparently nobody at iXsystems thought to tell anyone where.
“Just go to System โ Email,” they said.
There is no System โ Email.
“Try Alert Settings!”
No email config there.
“General Settings?”
Getting warmer…
Turns out it’s hidden in a “Email Options” dialog that you access by clicking a button that’s in a place I would never look first. It’s like iXsystems hired the same UX designer who did the Windows Control Panel.
But I found it, configured it, sent a test and…
ERROR: Recipient is not configured: myemail@gmail.com
TrueNAS was sending test emails to MY personal email, not to the configured recipient. Because of course it was.
Had to override the recipient in Alert Settings, because TrueNAS apparently believes in a separation of church and state when it comes to email configuration.
The Mobile Moment
After hours of debugging, configuring, and questioning my life choices, I installed the ntfy app on my phone.
Added my server: https://ntfy.mydomain.com Entered my credentials. Subscribed to topics.
And there they were. All my test notifications. From hours of debugging. Staring at me like a digital graveyard of my evening.
But then I sent a fresh test from Proxmox and…
::Phone buzzes in my hand::
IT WORKED.
I was in a hotel room, 3,000 miles from my homelab, on cellular data, and my Proxmox cluster was notifying me in real-time.
I may have done a small victory dance. Don’t judge me.
The Scoreboard
What I started with:
- Gotify (working perfectly fine)
- Two services configured (Proxmox, TrueNAS)
- Local-only notifications
What I ended with:
- A dedicated Debian 13 LXC
- Three containerized services (ntfy, Apprise, Mailrise)
- Nginx Proxy Manager reverse proxy with SSL
- Websocket support (because real-time is important)
- Proxmox VE notifications โ
- Proxmox Backup Server notifications โ
- TrueNAS Scale notifications โ
- Mobile app configured and working externally โ
- Gotify still running (because I’m not crazy)
- A notification architecture that could serve a small enterprise
- An evening I’ll never get back
- Zero regrets
Lessons Learned
- “While I’m at it” is a dangerous phrase in homelab contexts
- Apprise briefly becoming a RAM monster is apparently normal
- Mailrise’s “default” is a lie
- TrueNAS hides email settings like they’re state secrets
- Docker Compose V2 will yell at you about the version attribute
- NPM websockets are critical and easy to forget
- The satisfaction of seeing your first external notification is worth every frustrating minute
The Real Victory
You know what the best part is? Now when my TrueNAS has a disk failure at 3 AM, I’ll get a beautifully routed, SSL-encrypted, authenticated notification delivered via SMTP โ Mailrise โ ntfy โ my phone.
Is this over-engineered? Absolutely.
Did I need to spend an entire evening on this? Definitely not.
Would I do it again?
::Looks at the 20+ other services that still use Gotify::
…ask me after I’ve had some bourbon.
Epilogue: The Gotify Question
I still have Gotify running. Both systems are sending notifications in parallel now, like some kind of redundant notification democracy.
Eventually, I’ll decommission Gotify. Eventually.
But today is not that day.
Because homelabbers don’t remove old infrastructure. We just add new layers on top and call it “high availability.”
Stack deployed: ntfy + Apprise + Mailrise
Services migrated: 3
Hours invested: Let’s not talk about it
Services still to migrate: ~22
Will I actually migrate them all: Ask me in 6 months
Was it worth it: ::notification buzzes on phone:: …yeah, it was worth it.
If you enjoyed this journey into notification infrastructure madness, check out the others where I document other homelab adventures, like “The Great 3 AM Network Mystery” where I spent three weeks debugging a problem I created six months earlier while drunk.
Homelab: Because sometimes the journey is more important than the destination. Or the budget. Or your free time. Or your sanity.