I’ve continually had a ft in the self-hosting world, lengthy before it was called that. My freshman twelvemonth of university, I ran a website from a Linux box underneath my bed. There was several downtime whenever my roommate got tired of the fan noise and turned it off. For multiple years I ran MythTV, afterward XBMC (later known as Kodi).
Recently, I lived for a few years in India, anywhere streaming services are extremely cheap by occidental standards. We had Netflix, Disney Plus (Hotstar in India), and Spotify. After leaving India, I was unwilling to pay occidental prices for these services. But I had additionally rotate into fed up alongside the involvement treadmill, particularly for my son. We wanted to bounds his viewing choices to certain programming, but the changeless “recommended for you” and “up next” caused conflict. While there are ways to bounds satisfied to particular titles, or disable auto-play, doing this for all assistance and keeping track of whenever client applications alter and need to be reconfigured is too much work.
So, I “cut the cord” in a distinct sense, ditching streaming services for self-hosted Jellyfin. Over the way of the next twelvemonth and a half, Jellyfin opened the entrance to self-hosting many another services, reducing my dependence on haze assistance providers, and providing a greeted stability. No longer am I continually confronted alongside unnecessary location redesigns, new features of questionable value, and a barrage of e-mails concerning terms-of-service updates, binding arbitration, data breaches, etc. I peruse the publish notes of new versions of the application I presenter and decide if and whenever I desire to upgrade.
Rules
I have a few dirt rules.
With the elimination of VPN servers that run on my router, I do not disclose any services immediately to the community internet. I don’t attention how convenient it would be, or how safe an use is. Especially alongside AI-assisted hacking, I merely don’t think it’s wise. My ISP additionally uses CGNAT for its IPv4 addresses, so my residence network is not immediately reachable from the community net via IPv4. My VPN servers are lone publically routable on IPv6, a limitation that has several downsides but is workable for my use cases, and apt helps bounds unfriendly attempted connections. The biggest downside is that my VPN volition nearly never function on a community Wifi network, since these rarely recommendation IPv6. When using my phone, I can disable Wi-Fi and nexus complete mobile data… if there is service.
I favor operating services natively whenever possible, but volition containerize complex services or those alongside many dependencies. Love: a assistance that’s a sole Go binary. A assistance that lone comes as a Docker create document and wants to run MySQL, Redis, and three another containers? I’m already looking for an alternative. If the requirements aren’t overwhelming, native is better, faster, and additional efficient. I can use the identical administration tools and commands throughout multiple services. There’s no mental overhead of having to enter this receptacle to run several command, finding out this receptacle is missing curl, that one runs busybox so all the arguments are different, or dealing alongside a virtual network and presenter harbor mapping.
Related, I don’t do Docker anymore. It’s not really a ethical position, but I grew tired of having to oversee a entirely distinct assistance authority scheme on my server. I’m already using systemd, and at this item Podman’s integration alongside systemd is excellent.
Hardware
Last twelvemonth I bought a Beelink Mini PC, specifically an S12 Pro alongside an Intel N100 processor, 16 GB RAM, and a 512 GB inner SSD. It was before the rampocalypse, so I paid EUR 180. The identical listing on Amazon is currently EUR 359. Ouch! Attached to the server is a 6 TB difficult run for media storage.
My comment on Hacker News concerning what I self-host prompted several questions concerning how all of this could run on 16 GB RAM. As I depict below, there are several choices I’ve made that decrease asset petition on my server, but ultimately it turns out you don’t need much hardware to run a lot of stuff. Obviously I’m not operating any local conclusion on this hardware, but for everything non-AI, it has fair worked out of the box, or alongside several uncomplicated configuration tweaks.
Services
In alphabetical order.
Actual Budget
Budgeting application alongside desktop clients and a web application, tradition reports, and rules-based categorization. I lone use this for budgeting and checking/savings/credit accounts. For tracking funding accounts, I use a haze service. Some day I’ll try to move distant from the latter…
While Actual Budget supports automatic transaction import from assorted banks, I don’t use this feature. Instead, following all duration end, I download the previous month’s transactions (OFX format preferred, CSV if no another option) and import them manually. This plant for me since I chiefly use Actual Budget for disbursal tracking, not… actual… budgeting.
Podman.
Audiobookshelf
Add, download and shop audiobooks and podcasts on your server, hear to them on your phone. I haven’t used the audiobook characteristic much, I set it up additional for my kids, but it has extremely nice division handling. In the former for podcasts I used PlayerFM, afterward Pocket Casts, but now unless I’m out of the home without VPN connectivity, I use Audiobookshelf.
Native.
Automatic Ripping Machine (ARM)
ARM automates ripping and transcoding DVDs (and Blu-rays, but I don’t do those). Yes, it’s 2026 and I motionless rip DVDs. Remember, we cut the cord, so not lone is this a conduit for new-to-us content, but it’s additionally a way for us to get bilingual satisfied (English and French).
Podman.
Backrest
Web UI for Restic backup software. Backups are important! Especially for Immich (photos). Restic does a fine job deduplicating and compressing backed up data, and Backrest makes it uncomplicated to oversee the retention preservation policies. Notifications in case of nonaccomplishment go to Gotify.
Native.
Beszel
Beszel is a uncomplicated monitoring dashboard that collects essential stats from agents (in the old-fashioned awareness of a small backdrop service) to display CPU load, recollection and disk usage, temperature, battery, etc. Helps me keep an eye on assorted another hosts I have about the home (several Rapsberry Pis and a Proxmox collection that may be the topic of a forthcoming post).
Native.
Caddy
Caddy is a web server and reverse proxy. Early on I didn’t comprehend the value of a reverse proxy, and I idea I would be fine accessing my services alongside a local DNS name, or equal IP address, and harbor number. But afterward I started adding additional and additional services, and several required HTTPS. So I got a domain name (not this one) and set up Caddy to automatically get LetsEncrypt SSL certificates, and now nearly all of my services are accessible on my LAN (or complete VPN) alongside HTTPS and affable subdomain names. Adding a new assistance is a quick edit to the Caddyfile.
Native.
Cockpit
Cockpit is a web-based admin console for the server. It uses normal scheme authentication methods. For me, it’s chiefly helpful for spotting unsuccessful services whenever no notifications are set up for them.
Native.
Forgejo
Forgejo is a fork of Gitea, and deploys as a sole binary. Github’s uptime is the butt of a lot of jokes these days, but I additionally value the speed of having my own git remote. Eventually I’ll set up CI/CD and runners, if lone to deploy this blog.
Native.
Web-based RSS reader. These days I basically sojourn two websites, though, so I’ve not been using it much. I do subscribe to the Github releases of several of the services I self-host so I can inspect out the features and bugfixes in new versions.
Native.
Frigate
Network video recorder (NVR). I archetypal started alongside Zoneminder since I’m of a certain age. But it became apparent that Zoneminder is former its prime. Frigate has been fantastic. I run it alongside 8 IP cameras. It provides alerts for group and cars entering the driveway, integrates alongside Home Assistant to power assorted automations (e.g., whenever a individual is detected in the backyard, rotate on the camera floodlight). I may compose a forthcoming article alongside several particulars concerning my IP camera adventures.
I run all of my cameras at lesser resolutions than they support, chiefly to evade Wi-Fi network congestion. Most cameras additionally assistance an equal lower-resolution RTSP substream, which is what Frigate uses for motion and entity detection. Keeping the camera resolutions low avoids excessive CPU and recollection from video processing, and excessive disk use from recordings. They are fine adequate to acknowledge faces, and privacy laws in my nation prohibit filming community entitlements of way, so my cameras are not aimed at distant points.
Podman.
Gonic
Subsonic-compatible server written in Go. I purchased a perpetual Subsonic licence a lengthy period ago, but the first project is ancient and the contemporary alternatives are better. I run two distinct instances of Gonic, one serves kid music, the another serves grownup music.
Native.
Gotify
Simple notification assistance written in Go. Many self-hosted services immediately assistance Gotify notifications, or can dispatch them via a tradition HTTP POST. In conjunction alongside Uptime Kuma, I use Gotify to get notifications concerning any services or devices that are down, what my kids are observing on Jellyfin, whenever a new podcast event is accessible in Audiobookshelf, etc.
Native.
Home Assistant
Home Assistant likely deserves its own post. It’s fantastic, and I cannot ideate trying to accomplish the identical things inside a proprietary ecosystem akin Google Home, Amazon Alexa, or Apple Home. Things are improved now that equipment manufacturers are standardizing on protocols akin Matter, but the authority and elasticity you get alongside Home Assistant is difficult to beat. It has a steep learning curve, though, and I need to think concerning realistic ways to grip possible server nonaccomplishment without compromising the functionality of my home.
Podman.
Homepage
At several item I realized I was operating so many services, I needed another assistance fair to keep track of them all. Homepage was a fine solution. It has widgets for nearly all the services I run, so I can get a quick overview of what’s going on, or fair a quick nexus to the subdomain of a service.
Podman.
Immich
Google Photos alternative. I was tired of Google continually promoting paid retention plans in their apps. I was capable to oversee my retention space, but my spouse was continually concerning to run out of room. We moved to Immich final year, fair following type 2 was released. It’s much faster to burden pages complete of photos whenever all the network action is inside your house. I’ve arrive up alongside a resolution for sharing albums alongside family, as well. Still a lot of activity to do alongside Immich - I have many duplicates, and now that retention isn’t a concern, I’ve been small disciplined concerning culling photos and videos.
Podman.
Jellyfin
As I mentioned in the introduction, I’ve self-hosted media for a lengthy time, going all the way rear to MythTV twenty-some years ago. Jellyfin is assertive concerning its media organization, but it mostly plant well. I lone use it for movies, TV, and residence videos, so I can’t conversation to its another features (e-books, music, photos, etc.). While my son motionless remembers Netflix, he is satisfied alongside Jellyfin. I value the deficiency of auto-play, never seeing recommendations, and not having to scroll former a bunch of refuse to discover what I desire to watch.
One of my ways of managing asset petition is by mostly preferring 720p media complete 1080p or higher. And evidently whenever ripping DVDs, it’s either 576p or 480p. I do have a 4k TV, but it’s not extremely large, and during I can inform the difference in resolution between SD and HD, for nearly everything, 720p seems to be fine adequate for me.
Podman.
Music Player Daemon (MPD)
Sometimes there are solutions that fair work, and don’t really need to change. I think MPD is one of these. It’s been about for 23 years. While Gonic is awesome for listening to music on my phone, equal streaming music from residence to my phone during I’m distant via VPN, MPD is how I perform music through Snapcast to the entire home audio system. I run two instances of MPD, one for music, and one for podcasts.
Native.
PocketBase
I used to keep track of transactions and receipts for particular accounts (HSA, 529, etc.) in a SQLite document I accessed immediately alongside SQL Workbench/J. But things became additional complex as I moved between countries, currencies, and distinct coverage systems, and additionally wanted to recommendation my spouse the capability to act transactions. I migrated to PocketBase, which is ultimately motionless fair a SQLite file, but alongside a nice web-based administration frontend that I abuse as a generic CRUD frontend. It’s uncomplicated adequate for my spouse to use as well, and I can motionless run arbitrary queries against the underlying repository file.
Native.
Readeck
Readeck lets me tag and archive copies of material I read. I was a dense Zotero person in alumnus school, but I’ve not needed to compose a bibliography in years. However, I motionless peruse things that I desire to justify I can admission later. I tried Wallabag first, but it had difficulty filing things that were paywalled, equal whenever I was logged in on my phone. In contrast, Readeck volition archive what my phone is seeing and shop it on my server.
Native.
Samba
Samba provides shared network storage, making it uncomplicated to copy records to and from the server, or portion crucial documents alongside my wife. It’s comic how a document sharing protocol archetypal developed in the 1980s and most connected alongside Windows remains the finest choice for cross-platform document sharing on a LAN.
Native.
slskd
Native.
Snapcast
Snapcast provides whole-house synchronized audio. Think Sonos, but without the costly vendor lock-in and planned obsolescence. This additionally deserves its own post. It’s complex to set up, but it plant really well. I eventually scheme to acquisition several additional devices chiefly for use as Snapcast receivers.
Native.
Syncthing
Syncthing is part of a backup scheme for my photos in Immich. I’ve set up a one-way sync (receive only) on my Macbook, so that a copy of all the photos in Immich eventually create their way to my Macbook’s external drive.
Native.
Transmission Daemon
This one is additionally self-explanatory.
Native.
Uptime Kuma
After a few instances of my spouse saying “X isn’t working” and needing to restart a assistance manually, I realized I needed a way to keep track of what services were running, or not. Uptime Kuma is uncomplicated but has a helpful set of features. I can ping devices to justify they’re online, inspect the position of Podman containers, appearance for HTTP 2XX reply codes from assorted services, or equal parse a JSON payload and extract several particulars for the health check. If item goes down, I can dispatch a Gotify notification (after a few retries, of course).
Podman.
Vaultwarden
Self-hosted type of Bitwarden. For years, I used KeePass, but never had a fine syncing solution, so fair avoided logging into things on my phone. Meanwhile, my spouse used LastPass, which had assorted breaches and incidents, furthermore autofill fair not operating extremely well. Migrating her to KeePass was not practical, and I settled on VaultWarden, which is an open-source API-compatible reimplementation of BitWarden that plant alongside the authoritative BitWarden clients. I’m not a huge fan of the BitWarden browser extension, but it’s mostly fine. The Android use is fine enough, and syncs seamlessly and automatically whenever I’m connected to my LAN; otherwise, I can nexus via VPN and manually trigger a sync if needed.
I am a small concerned that Bitwarden may eventually rotate into antagonistic to VaultWarden and interrupt the client compatibility. At this point, the lone another important Bitwarden compatible client I’m conscious of is Keyguard, which does not have an open origin licence and uses a freemium model.
Podman.
Vikunja
I’ve been a Trello person for concerning a decade. But following Trello’s disastrous multi-day outage before this year, I decided to discover a self-hosted alternative. I ruled out item that engaged spinning up a PostgreSQL or MySQL repository for a assistance that volition assist two users. Vikunja uses SQLite by default, although it can be configured to use another repository backends. It’s not perfect, and the Android use has several missing features, but it’s fine adequate for me. Single binary deployment? Yes, please.
Podman.
Yubal
Simple web use to download YouTube Music playlists. I normally use yt-dlp for downloading YouTube videos, or NewPipe for observing on my phone, but Yubal volition correctly name, organize, and tag music downloaded from YouTube Music.
Podman.
Non-Services
Here are a few things I don’t self-host, tried but decided against, or am improbable to try.
The *arr Stack
Sonarr, Lidarr, Radarr, etc. Every period I peruse concerning environment it up, it fair appears akin a resource-intensive disorder that’s basically prone to common breakage. That’s the contrary of what I’m looking for whenever choosing self-hosted services.
Collabora Online
While it would be nice to entirely part ways alongside Google, it’s difficult to attack Google Docs as a extremely convenient and effortlessly accessible way to shop and portion information. Still, I choose LibreOffice Writer and Calc unless I have a particular logic why the document needs to be in the cloud. Since I already have a shared network drive, it seems pointless to run a assistance akin Collabora Online (a web-based agency suite) alternatively of fair using LibreOffice locally.
Firefly III
I tried Firefly III before Actual Budget, thinking I needed built-in assistance for multiple currencies. It was a complex setup, involving multiple containers, including a receptacle fair for importing data. Actual Budget was much simpler to set up and use. For my abroad prosperity accounts, I have my own uncomplicated manuscript to grip toggle charge conversion, so everything in Actual Budget stays in USD.
Owntracks
I akin Google Maps Timeline, but following Google constricted the location data to the idiosyncratic device, I hoped to discover a self-hosted version. But I could never get the OwnTracks Android use to consistently study my position, no matter how many power division or location settings I tried. Dawarich is another choice in this space, but it wants to run “at least” four containers (PostgreSQL, Redis, Sidekiq, web application). For me, that’s not a compelling commerce of resources required versus value I’m apt to obtain.
Music Assistant
Music Assistant power activity improved for you if you don’t already have a music setup you like. In my case, I already had Gonic, Snapcast, and MPD operating well. Music Assistant felt akin it wanted to “own” everything; for example, it seemed to continually rearrange my Snapcast equipment groups.
Self-hosting e-mail seems akin a lot of activity for extremely small benefit. I cannot hazard not being capable to dispatch or obtain e-mails. Eventually I would akin to passage distant from Gmail to a paid provider.
Conclusion
That’s 17 native services and 11 Podman services, all managed by systemd. htop currently shows concerning 7.5 GB of recollection in use, and CPUs fluctuating between 30% and 40%. It turns out this Mini PC can run a lot! Given how costly device hardware has rotate into because of the AI crunch, I anticipation we’ll continue to see self-hostable projects that prioritize simplicity and efficiency.