> Sonarr, Lidarr, Radarr, etc. Every time I read about setting it up, it just sounds like a resource-intensive mess that’s fundamentally prone to frequent breakage. That’s the opposite of what I’m looking for when choosing self-hosted services.
I just checked on my *arr stack. Sonarr and Radarr idle at 157MB and 159MB of memory and approximately no CPU. Jellyfin currently idles at 330MB. I'm not sure where you got this impression from. I grant these tools are complicated and have somewhat clumsy UX, but they aren't especially heavy to run and are not fragile.
OP, point your :robot: at https://github.com/subdavis/selfhosted/blob/main/docker-comp... and ask for an explanation. It's a single compose file that illustrates how the *arrs, transmission, and jellyfin all work together. I'm sure you can set it up :)
Indeed. The other thing to point out is that, once you have set them up, they will chug along fine for years with near zero input.
Here is the stack I recommend:
* Radarr (movies) with optional second instance for 4K versions
* Sonarr (shows) with optional second instance for 4K versions
* Sonarr (anime), separate instance to have control over quality settings
* Prowlarr (tracker/indexer management)
* SABnzbd (Usenet)
* qBittorrent (torrents)
I would also recommend consulting the TRaSH guide to tune your setup and ensure you’re grabbing quality releases. From there, the next logical step is Profilarr :)
You can configure quality profile via the tags too (I do have separate profiles for anime vs liveaction).
I didn't even set the tag, as I don't intermingle them in the same directory, and automatic tagging by sub path is possible too
So I'm also surprised why someone would configure a second instance for that
“Even better” is relative. Some people like having media stored locally instead of relying on torrent streaming availability.
Usenet streaming sounds cool, but with releases being DMCAd so frequently, I don’t see how it would be practical for anything but the most recent content.
Also, I imagine that Stremio without Debrid (or equivalent) is kind of a terrible experience most of the time.
Oh cool! I have been running it happily for a bit over a year but found the interplay to be annoying. Currently working on https://github.com/tclancy/lintarr to try to "prove" rules across the stack don't conflict with each other.
I think it just sounds intimidating if one hasn't tried, but they are really well designed pieces of software, that are relatively simple to set up (just have to go through the motions and connect everything with API keys).
Highly recommend them to OP. My stack went down once in the past 4 years and it was my fault.
I've been running my instances for over 5 years, I update the Dockers every few months and that's it. I have about five users in different households that rely on it it has never missed a beat.
There's been two major disruptions in my experience.
First was Lidarr went for months last year (was it this year?) unable to search/add musicians due to complications with how they were relaying those searches. It took them a long time to refactor that part of the software and make it usable again.
Second was the retirement of Readarr, the ebook-version of this software, which was an absolute shame.
But aside from that this is pretty much set-and-forget software. Although the setting is harder than it should be, should be much easier to favour smallest x265 rips at <resolution>, lossless audio, season rips with subtitles.
I build my own version, single binary that does every thing. While I built it, I learned I cannot make it open source or distribute, bc it might be illegal to do so, so I assume many people have built that, but you're always locked into the narrowly scoped lego pieces. So I enjoy my media now, without hassles, all the features I need, none I don't. I hope one day I get to share.
Same. I made the mistake of adding the downloader to it at the start but brute forced my way through. Single Rust binary for all of the *arrs + sabnzbd is nice though. Unfortunately it is not something I am comfortable making public due to the all-in-oneness of it.
Almost all of the time went to to the downloader (usenet is more complicated than I thought). If I had just focused on the basics (sonarr, radarr, seerr) I could probably could have knocked it out in a day or so.
The bigger reason is Sonarr and Radarr opens you up to a plethora of attack vectors and realistically at this point you're probably already compromised.
I don't see how. I run them with no public ingress, no plugins or mods. I don't torrent. I'm not sure there's really any attack vector worth worrying about. Certainly no more than many of the other services I host.
Shameless plug for my web video player that is especially designed for self-hosting situations. Drop a single html file in your web server folder with your videos and you get thumbnails, library, search, subtitle support, etc.
No required third-party dependencies (just the optional Google Drive and OneDrive features). Highly customizable (colors, site logo, default features) with a JSON file the player can produce. Responsively scales for any web browser: laptop, mobile, smart TVs, game consoles, even built-in in-car tablet browsers.
> I prefer running services natively when possible, but will containerize complex services or those with many dependencies. Love: a service that’s a single Go binary. A service that only comes as a Docker compose file and wants to run MySQL, Redis, and three other containers? I’m already looking for an alternative.
Ok, I respect your opinion, but remember that there are poor souls like me out there that actually love the opposite.
A single binary accomplishes most of those things just fine. Only thing it doesn't get you is isolation, but you can isolate things if you want even then (for example, FreeBSD jails are dead easy to set up).
ok, so you're just using a container with a different name? You can put the single binary in a container and call it a jail if it makes you feel better.
Well yes, but that's the point entirely - you can easily put a binary into a docker container, or a jail, or on a VM. But when something is shipped as 5 different docker containers it is MUCH harder to extract it into something you can run without docker or in a different configuration (like sharing a postgres instance between multiple applications).
One distribution method is flexible and can be deployed however you want, the other prescribes solutions and makes any customization difficult.
I'm confused. The original post said "why docker compose? a single binary dominates any docker compose", (I assumed dominates here means wins over because it wouldn't make sense otherwise?) someone replied giving the additional benefit of containerization, then someone replied to that saying you get all those benefit from single binaries, and if you want the system isolation you can use a freebsd jail, which is like saying "if you want the benefit of containers you can use containers"
Most applications do ship in a single container. whether it's a single binary inside, or a bunch of python or js files or shell scripts is a separate issue.
Applications that ship as a list of containers are a completely different problem. Those applications are either a victim of their own success, or have developers that come from a particular background.
Are you saying it's hard to edit a docker compose file? Being one service or 5 doesn't really make things more complex. I often point servers at my own postgres container instead of spinning up an extra one (so just remove that from the compose for example). That's kind of the entire point of compose, it's so flexible.
I don't use Docker but I love reading the compose file when a project has it. It is the quickest way for me to get a high level idea of this project's architecture. It's the best documentation :)
This. Docker compose is so great that you don’t even need to use it, for it to be useful. It can describe so well the dependencies your system needs (alongside proper documentation).
It’s the unified interface for me. Updates, logs, service management, network routing, config and storage mapping are all uniform and I don’t have to wrangle many slightly different implementations of each. Isolation from installed packages is a nice bonus.
for long-running services, I've never taken the time to learn something reliable like systemd. with Compose, I can see everything I need to know in one yml file and the commands to go with it. I also don't have to really understand any dependencies or their own configuration and can cleanly remove everything associated with that service with a few commands.
You can use systemd and docker compose together. A systemd service is a single config file that runs the commands you give it, including `docker-compose` commands. Everything else about your service is still orchestrated via docker, and you can still run commands against the running containers just like before.
A big win with very little effort is systemd starting your docker compose service on boot. You have your systemd config file set `ExecStart` to call your docker-compose command, throw the config file into your systemd folder, and tell systemd to enable it. Docker compose handles the rest.
I’ve been a die hard native package or static binary proponent for a long time. I still hold that there are real advantages.
As podman has improved and compose stacks have improved, I’ve conceded that containers simplify deployment and updates and isolation, and at this point I find for me the benefits more than outweigh the hassles.
Instead of crafting a set of ansible plays that do all the manual native installation steps, I have a relatively lightweight ansible rig that reads containers and relationships desired from a manifest in inventory, then builds or modifies compose files, then just deploys. Much less futzing. And I’m more likely to keep things up to date regularly as a result
Or, increasingly, dispatch codex to handle it for me
In this way I update home assistant across multiple instances now like magic. I don’t even dread it a little anymore
Some isolation is nice. I say some because I’m told it’s security is not to be trusted, but I still like that even a non nefarious binary has ootb boundaries on what state will persist.
docker isolation is nice just as a management boundary. It's nice to be sure applications don't accidently shit all over each other. Like an application that decides to clear /tmp because reasons, or 2 random ones that both store temp state in a /tmp/state.dat for some odd reason.
My favorite is applications that conflict on ports. 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.
You look through the code (and this is before LLMs) but the config is just a labyrinth of values flowing from god knows where. So you search the repo for PORT and eventually find a PR from 2 weeks ago that changes PORT to ENDPOINT, so you set ENDPOINT, but it still doesn't work.
Then you find an issue that was opened last night that the new `ENDPOINT` value doesn't load from env vars because it conflicts with another ENDPOINT_ prefix on another value, instead you need to create a config.toml and set an `endpoint =` in that, so you do that.
Then you realize that creating an empty config.toml has now overridden all the previously defaulted values into nulls or empty strings, instead you need to run `foo config-defaults > config.toml` and go edit the endpoint one.
Only to realize that there is a secret that the tool uses to encrypt an ephemeral session. if you don't specify one, the tool would auto generate one on startup. The only downside is restarting it logs your client out which isn't a big deal. But now that you switched to config.toml you must set some value there and it can't be empty
Then you're just wondering why the hell did I want to change the port?
Docker isolation is likely good enough if you keep your kernel up to date and aren't allowing 3rd parties to run code. If you are running a CI service or something you need micro VMs. But to host your nextcloud server, docker is good enough, it's unlikely someone will both exploit nextcloud and the kernel if you are keeping them up to date.
I too prefer the Docker compose route. If you give me a single binary, I'll go out of my way to run it inside a compose stack.
I manage my home server with a script that presumes the service is running on a compose stack. So I can run stuff like `stack freshrss restart`. I don't want to touch my scripts, I just add the compose file to some expected path and the script finds it based on naming conventions.
I would rather keep things on postgres but everything wanting its own postgres container is really annoying. Postgres already has support for multiple databases, users, and access controls. I would personally prefer to just set up one postgres instance with proper backups and have everything run against that, unfortunately some self-hosting projects have fairly poor support for that.
Good article. I have many of the same services in my setup.
Self-hosting email fully is tedious/unnecessary, but what you can do is mirror your various inboxes (Gmail, iCloud, proton, non-corporate outlook) with mbsync and use roundcube or some other frontend to view emails and compose.
I use this to easily access mail from different services, and I can also send from any of them.
I also have a seperate service that watches the mail directory and sends a ntfy.sh notification for new emails.
I self-host e-mail, because I am stubborn - I have done it for 20 years. I would not recommend anyone do it if they aren't already, or if they well-and-truly want to be on call for their homelab.
In the last 20 years, I've also run into problems like:
* My brand-new ISP wouldn't allow TCP port 25 inbound, and wouldn't relent. I had to go back to the old ISP.
* SPF became mandatory at Gmail, but I didn't get the memo, and Google started bouncing my mail one random day.
* My residential IP ended up on a "policy blacklist", one it could never get off because it's blacklisted by virtue of being a residential IP, not that it did something bad.
I've never tried to set it up even though I know it can easily be done with things like mailcow.
The downside is never really knowing if your email reached your recipient (maybe it got blocked by Gmail because of your IP, maybe some other reason). If I use Gmail/proton etc, then I can be pretty sure that the other person got my email.
You'll know from bounced email and logs, which you should have monitoring setup on.
It's not trivial to run your own email stack, but it's not hard either. It's more tedious than anything. Once it's up and running, it's low-maintenance. And it's fairly trivial to avoid spam. I get vastly more spam in my Gmail than I do on my self-hosted domains.
The biggest challenge with self-hosted email is getting an IP address that's not blocked or carrying low reputation. Most VPS IPs from e.g. Digital Ocean, Linode, Hetzner, AWS, etc. are going to get blocked from Google (the strictest) and Yahoo, Hotmail/Live/MS, etc. Cloud providers often block incoming and outgoing mail ports, too. I have a Digital Ocean VPS and my account is old enough to be grandfathered into the old policy, which means my email ports aren't blocked. I used to have no trouble sending email anywhere from my VPS, until I downsized it and got stuck with an IP in a bad reputation CIDR. Now I use smtp2go for relaying outbound mail, but still handle all inbound mail. 10/10 score on mail-tester.com, and I never have any problems or need to do any maintenance.
A few major vendors (I want to say Microsoft was among them) were infamous for silently dropping email without bounce backs. They'd perform then whole protocol sequence as if they accepted the email, then simply never actually put it in that user's inbox or even spam folder.
Because it's not about setting it up, it's about not getting outgoing mail perceived as spam by someone. Borderline impossible without scale. Even doing everything correct is not enough.
Just a note on OP's hardware choice. I used to have a Beelink with the N100 CPU. That thing overheated and reboot intermittently after couple months of usage. I suspected they overclocked the CPU to look good in benchmarks. I tried to underclock in the BIOS. The temperatures dropped but the setting was reverted after the next power down. Nothing in the BIOS stuck. Their support was worse than useless. The machine ended up as spare parts.
You are better off getting the used business mini-PC from HP/Dell/Leveno/Asus. They have better specs and run great.
Just another data point, I got a Beelink S13 Pro N150 running similar things as OP and haven't had any issues. I made changes in BIOS (set "Chipset > PCH-IO > State After G3" to S0 so it boots up again after regaining power) and they are sticking for me.
Most likely something wrong with the cooler, maybe it's not making proper contact with the CPU. Should be repairable if you give it a try, but yes, the used thin clients are higher quality.
I did clean the thermal paste between the CPU and the heat sink, and re-applied new thermal gel. That didn't help. It was the raised voltage preset in the BIOS. If I lowered the voltage, the temperature stayed low and it would run fine, until the next power down reverting the BIOS changes. The box was too small, the heat sink was too cheap, and the fan was too lacking to be a proper overclocking setup. It would run fine out of the box for couple months until the CPU and hardware worn out due to stress and heat.
Hmm that's too bad. I have bought a few of those (different models) over the years to use as HTPCs for different family TVs. Only one had cooling issues (bad fan bearings). I avoid the extra small ones and just get the NUC-like ones.
How do people use let’s encrypt on a host that is not accessible from public Internet? Do they manually renew every three months through DNS challenge?
> . I do have a 4k TV, but it’s not extremely large, and while I can tell the difference in resolution between SD and HD, for almost everything, 720p seems to be good enough for me.
I am actually jealous of you, I can tell the difference between 4k low bitrate and 4k high bitrate, 1080p and 720p are like mud to my eyes.
In my experience, when something involves words like "declarative", "deployment", "docker", "k8s", that's a sign that it will actually involve more fiddling rather than less. But that's just me.
Pets are OK sometimes! They do need care and feeding, though; some of us don't see that as chores, instead delightful hobbies. I can definitely see the perspective of "there are better things to do", especially if you don't like those things.
There is something satisfying in handling a home server as cattle though!
I don't do it because I don't care; I do it because it is super satisfying when it has been boringly running for weeks without me doing anything to keep it up beyond paying the electricity bill, upgrades are extremely predictable, etc.
Especially now when you can snap your fingers and get a semi responsible codified version. Heck just do what you want to them ask the LLM to port your work to something marginally better than a totally hand cobbled bucket of bits system.
That’s what I’ve been doing. Managing this stuff by hand is awful and I’m not a sysadmin who is good at it. I just added single sign on to my home network for a wide variety of various services. Some of them didn’t even support SSO but a quick AI patch fixed that. There is no way I would even attempt that by hand let alone succeed.
I saw statements to the effect of “this would be nice but it’s a lot of work” several times in the post. I don’t understand why that has to be a blocker anymore. All this tedium is gone.
Just FYI you can get a M1 Macbook Air with a broken or cracked screen for about $250 on eBay. It's a headless device at that point but it has a keyboard and touchpad.
I use it for my Home Assistant setup and more. It still has headroom. No fan, very low power consumption. Not true Linux container stuff but pretty much everything works on it in this area.
My go-to for low power consumption is a Chromebook running some vanilla flavor of Linux. I have some HP units that will run for almost a day on battery with the lid closed. $25<$250.
I'm puzzled that OP seems stumped on syncing keepass when they're already using syncthing. I've been using keepass+syncthing for years, and I've never had any issues.
Heya, nice read. I’m wondering how you managed to get LetsEncrypt certs minted when your caddy isn’t exposed to the public internet. Doesn’t LetsEncrypt need to make a request back as part of the handshake to mint/refresh the certificate?
Would love to know as I wanted to do the same in the past and ended up self signing certs.
With some small systemd configs each native app is essentially a container these days. The overhead of unique kernels per app would really restrict what could fit on a small box like this
Like the other person said, proxmox allows containers or full VMs, and the base OS takes less than 2 GB RAM.
My jellyfin LXC idles at a few hundred megs of ram, shares the base debian kernel, and if anyone does ever break in, they don't get access to anything else, anywhere else on my server. (All media is also mounted read-only to the jellyfin LXC.)
I really, really like it, just set it up recently. Everything in its right place.
Great write up, thanks for sharing. I run some of the services mentioned, but got some good ideas from the article and the comments.
One suggestion in place of MPD is lyron (https://lyrion.org/). I’ve used MPD for years but recently switched to lyrion and for me, it’s a lot easier and suitable when you have many clients. It’s nice to have a single (nice) UX/UI for my music and all the “speakers” on the local network.
I don't know why so many people host personal forgejo / gitea instances. You only really ever need a server with ssh access (and cgit if you really want a web interface).
The best thing to self host (if you have some international family/friends you trust) is a VPN. Get each household a raspberry pi joined into one vpn. It means you actually get local tv to work (unlike Nord vpn etc). Each pi sits on a guest network so traffic passing through can't touch anything in the house
I've been building and self-hosting my own analytics platform[0] for 13+ years and never had any major issues with it.
The advantage is that if I do want a specific feature, I can just add it, and I am never worried about subscription limits or surprise charged, because I host it on a fixed-cost VPS.
Things don't really need maintenance and don't really break by themselves, the only time when they can sometimes break is when changing things.
You do need to have a proper setup though, for stuff like disk space alerts, knowing the common gotchas of disabling settings that can cause issues, etc.
I am surprised author said *arr stack is a mess, it's probably one of the few things I haven't touched much since setting it up and it saves me a ton of time managing new media.
I recently bought a Lenovo Mini PC (01Q8X10) for under £300 that has a Snapdragon X1 CPU (and 32GB LPDDR5 RAM!) and it's turning out to be perfect for self-hosting running the newly released WSL Containers on Windows 11 with WSL 3 (it doesn't fully support Linux yet). Podman had some issues with WSL 3 that they're still releasing fixes for, but it's all working with that too.
Podman + systemd is how I run production workloads at work.
For us it's the perfect balance between simplicity, observability (Beszel) and reliability. Not the right tool if you have dynamic workloads but definitely the right tool for boring and predictable workloads.
At home I run K3S, it's awesome. It also breaks a lot and does add a whole bunch of complexity that I would only recommend if you enjoy tinkering and fixing things.
I second this, it's great. Commonly called "Quadlets".
I also use BGP advertised pod networks so each pod gets it's own IP address that's directly routable (l3vlan) with the rest of my network (hint, don't use 100.64.0.0/10 for that if you use tailscale), so I don't bother with NAT on the host itself or port mapping or port conflicts. It also makes caddy in front of it super easy, barely an inconvenience.
I prefer docker containers (on proxmox VMs), but that could just be the familiarity of a few years experience talking. It does add some distance from 'bare metal' but it also makes backup/restore, and therefore portability, quite simple. I backup both the VMs and the 'persistent' container data that I always create dedicated volumes for, so I have a couple of different avenues and granularity for restoring.
There's nothing else out there, that I know of, that offers improvements on any kind of scale that it would be worth my migrating to.
I do hear good things about podman, so if I was starting from scratch I'd look into that. I have one podman instance running UnifiOS, but that's only because there's no official docker compose from Ubiquiti (and maybe that's telling in itself). Podman feels more opaque to me than docker, but I have years under docker and essentially zero under podman.
I had an easier time moving a project from docker compose to k3s after wasting so much time with podman compose (maybe expected considering than k3s is still root daemon)
I personally use NixOS and a mix of systemd services and Quadlet-Nix for the few containers that have too many dependencies and moving parts. Works well.
Container manager on Synology. Don't have much choice. Some stuff can run native but it's easier to run containers.
The big issue with Synology is the really crappy db logs driver they use. If a container has been running for a while it takes an age to see the logs via the Web UI.
There are really easy to user docker app managers out there. The author says 'I already use systemd'. I mean, I guess I'm using systemd, but really I'm using e.g. runtipi with an app store, web-based config and logging, and a super easy app template. I can point claude at any project with a docker release and in a couple minutes have it show up in my app store to install, run, simple data backups, etc.
Docker containers are fine. I've moved between 5 NAS' over the years and docker has enabled it to be seemless.
rsync data directories. docker compose up. Done.
On the consumer or even prosumer nas products which have a semi-locked down system (ie Truenas/qnap/Synology). Technically you have root but as soon as you update the OS all/most of the changes end up being broken. Yes you could probably do something and deal with it. But personally I've spent too long babysitting it on the first and second nas that I no longer care.
Quadlets rule, I have tons of them configured for my professional and hobby/self-hosting services. Super convenient, I wish there was something equivalent for my Mac (launchd files just don't cut it).
Most of the time projects provide a ready to use compose file. I use dockge that provides a simple web interface for compose configs, so just paste in the compose file there and run it.
I wanted to self-host Jellyfin, but hit the problem.
It's bad at the main thing that player should offer - media playback.
If you open https://jellyfin.org/docs/general/clients/codec-support/ you can see that this doesn't support HDR and that doesn't support H265.
There is Jellyfin Desktop and it breaks when display scaling is over 100% (what year is it?). Some clients have atrocious subtitle support. And then none of them apparently can't properly pace frames so I still see judder as if I'm on 60 Hz screen (24->60 can't be even translation). But my screen can do up to 165 Hz, so that should never be the issue.
In then I just went back to playing media files from Samba share with MPC + madVR. No automation or catalogization or anything, but it is supreme at actually displaying things, and that's what it's important to me.
I used jellyfin-mpv-shim. You select what to play from any ui and it starts playing in mpv, which seems to have excellent support for everything you would want a player to do.
I understand use cases for Jellyfin and selfhost it myself for music (in combination with incredible Finamp[1]), but for movies/shows plain MiniDLNA[2] works like a charm and is accessible from any device.
Out of curiosity, do you have any concerns about backups (especially for e.g. VaultWarden and Immich)? I've been pondering running them, but figure that 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? Curious what you're doing on that front!
I use restic to create encrypted snapshots on external cloud storage for the data I care about. My media is stored on a nas which covers me for drive failures. If I accidentally delete everything or my house catches fire I can download my personal data again and just redownload the terabytes of media.
People twist themselves into a knot talking about AI as the future. Its more of a bubble waiting to pop. Self hosting is the real disruptive future.
The hardware to accomplish most things that we rely on from cloud vendors is absolutely trivial. My own home server is a used super cheap and tiny machine. The hard disks don't even fit in the box and yet it has plenty of CPU and memory to spare.
The software is getting easier to configure year after year eventually creeping to the point where elderly people too lost to use a remote will be running this stuff. The real challenge will be solving for easy access to private networks from public spaces across the internet. Right now everybody seems to be centering on vendor solutions like TailScale for this.
I self host (I have a large overlap with the services in TFA), and love it. I will never go back and think that more people should self host (or at least...join small groups of people who designate one person to manage it for a small number of people).
And believing that the current AI economy might have a period of rapid devaluation in the near future is pretty reasonable. But, much like the original .com bubble, the idea that AI as a technology will not survive and thrive through such a pop, and become an ever more important part of our future, is a belief that I can't comprehend. Anthropic and OpenAI very well may go belly up. AI as a technology isn't going anywhere.
And as much as I'd like to believe that more people may self host more things in the future, self hosting will never, even if it was adopted by literally everyone, become as big a deal as AI, even if AI hit a wall tomorrow and didn't get any better than the current frontier models.
Self hosting has never been easier and I imagine the average person has never been further from trying it. No one will ever get anywhere close to hosting this much sruff
Self hosting is mostly a hobby like home brewing beer or woodworking. It’s more accessible than ever but there’s still little incentive for the average person to do it.
The average user is much safer putting their photos on iCloud than a home server unless they are tech inclined and personally invested in keeping it secure and backed up.
I got into it about a year ago. Bought a refurbished old Dell mini PC for 300 bucks and turned it into a home server. Debian + several docker containers.
I don't know if this is the future, but it feels disruptive. I think it is amazing that I can run my private home streaming service alongside a bunch of other cool things on old hardware and the experience is in many ways superior to actual services that I am charged to use.
After Google Assistant died I immediately installed Home Assistant on my old PC. Not as good, but at least it doesn't take 5 seconds to turn on a light like Gemini
I stared self hosting in 2020 when Raspberry Pis were super cheap (not anymore :( ) and lots of things started becoming available in Docker. Haven't ever considered going back to the cloud. I love taking back full control.
Same, Covid was a great time to spend shifting things from clouds to home. I have a small fleet of Pi4's and 1 newer 5 (for running Omada locally). Cost has shifted from subscriptions ($$$) to maintenance (time) :)
About to retire the NUC I used for 10 years running arr stack, jellyfin, home assistant, pi hole and a few more containers. Bought a new bee link mini pc, new Intel CPU, 500gb SSD and 16gb ram for less than $500.
I have been self hosting for over a decade and recently have seen more people in my circle doing that and I have been helping them.
At first it was hard but then i made it into a product. I am working on Tarvis.io which makes self hosting accessible to non technical users as well. It comes with installation assistant, ssl domains and backups inbuilt into it.
You can install open source apps from a catalog or drop any github repo and it installs and run it for you.
With Tarvis, I have been self hosting more since I am able to install and delete apps with one click, it makes it easy to try things.
I just checked on my *arr stack. Sonarr and Radarr idle at 157MB and 159MB of memory and approximately no CPU. Jellyfin currently idles at 330MB. I'm not sure where you got this impression from. I grant these tools are complicated and have somewhat clumsy UX, but they aren't especially heavy to run and are not fragile.
OP, point your :robot: at https://github.com/subdavis/selfhosted/blob/main/docker-comp... and ask for an explanation. It's a single compose file that illustrates how the *arrs, transmission, and jellyfin all work together. I'm sure you can set it up :)
Here is the stack I recommend:
* Radarr (movies) with optional second instance for 4K versions
* Sonarr (shows) with optional second instance for 4K versions
* Sonarr (anime), separate instance to have control over quality settings
* Prowlarr (tracker/indexer management)
* SABnzbd (Usenet)
* qBittorrent (torrents)
I would also recommend consulting the TRaSH guide to tune your setup and ensure you’re grabbing quality releases. From there, the next logical step is Profilarr :)
So I'm also surprised why someone would configure a second instance for that
Or, even better, the entire arr stack can be replaced with stremio to just keep everything on-demand instead of curating a library at all.
Usenet streaming sounds cool, but with releases being DMCAd so frequently, I don’t see how it would be practical for anything but the most recent content.
Also, I imagine that Stremio without Debrid (or equivalent) is kind of a terrible experience most of the time.
https://github.com/Jackett/Jackett
Highly recommend them to OP. My stack went down once in the past 4 years and it was my fault.
First was Lidarr went for months last year (was it this year?) unable to search/add musicians due to complications with how they were relaying those searches. It took them a long time to refactor that part of the software and make it usable again.
Second was the retirement of Readarr, the ebook-version of this software, which was an absolute shame.
But aside from that this is pretty much set-and-forget software. Although the setting is harder than it should be, should be much easier to favour smallest x265 rips at <resolution>, lossless audio, season rips with subtitles.
Almost all of the time went to to the downloader (usenet is more complicated than I thought). If I had just focused on the basics (sonarr, radarr, seerr) I could probably could have knocked it out in a day or so.
1. Clear that "might", it either is or isn't. An AI can get you 90% there, maybe the definitive confirmation would be good from a lawyer.
2. None of this matters if you share it from a foreign code forge and an anonymous pseudonym.
Whenever I use them I wonder if they could be one unified app with plugins...?
No required third-party dependencies (just the optional Google Drive and OneDrive features). Highly customizable (colors, site logo, default features) with a JSON file the player can produce. Responsively scales for any web browser: laptop, mobile, smart TVs, game consoles, even built-in in-car tablet browsers.
https://github.com/pseudosavant/player.html/
Ok, I respect your opinion, but remember that there are poor souls like me out there that actually love the opposite.
All things being equal, why prefer Docker Compose? From my perspective, a single binary strictly dominates any Docker Compose solution.
Easy to migrate to new system.
Easy to upgrade and downgrade. When a new version causes an issue just restart it with an older version.
One directory to backup and restore that contains all the services and their settings.
There's lots of solutions, I also find compose hits the sweet spot for integration into my homelab
One distribution method is flexible and can be deployed however you want, the other prescribes solutions and makes any customization difficult.
Most applications do ship in a single container. whether it's a single binary inside, or a bunch of python or js files or shell scripts is a separate issue.
Applications that ship as a list of containers are a completely different problem. Those applications are either a victim of their own success, or have developers that come from a particular background.
A big win with very little effort is systemd starting your docker compose service on boot. You have your systemd config file set `ExecStart` to call your docker-compose command, throw the config file into your systemd folder, and tell systemd to enable it. Docker compose handles the rest.
As podman has improved and compose stacks have improved, I’ve conceded that containers simplify deployment and updates and isolation, and at this point I find for me the benefits more than outweigh the hassles.
Instead of crafting a set of ansible plays that do all the manual native installation steps, I have a relatively lightweight ansible rig that reads containers and relationships desired from a manifest in inventory, then builds or modifies compose files, then just deploys. Much less futzing. And I’m more likely to keep things up to date regularly as a result
Or, increasingly, dispatch codex to handle it for me
In this way I update home assistant across multiple instances now like magic. I don’t even dread it a little anymore
Don't have to look at cli docs to figure out how to run it.
Doesn't have access to my file system, logs are easy.
My favorite is applications that conflict on ports. 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.
You look through the code (and this is before LLMs) but the config is just a labyrinth of values flowing from god knows where. So you search the repo for PORT and eventually find a PR from 2 weeks ago that changes PORT to ENDPOINT, so you set ENDPOINT, but it still doesn't work.
Then you find an issue that was opened last night that the new `ENDPOINT` value doesn't load from env vars because it conflicts with another ENDPOINT_ prefix on another value, instead you need to create a config.toml and set an `endpoint =` in that, so you do that.
Then you realize that creating an empty config.toml has now overridden all the previously defaulted values into nulls or empty strings, instead you need to run `foo config-defaults > config.toml` and go edit the endpoint one.
Only to realize that there is a secret that the tool uses to encrypt an ephemeral session. if you don't specify one, the tool would auto generate one on startup. The only downside is restarting it logs your client out which isn't a big deal. But now that you switched to config.toml you must set some value there and it can't be empty
Then you're just wondering why the hell did I want to change the port?
I manage my home server with a script that presumes the service is running on a compose stack. So I can run stuff like `stack freshrss restart`. I don't want to touch my scripts, I just add the compose file to some expected path and the script finds it based on naming conventions.
I think you can go very very far with this kind of setup especially if it's just for you.
But I recently looked into self hosting and several things each wanted their own Postgres container. Immich wants a Postgres and a redis instance.
If you’re building apps targeted at self hosters, SQLite is really all you need.
Self-hosting email fully is tedious/unnecessary, but what you can do is mirror your various inboxes (Gmail, iCloud, proton, non-corporate outlook) with mbsync and use roundcube or some other frontend to view emails and compose.
I use this to easily access mail from different services, and I can also send from any of them.
I also have a seperate service that watches the mail directory and sends a ntfy.sh notification for new emails.
It’s a bit complicated cause theres so many services but here are the quadlets: https://github.com/ebrahim37/infra-template/tree/main/homela...
I implemented this about a month ago because the iphone Mail app was increasingly buggy.
If you IT, why do you particularly consider self hosting email as tedious?
So as not to reiterate, here's an HN comment where I described the most recent trial I endured with it: https://news.ycombinator.com/item?id=46297991
In the last 20 years, I've also run into problems like:
* My brand-new ISP wouldn't allow TCP port 25 inbound, and wouldn't relent. I had to go back to the old ISP.
* SPF became mandatory at Gmail, but I didn't get the memo, and Google started bouncing my mail one random day.
* My residential IP ended up on a "policy blacklist", one it could never get off because it's blacklisted by virtue of being a residential IP, not that it did something bad.
The downside is never really knowing if your email reached your recipient (maybe it got blocked by Gmail because of your IP, maybe some other reason). If I use Gmail/proton etc, then I can be pretty sure that the other person got my email.
It's not trivial to run your own email stack, but it's not hard either. It's more tedious than anything. Once it's up and running, it's low-maintenance. And it's fairly trivial to avoid spam. I get vastly more spam in my Gmail than I do on my self-hosted domains.
The biggest challenge with self-hosted email is getting an IP address that's not blocked or carrying low reputation. Most VPS IPs from e.g. Digital Ocean, Linode, Hetzner, AWS, etc. are going to get blocked from Google (the strictest) and Yahoo, Hotmail/Live/MS, etc. Cloud providers often block incoming and outgoing mail ports, too. I have a Digital Ocean VPS and my account is old enough to be grandfathered into the old policy, which means my email ports aren't blocked. I used to have no trouble sending email anywhere from my VPS, until I downsized it and got stuck with an IP in a bad reputation CIDR. Now I use smtp2go for relaying outbound mail, but still handle all inbound mail. 10/10 score on mail-tester.com, and I never have any problems or need to do any maintenance.
Would absolutely love to do this, proton frontend annoys me at times.
If by encryption you mean PGP etc, that's handled in roundcube I believe.
mbsync mirrors your protonmail inbox to disk, dovecot shares that mail folder through IMAP, and roundcube or some other frontend connects to dovecot.
For gmail/icloud IMAP, you can't use your regular account password, you have to create an "app password" and use that password for mbsync.
https://proton.me/support/bridge-for-linux
Excited to set this up, I had assumed it wasn't a possibility.
Realizing (not just now, btw) that some folks have such a complex setup in their home networks... Make me go :wide_eyed.gif:
I dont even know half (most?!) of the apps/services listed there, let alone know why one would use, or even self-host, them..
/Aside
You are better off getting the used business mini-PC from HP/Dell/Leveno/Asus. They have better specs and run great.
I am actually jealous of you, I can tell the difference between 4k low bitrate and 4k high bitrate, 1080p and 720p are like mud to my eyes.
I self host on a bunch of different hardware, OSes, providers. I want the least fiddling as possible.
I don't do it because I don't care; I do it because it is super satisfying when it has been boringly running for weeks without me doing anything to keep it up beyond paying the electricity bill, upgrades are extremely predictable, etc.
Boredom is a feature :D
I saw statements to the effect of “this would be nice but it’s a lot of work” several times in the post. I don’t understand why that has to be a blocker anymore. All this tedium is gone.
It’s not pretty nor great with bad connections, but there is basically no maintenance.
I use it for my Home Assistant setup and more. It still has headroom. No fan, very low power consumption. Not true Linux container stuff but pretty much everything works on it in this area.
Would love to know as I wanted to do the same in the past and ended up self signing certs.
DynamicUser and ProtectSystem keep me sane.
My jellyfin LXC idles at a few hundred megs of ram, shares the base debian kernel, and if anyone does ever break in, they don't get access to anything else, anywhere else on my server. (All media is also mounted read-only to the jellyfin LXC.)
I really, really like it, just set it up recently. Everything in its right place.
I am also using Vikunja instead of trello.
Tbh in general I am fine if the self hosted app uses postgres or a container Db instead of sqlite only.
Sounds like his family is in a pickle if he’s out of town and the server goes down.
One suggestion in place of MPD is lyron (https://lyrion.org/). I’ve used MPD for years but recently switched to lyrion and for me, it’s a lot easier and suitable when you have many clients. It’s nice to have a single (nice) UX/UI for my music and all the “speakers” on the local network.
Pangolin was the missing piece I needed, to not expose my servers to the internet and easily have my services publicly accessible with built in auth.
Tailscale kind of worked, but it was a hassle needing the client on mobile device and it being a VPN.
With vibe coding, I have more of my own apps running than pre-built.
I also use Adguard which act a VPN to filter traffic. I dont feel like messing around to get both working.
The advantage is that if I do want a specific feature, I can just add it, and I am never worried about subscription limits or surprise charged, because I host it on a fixed-cost VPS.
Things don't really need maintenance and don't really break by themselves, the only time when they can sometimes break is when changing things.
You do need to have a proper setup though, for stuff like disk space alerts, knowing the common gotchas of disabling settings that can cause issues, etc.
[0]: https://uxwizz.com
They are so easy / portable but perhaps systemd is a better option as the author suggests.
For us it's the perfect balance between simplicity, observability (Beszel) and reliability. Not the right tool if you have dynamic workloads but definitely the right tool for boring and predictable workloads.
At home I run K3S, it's awesome. It also breaks a lot and does add a whole bunch of complexity that I would only recommend if you enjoy tinkering and fixing things.
I also use BGP advertised pod networks so each pod gets it's own IP address that's directly routable (l3vlan) with the rest of my network (hint, don't use 100.64.0.0/10 for that if you use tailscale), so I don't bother with NAT on the host itself or port mapping or port conflicts. It also makes caddy in front of it super easy, barely an inconvenience.
https://daemonless.io
BastilleBSD is another great way to run FreeBSD+jails using their templates
https://bastillebsd.org/projects/bastillebsd/
https://github.com/BastilleBSD/templates
There's nothing else out there, that I know of, that offers improvements on any kind of scale that it would be worth my migrating to.
I do hear good things about podman, so if I was starting from scratch I'd look into that. I have one podman instance running UnifiOS, but that's only because there's no official docker compose from Ubiquiti (and maybe that's telling in itself). Podman feels more opaque to me than docker, but I have years under docker and essentially zero under podman.
The big issue with Synology is the really crappy db logs driver they use. If a container has been running for a while it takes an age to see the logs via the Web UI.
There is a solution though: https://github.com/telnetdoogie-labs/synology-docker
rsync data directories. docker compose up. Done.
On the consumer or even prosumer nas products which have a semi-locked down system (ie Truenas/qnap/Synology). Technically you have root but as soon as you update the OS all/most of the changes end up being broken. Yes you could probably do something and deal with it. But personally I've spent too long babysitting it on the first and second nas that I no longer care.
I wanted to self-host Jellyfin, but hit the problem. It's bad at the main thing that player should offer - media playback.
If you open https://jellyfin.org/docs/general/clients/codec-support/ you can see that this doesn't support HDR and that doesn't support H265. There is Jellyfin Desktop and it breaks when display scaling is over 100% (what year is it?). Some clients have atrocious subtitle support. And then none of them apparently can't properly pace frames so I still see judder as if I'm on 60 Hz screen (24->60 can't be even translation). But my screen can do up to 165 Hz, so that should never be the issue.
In then I just went back to playing media files from Samba share with MPC + madVR. No automation or catalogization or anything, but it is supreme at actually displaying things, and that's what it's important to me.
[1]: https://github.com/finamp-app/finamp
[2]: https://minidlna.com/
The hardware to accomplish most things that we rely on from cloud vendors is absolutely trivial. My own home server is a used super cheap and tiny machine. The hard disks don't even fit in the box and yet it has plenty of CPU and memory to spare.
The software is getting easier to configure year after year eventually creeping to the point where elderly people too lost to use a remote will be running this stuff. The real challenge will be solving for easy access to private networks from public spaces across the internet. Right now everybody seems to be centering on vendor solutions like TailScale for this.
And believing that the current AI economy might have a period of rapid devaluation in the near future is pretty reasonable. But, much like the original .com bubble, the idea that AI as a technology will not survive and thrive through such a pop, and become an ever more important part of our future, is a belief that I can't comprehend. Anthropic and OpenAI very well may go belly up. AI as a technology isn't going anywhere.
And as much as I'd like to believe that more people may self host more things in the future, self hosting will never, even if it was adopted by literally everyone, become as big a deal as AI, even if AI hit a wall tomorrow and didn't get any better than the current frontier models.
The average user is much safer putting their photos on iCloud than a home server unless they are tech inclined and personally invested in keeping it secure and backed up.
Self-hoster reporting in.
I got into it about a year ago. Bought a refurbished old Dell mini PC for 300 bucks and turned it into a home server. Debian + several docker containers.
I don't know if this is the future, but it feels disruptive. I think it is amazing that I can run my private home streaming service alongside a bunch of other cool things on old hardware and the experience is in many ways superior to actual services that I am charged to use.
At first it was hard but then i made it into a product. I am working on Tarvis.io which makes self hosting accessible to non technical users as well. It comes with installation assistant, ssl domains and backups inbuilt into it.
You can install open source apps from a catalog or drop any github repo and it installs and run it for you.
With Tarvis, I have been self hosting more since I am able to install and delete apps with one click, it makes it easy to try things.