Matei's Homelab

Self-hosting since 2022

I put things on old computers

Hi, I'm Matei. Three-ish years ago I found an old Pentium tower nobody wanted and put Home Assistant on it, and it kind of snowballed from there — now it's home automation, a media server, security cameras, the works.

I'm writing this mostly for me. I genuinely forget how half of this stuff is wired together within a few months of setting it up — which service talks to which, why I configured something a weird way, how I fixed some bug I ran into — so this is the notebook. If you get ideas out of it too, great.

Currently running Oct 2026
  • Running: Home Assistant automation
  • Running: TrueNAS storage
  • Running: Jellyfin media
  • Running: Plex media
  • Running: Radarr films
  • Running: Sonarr shows
  • Running: Prowlarr indexers
  • Running: Frigate cameras
  • Running: Tailscale network
  • Running: Bazarr subtitles
  • Still configuring: Cleanuparr tidying
  • Running: Profilarr profiles
  • Still configuring: Home dashboard my build
running still configuring

What's running

Four setups, roughly

Running: Automation

Home Assistant

The first thing I ever self-hosted. Started on that old Pentium PC on HAOS, and now lives in a VM on the TrueNAS box, with basically every device in the house wired into it. AirCast is still my favourite integration, not gonna lie.

Running: Media

The *arr stack

Tried running Plex on the old Pentium first. Didn't go well, no GPU and barely any RAM. Once I had the newer tower, TrueNAS could run everything at once and the whole film/TV pipeline basically runs itself now. Radarr, Sonarr and Prowlarr just work, Bazarr grabs Romanian and English subtitles for everything, and Profilarr handles the quality profiles. Cleanuparr is the last one I'm still fighting with.

Running: Cameras

Frigate, instead of an NVR

My dad was about to buy a proper NVR box for security cameras. I told him to give me the money instead and I'd build something better. It runs Frigate now and can tell the difference between a car and a person walking up the driveway, which the box he was looking at couldn't do.

Still configuring: Never finished

My own dashboard

Got tired of Home Assistant's default dashboards not looking how I wanted, so I'm rebuilding it in plain HTML, which I had zero experience with when I started. It talks to HA over WebSocket and actually works. Getting the layout right is a constant fight though.

How it's wired

One box, two pools

Everything runs on the tower my cousin gave me. This is which service talks to which, the bit I always forget first.

How the homelab is wired One TrueNAS SCALE tower runs everything. Cameras stream to Frigate, smart home devices talk to Home Assistant in a VM, and my dashboard talks to both. Home Assistant reaches Frigate over Tailscale IPs. Seerr sends requests to Sonarr and Radarr, which search through Prowlarr and hand downloads to qBittorrent. Downloads land on temp-pool, where Plex and Jellyfin read them. Frigate recordings, the dashboard and app data live on Pool. Remote devices come in over Tailscale. VIGI cameras TP-Link · RTSP Smart home lights, AC, Cast Away from home over Tailscale TrueNAS SCALE · Ryzen 7 1700 · 16 GB Frigate 0.17 Docker · go2rtc Home Assistant HAOS in a VM My dashboard nginx · Dockge Media · Docker apps Seerr ×2 requests Sonarr · Radarr + Profilarr qBittorrent downloads Plex · Jellyfin watching Bazarr RO + EN subs Prowlarr indexers Pool 2 × 500 GB HDD · mirror Frigate · dashboard · app data temp-pool 1 × 500 GB HDD · stripe films + shows · the roadside drive video + clips WebSocket Tailscale IPs
Arrows point the way requests and files go. Scroll sideways on a phone.
The box TrueNAS SCALE
CPU
AMD Ryzen 7 1700 8 cores · 16 threads
Board
ASUS PRIME A320M-K
RAM
16 GB DDR4-3000 Corsair Vengeance LPX
GPU
None everything runs on the CPU
Pool
2 × 500 GB HDD, mirror storage + Frigate
temp-pool
1 × 500 GB HDD, stripe films + shows

The temp-pool drive came out of a PC someone left on the side of the road. Single disk, no redundancy.

Problems I've hit

Field notes

