My credit card statement got embarrassing in a quiet way. Not the obvious SaaS (software as a service, meaning paid subscriptions you reach over the internet) tools. The small ones, stacked up and forgotten. Password manager. Document scanner. Photo backup. Notes. Email. RSS reader. Each one felt like a few dollars a month, and each one felt reasonable on its own. Together they were about a hundred dollars a month, which works out to $1,200 a year, and none of them had raised their prices. They had just accumulated.
I already had a small home server, the kind of refurbished mini PC that lives behind the TV. It was running Pi-hole (a network-wide ad blocker) and not much else. The hardware had room for more. The migration took three months of weekends and ended up replacing seven of the subscriptions with seven Docker containers (self-contained packages that bundle an app with everything it needs to run, so you can launch it with one command). The savings are obvious. The surprises were less obvious.
Why the bill crept up
I started the audit because the renewal emails had become noise. Each one arrived, got glanced at, and disappeared into a calendar reminder that did not remind me of anything. By the time I tallied every line under $20 a month, the total was around a hundred dollars. None of the individual charges were painful. That was the problem.
The home server was the easy part. It already drew about $7 a month in electricity and had a 2TB drive with plenty of room. What I did not have was a list of containers to run, in what order, and what each one replaced. The order mattered more than I expected, because each container taught me something the next one needed. Here is the order that worked:
- Vaultwarden first, because losing access to my own credentials is the worst kind of outage.
- Paperless-ngx second, because I had been paying for cloud OCR (optical character recognition, software that reads text out of scanned images) I did not really need.
- Nextcloud for notes and calendar sync, replacing a paid notes subscription.
- Immich for the family photo backup.
- Jellyfin for the media library, replacing the largest of the seven subscriptions.
- FreshRSS for the feed reader, replacing the cheapest but most annoying one.
- Uptime Kuma last, because by that point I had six things that could break and I wanted to know when.
What each container actually does
The first two are the ones I lean on every week. The rest fill in the gaps. None of them are novel. They are the boring, well-tested options in the self-hosted community, and that is exactly why I trust them.
Vaultwarden is a self-hosted reimplementation of Bitwarden, the password manager. It runs in under 100 MB of RAM (random-access memory, your computer’s short-term working memory), works with the official Bitwarden apps and browser extensions, and supports password generation, secure sharing, two-factor authentication, and encrypted notes. The migration was almost invisible on the client side. I logged in from my phone and my browser the same way I always did. This was the container that turned me from a skeptic into a believer. Owning my own auth felt less risky than I expected.
Paperless-ngx replaced a $10-a-month cloud document service. It runs OCR on every scan, auto-files documents by tag and date, and exposes the whole archive through a single web dashboard. Everything stays on my own disk, which means I get to decide the retention policy. Setup took an afternoon, including the auto-tagging rules. The hardest part was teaching it to recognize the recurring document types from my accountant.
The other five are smaller replacements, and together they round out the savings:
- Nextcloud replaced a paid notes and calendar subscription for about $5 a month. CalDAV (a standard for syncing calendars across devices) and CardDAV (the same standard for address books) sync to my phone through the built-in apps.
- Immich replaced the family photo cloud backup, which was running around $10 a month for the tier that held all of our images.
- Jellyfin replaced a streaming subscription for personal content, which was the largest of the seven at around $15 a month.
- FreshRSS replaced a paid feed reader for a few dollars a month.
- Uptime Kuma watches all of the above and sends me a chat message when something stops responding.
The real cost of running the stack
The honest math is what made the case. The server draws about $7 a month in electricity. An external drive for backups adds another few dollars. All in, the operating cost is around $20 to $30 a month, which works out to $240 to $360 a year. Compared to the $1,200 I was paying, the savings are obvious even before you count the upside of owning the stack.
The catch is upfront time. The first weekend covers reverse proxy setup (a small server that routes outside requests to the right container on your home network), SSL certificate configuration (the encryption that gives you the padlock in the browser), the first set of backups, and learning how each container handles updates. After that initial weekend the maintenance is quiet. A few minutes per container per month for updates, plus a weekly backup verification.
What surprised me was the failure modes I did not plan for. Drives die on a schedule you cannot predict. Power supplies burn out. A container breaks after an update and needs a manual rollback. None of those are dealbreakers, and they are all cheaper than a single year of the subscriptions they replaced, but they are real and they are yours to fix. Cloud services abstract all of that away, and that abstraction is worth something even when the bill gets ugly.
A practical migration order
If you want to try this, the order matters more than the specific tools. Start with the one frustration that bugs you the most, get comfortable with how updates and backups behave, and let the next subscription renewal remind you what to add next. A weekend per container is a fair budget if you are new to self-hosting. The full seven-container stack took me about three months of weekends to land, mostly because I was learning the reverse proxy and SSL parts from scratch.
A few things I wish I had known:
- Pin your container versions. Updates on small open-source projects are not always smooth.
- Keep one critical app on a cloud service as a fallback for the first few months, until you trust your backups.
- External drives are not a backup strategy. They are a copy. Send a second copy offsite.
- The reverse proxy is the part that takes the longest. Budget extra time there.
Trade-offs
Self-hosting means you are the sysadmin. When the server is unreachable the notes app is unreachable. When a container breaks after an update you fix it or wait until you can. Power blips and internet outages affect your services in ways a cloud subscription never will. That is the price of owning the stack, and pretending otherwise would make this article useless.
Time is the second cost. The first weekend is real. Reverse proxies and SSL certificates are not hard once you understand them, but they are not obvious the first time you meet them. If you do not have a weekend to spend, the cloud services will still be there waiting, and they are a perfectly fine answer for someone who would rather pay than tinker.
Hardware is the third cost, and it is the one most people underestimate. Drives fail on a schedule you cannot predict. Power supplies burn out. A budget for replacement parts is part of the math. I keep one spare drive and one spare power supply on a shelf, which adds about $80 to my upfront cost but saves me a weekend when something dies.
For a single user with stable internet and a tolerance for occasional outages, this is a clear win. For someone running a family or a small business, the calculus gets more interesting and the cost of an outage gets higher. Either way, run a backup plan.
Bottom line
The $1,200 a year I was paying for seven small subscriptions is now $20 to $30 a month in electricity, a weekend of setup I have already spent, and a small parts budget for the occasional failure. The stack is not novel. Vaultwarden, Paperless-ngx, Nextcloud, Immich, Jellyfin, FreshRSS, and Uptime Kuma are the boring, well-tested options in the self-hosting community, and that is exactly why I trust them with my passwords and my photos. If you already have a small server sitting around doing nothing, the rest is a weekend and a learning curve.