My Home Server
Machine
- OS: Ubuntu Server 24.04 LTS
- CPU: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz
- Mem: 2x32GB
- Disks: (OS on NVMe, data striped on others)
sda 8:0 0 14.6T 0 disk (WD RED) sdb 8:16 0 14.6T 0 disk (WD RED) sdc 8:32 0 14.6T 0 disk (WD RED) sdd 8:48 0 14.6T 0 disk (WD RED) nvme0n1 259:0 0 931.5G 0 disk (WD BLACK) - Case: SilverStone Technology CS351
Occasionally I'll throw a video card in the case to experiment with something, but it doesn't seem worth the power draw for my workloads — video transcoding on the CPU is fine, and I don't use my server for games.
If you're just getting started and don't want the ridiculous amount of storage I have here, mini PCs can probably handle the workloads you want to run for around $200. I run another server with the same services on a Beelink Mini PC, and it seems to be doing fine.
Host Software
- ZFS: Software mirror raid, works well and tolerates me completely swapping out the OS (
zfs import). This means I have 29.2T of available disk space but can tolerate at least one disk dying. Docker compose volumes always go in the ZFS pool, never the NVMe. - Tailscale: I use this as VPN software, allowing me to manage this machine from any network / any device without exposing it to the wider world. I used to run Nextcloud with exposed ports, and it never felt good, so I slowly moved toward a private network even if it means sacrificing public sharing. Also means that I don't need certificates / HTTPS, which is nice.
- Docker: I run all of my homelab stuff through a single docker compose file under version control. If my server dies, all software and databases can be restored by copying over a backup into my ZFS pool and running
sudo docker compose up -d. My docker compose file is in VCS. - rclone: Basically
rsyncwith better remote destination support. Backups for valuable things go to remote stores (other computers or Backblaze B2).
Containers
- Nextcloud
- Postgres
- Jellyfin
- qBittorrent
I'm also interested in Immich, but haven't gotten around to adding it yet.
Lessons Learned
- Don't use Windows or macOS. Running a home server is an afterthought for these operating systems, and you'll run into issues with remote access, performance, and reliability in various ways. It's not worth it. WSL is not a stand-in for a standalone server.
- Ideally, don't use your day-to-day PC as a server if you're one of the few people that use Linux as a daily driver. The requirements will be different, and it's very freeing to have server issues and client issues be separate things.
- Avoid over-engineering, unless learning is the goal. You probably don't need Proxmox, definitely don't need K8s, but docker compose and version control are good ideas.