My New (Old) Home Server
Published · Blog
There comes a time in every young man’s life, usually during college, where he thinks “Man, it would be so fucking cool if I had a server of my own”.
Or maybe it doesn’t anymore I don’t know what kids are like nowadays.
Anyway.
The journey usually starts with a few google searches, which almost always lead to the same conclusion: use an old laptop or PC, and run Linux on it. Which is honestly, great advice. But I don’t like good advice. I like to do things the proper way. So I set the idea aside for years. I had one PC or laptop at any given time, and gaming was obviously more important. So that got relegated to the back of my mind for years, for some nebulous future when I would have disposable income.
Disposable Income Era
I think I would have been more fiscally responsible if I never got a salary, but thats a different landmine to defuse for another day. I started building a media server in 2018 which somehow feels both recent and ancient history. Recent because I still have the little guy.
At the time, I was looking for ways to automate padding out my media library. I found Radarr and Sonarr. The pitch was simple enough; tell the computer what movies and shows you care about, point it at the relevant sources, and it just works.
Radarr automatically finds better quality versions of movies as they become available. Sonarr downloads new episodes of tv shows you’re interested in as they come out. Rename files. Sort them. Keep track of what exists. Generally handle the kind of pedantic but useful organisational bullshit that makes sure you don’t have 20000 files called xYZ.xvid.mp4 in one folder. Bliss.
This was, obviously, extremely appealing to me. I already knew enough Linux from using Ubuntu every now and then to be dangerous in the specific way where you think installing services manually is a sensible use of a Saturday. So naturally, I used Ubuntu.
Actually, Lubuntu. Because apparently I was concerned that a machine whose main job was sitting in a corner and moving files around might consume twelve extra megabytes of RAM. I’m not proud of it. I’m not ashamed of it (The real reason I chose an Ubuntu flavour was because at the time I didn’t know how to create a folder share that would work on Windows without using the GUI but let’s not get into that).
The Extremely Normal Beginning
The original setup was pretty basic:
- Lubuntu
- a 500GB hard drive
- Radarr
- Sonarr
- Jackett (Because you have to know… where to get your jolly roger flags from)
- Deluge (Someone has to deliver your jolly rogers to you)
And, for reasons that made complete sense at the time, RhodeCode and Phabricator because I am a SERIOUS programmer with SERIOUS needs.
Those last two had nothing to do with media. I just had a spare Linux box and had recently discovered that self-hosting developer tools was possible. Which is a dangerous realization. Once you know you can run your own code review platform, the only thing stopping you is the tiny question of whether you should.
The server was doing a lot for something with one 500GB drive. It was storing media, running a few services, keeping my code around, and probably quietly wondering why I was trying to build a small business sized network around it in my house.
Then I ran out of space, obviously.
A 500GB drive sounds huge until you start treating it like an archive, a media library, a downloads folder, and a place to put “temporary” things that will definitely be deleted later. They become part of the scenery. You can’t touch them because you’re smart, so you must have had some reason for keeping those particular files in that particular place.
So the first upgrade happened.
Two drives Isn’t Just Two Drives, I’ll Explain Later
I moved the OS onto an SSD and added a 1TB drive for storage.
Honestly, this was probably the first time the setup started feeling vaguely intentional. The SSD handled the operating system and applications, while the larger drive handled media and everything else that had slowly accumulated in the server’s general direction. I even gave it a cute network name (Str8CacheHomie, what its called to this day).
It also made the machine feel much faster, which was not surprising, but still satisfying. Moving an OS off a spinning hard drive is one of those upgrades that makes you briefly feel like you’ve become a super serious systems person.
I mean, I didn’t need it. The 500GB drive would have worked fine as the OS drive, but I figured I need to be fast and modern, so sue me.
The media side got progressively more automated. Radarr and Sonarr would keep track of things, Jackett connected the weird little pieces in the middle, and the server mostly just did its job. Stuff appeared where it was supposed to appear, named correctly, in folders that made sense.
Meanwhile, Self-Hosting
At some point, I am sad to say that I discovered r/selfhosted. That subreddit made me realise my setup wasn’t shit, and I needed something more robust for super serious reasons. I needed a VPS. I got one on OVH.
This was another bad milestone. Just the absolute worst.
Running things at home is fun, but putting a service on a VPS makes it feel more official. Suddenly there are public IP addresses, reverse proxies, SSH keys, backups you should probably verify, and the exciting possibility of breaking something from anywhere in the world.
I painstakingly moved my super secret Git repositories off of Github(ew) to a private Gitea instance(fuck yes).
By “super secret” I mean it contained personal projects, unfinished experiments, random code, and a folder called dead-dump.
Gitea was great. It was lightweight, understandable, and did exactly what I needed: private repositories, a web UI, issues, pull requests, and none of the ceremony that comes with treating a small personal project like it needs a procurement department. Plus I called it Git Gud, and that alone was worth it.
Then someone on SelfHosted told me Gitea was bad and what they were doing was a pox upon humanity, and its replacement Forgejo was better.
Compelling argument. How could I ever say no to that. I like being current, apparently. Maintaining new stacks is obviously better than doing actual work.
To be fair, Forgejo made sense. It’s a community-led fork of Gitea, and the migration was not particularly dramatic. But the important part was not that I needed to migrate. The important part was that I had now reached the stage of self-hosting where a functional thing became an opportunity to rebuild it slightly differently.
This is how hobbies work for me. You start out trying to solve a problem. Eventually, maintaining the solution becomes the problem. Then you solve that too, by creating more maintenance. I would have made an amazing senator specifically in the Star Wars universe.
I Am The Senate
The media server is now absurdly automated.
It handles organisation, tracking, downloading, naming, and streaming with a level of consistency that I wish I could apply to literally anything else in my life. It’s one of those setups where the complicated parts are mostly invisible now, which is the point. It just works.
Meanwhile, I do have an actual job. One where I get paid to use Unreal Engine and Unity. And teach Unreal Engine. I decided to use that knowledge to create a couple plugins of my own and put them on the UE4 Marketplace.
Naturally, the seamless automation that these self hosted tools and media server enjoy, is NOT something that my actual plugin development workflow benefits from. The work is the redheaded stepchild of the family, feeding off scraps in the form of a flaky handwritten PowerShell script.
A handwritten PowerShell script.
The thing responsible for work I actually care about is held together by assumptions, and whatever cosmic alignment causes Windows paths to behave on a given day. If I run it from the wrong terminal, or after updating something unrelated, it may simply decide that today is not a build day. Also everything except windows uses / for paths, good ol’ Billy Gates uses \ so thats fun.
I guess the lesson is that… Windows sucks? I mean everyone knows that at this point I suppose.
I suppose the real lesson is that if you want to do a good job at something, don’t think about what you love about it, think about what you absolutely despise about it with your whole being. It’s not really about discipline. It’s about annoyance and hatred.
I automated the media server because manually managing media was annoying enough to motivate me. My plugin workflow is still held together with a bad script because apparently I have not yet been annoyed in the correct, productive way.