Every problem that's bitten me, what was actually going on, and what fixed it — written down so I stop re-solving things from scratch. Tap one to open it, or search for an error message.

Dashboard

Updating the dashboard throws a 403

Problem

The dashboard is a single HTML file served by an nginx:alpine container in Dockge, reading from /mnt/Pool/dashboard. Every so often, after editing the file and saving it back into that folder, nginx starts throwing:

403 Forbidden
nginx/1.29.8
My monitor showing the nginx 403 Forbidden page instead of the dashboard
The 403, in the wild

Why

Saving the file from another machine resets its owner and permissions, and nginx can no longer read it.

Fix

Folder needs 755 (nginx has to be able to enter it), the files inside need 644:

chown -R root:root /mnt/Pool/dashboard
chmod 755 /mnt/Pool/dashboard
chmod 644 /mnt/Pool/dashboard/*
Dashboard

Camera feeds through Home Assistant kept breaking

Problem

I first pulled the camera streams into the dashboard through Home Assistant. It meant fighting HA's CORS settings, and even when it worked it was flaky.

Fix

Skip HA for video entirely. The dashboard now talks straight to Frigate: live view uses go2rtc's MSE stream in a plain <video> element, and recordings and clips come from the Frigate API. HA is only used for the things HA is good at — lights, AC, the air purifier, scenes.

Cameras

Home Assistant couldn't reach Frigate

Problem

Frigate runs in Docker on TrueNAS, Home Assistant runs in a VM on the same box. HA could not talk to Frigate on its normal LAN address.

Why

Hairpin NAT. TrueNAS's Docker port forwarding (DNAT) doesn't handle traffic that leaves the host and comes straight back in, so the VM's requests to the host's own IP went nowhere.

Fix

Point the HA ↔ Frigate integration at the Tailscale IPs instead of the LAN ones. Tailscale routes around the NAT problem completely.

Cameras

Recordings with audio wouldn't save

Problem

Turning on audio for the TP-Link VIGI cameras broke recording.

Why

The cameras send audio as PCM A-law, and that codec isn't allowed inside an MP4 file, which is what Frigate records to.

Fix

Tell ffmpeg to transcode the audio to AAC when recording:

ffmpeg:
  output_args:
    record: preset-record-generic-audio-aac
Cameras

Retention settings ignored after the 0.17 update

Problem

After moving to Frigate 0.17.0, my old retention config stopped doing what I wanted.

Why

0.17 replaced the old retain / events layout with separate settings for continuous recording, alerts and detections. Most guides online still show the old format.

Fix

Rewrite it in the new structure. Mine keeps about a week:

record:
  enabled: true
  continuous:
    days: 7
  alerts:
    retain:
      days: 7
  detections:
    retain:
      days: 7
TrueNAS

ZFS refused my Frigate quota

Problem

I wanted to cap the Frigate dataset at around 120–130 GiB so recordings can't eat the whole pool. Setting the quota just failed.

Why

ZFS won't let you set a quota smaller than what the dataset is already using.

Fix

Delete old recordings first (or shorten retention and let Frigate clean up), check usage, then set the quota:

zfs get used Pool/frigate
zfs set quota=130G Pool/frigate
TrueNAS

Installing things directly on TrueNAS doesn't work

Problem

I tried installing Hermes Agent straight onto the TrueNAS host with its normal installer. It "installed", but nothing would run.

Why

TrueNAS SCALE locks the host down on purpose: / is mounted read-only and /home is noexec. The installer drops its binaries somewhere they're not allowed to execute.

Fix

Don't fight it. Use the app from the TrueNAS catalog (Community train) and keep its data on the pool at /mnt/Pool/hermes. Rule of thumb: on SCALE, everything goes in an app or a container, never on the host.

TrueNAS

App works on the server but not from my laptop

Problem

Deployed the Odysseus app through Dockge. It started fine, but I couldn't open it from any other device on the network.

Why

Two things. It was only listening on localhost (127.0.0.1), so it ignored everything that wasn't the server itself. And Dockge only manages stacks that live inside its own stacks folder.

Fix

Clone the project into Dockge's stacks path, and change the listen address to 0.0.0.0 so it accepts connections from the network.

TrueNAS

AirCast stopped finding my speakers in the HA VM

Problem

After moving Home Assistant into a VM on the TrueNAS box, the AirCast integration stopped working. It couldn't see any of the Cast devices on the network, even though the VM itself was online and everything else in HA was fine.

Why

AirCast finds devices with multicast discovery (mDNS). By default the VM's network card ignores the guest's requests to receive that multicast traffic, so the discovery packets never reach Home Assistant.

Fix

In TrueNAS go to Virtualization → the HA VM → Devices → NIC → Edit, tick Trust Guest Rx Filters, save and restart the VM, and AirCast can see the speakers again.

Media

Downloads finish, Sonarr never imports them

Problem

qBittorrent completes the download, Sonarr just sits there and never moves the file into the library.

Why

Path mismatch. qBittorrent reports where it saved the file using its container's path. If Sonarr has the same dataset mounted at a different path, it goes looking in a folder that doesn't exist for it.

Fix

Make the qBittorrent category save path match the in-container mount path exactly, and mount the dataset at the same path in both containers.

Media

Jellyfin showing films I deleted ages ago

Problem

Films I'd deleted long ago were still in the Jellyfin library, and on top of that no movie had the right title or poster.

Fix

Normal rescans didn't clear the ghosts. What worked was wiping the library and letting Jellyfin discover everything again from scratch.

Media

One Seerr can't do Plex and Jellyfin

Problem

I use Plex at home and Jellyfin for remote family streaming over Tailscale. I wanted one request page for both.

Why

A single Seerr instance can only be connected to one media server at a time.

Fix

Run two Seerr instances — one for Plex, one for Jellyfin.

Media

Quality profiles were a mess

Problem

Managing quality profiles through Recyclarr meant editing YAML, and the usual advice is to run separate Radarr/Sonarr instances for 4K and anime, which doubles everything.

Fix

Swapped Recyclarr for Profilarr (it has a proper UI), linked it to the Dictionarry database, and kept one instance per app with multiple profiles inside: Radarr has 2160p Remux + 1080p Remux, Sonarr has 2160p Quality + 1080p Efficient.

Hardware

No option to run a Home Assistant VM

Problem

I moved Home Assistant into a VM on the TrueNAS box, but out of the box the board had virtualisation switched off.

Fix

In the BIOS of the ASUS PRIME A320M-K, turn on SVM (AMD's virtualisation) and IOMMU. After that TrueNAS can run VMs.

Hardware

RAM that the motherboard didn't like

Problem

Corsair Vengeance LPX DDR4 sticks gave me compatibility trouble on the A320M-K.

Why

They're not on the board's QVL (the list of RAM the manufacturer actually tested).

Lesson

Check the motherboard's QVL before buying RAM, especially on budget boards.

How it got here

Three years, in order

The start

A YouTube rabbit hole

Fell down a home automation YouTube rabbit hole one weekend. Found an old Pentium PC sitting around, put HAOS on it, and started adding devices to it one at a time whenever I had a free evening.

Not long after

Finding GitHub

Turns out most of the add-ons I wanted were just... posted online by other people, for free. That was my first real exposure to open source, and honestly the whole reason I made a GitHub account.

The upgrade

My cousin's spare PC

My cousin upgraded to a laptop and didn't need his tower anymore, so it came to me. All of a sudden I could actually run more than one thing at a time without it falling over, so TrueNAS, Plex and Jellyfin all happened pretty quickly after that.

A few weeks later

The camera project

Dad wanted security cameras, so I took the money he was going to spend on an NVR and set up Frigate with some cheap cameras instead. Probably the project I'm proudest of, right behind the media server.

Now

Still going

Jellyfin and Tailscale mean my cousin can request and stream films from his own house now, which feels like a nice way to pay him back for the tower. Still slowly working on the dashboard whenever I have time.

Site log

What changed, and when

Say hi

Get in touch

If you're thinking about starting a homelab of your own: this whole thing started with one free computer nobody wanted and a bit of curiosity. You don't need much more than that to get going.

Find me on GitHub.