homelab
My homelab is where I run real services me, a friend and our families using the same tools I use for everyday work. It’s split across two homes: a rack server and a desktop at mine, a mini PC at my friend’s, joined into one private network. Everything runs headless Debian, services live in containers, data is copied between sites, and the whole thing is reachable from anywhere without a single open port on either router.
What this demonstrates:
- Running and maintaining headless Linux servers
- Containerised services that are easy to update, move and restore
- Off-site backups across two physical locations
- Secure remote access with Cloudflare Tunnel and Tailscale, with no exposed ports
- Infrastructure configs version-controlled in Git
## hardware
- ServerSite A
Dell PowerEdge R720
Main server. Runs every container and the sandboxed agent VM.
- 2× Intel Xeon
- 64 GB ECC RAM
- 12 TB storage, XFS
- Debian (headless) · Docker · KVM
- WorkstationSite A
Headless PC
Consumer-hardware PC. Rips discs and syncs to the shared library. Also hosts back-ups and gitea
- Ryzen 5 5600XT
- 32 DDR4 GB RAM
- 10 TB HDD + 1.8 TB SDD
- Debian (headless) · Docker
- Mini PCSite B
Lenovo ThinkCentre M715q
Second site. Rips discs and holds an off-site copy of the library.
- AMD Ryzen 5 5600
- 32 GB RAM
- 1 TB Internal storage + 5 TB HDD
- Debian (headless)
## services
Jellyfin
MediaStreams the shared film and TV library to phones, TVs and browsers.
runs on: Server
Navidrome
MediaStreams the music library to any Subsonic-compatible app.
runs on: Server
HandBrake
MediaRips and encodes movie discs, then drops them into the shared library.
runs on: Workstation, Mini PC
Nextcloud
StorageSelf-hosted file storage, sync and calendars, replacing Google Drive.
runs on: Server, Workstation
Gitea
DevPrivate Git hosting for code and infrastructure configs that AI agents read and update.
runs on: Workstation
Hermes agent
AutomationAn AI agent running in its own KVM virtual machine, isolated from the host.
runs on: Server, Workstation
Docker
PlatformRuns and isolates every service so each one can be updated, moved or rebuilt on its own.
runs on: Server
Tailscale
NetworkingEncrypted mesh network joining both sites for backups, library sync and admin access.
runs on: Server, Workstation, Mini PC
Cloudflare Tunnel
NetworkingPublishes the media apps to the internet without opening a single router port.
runs on: Server
## network
Family & friends
phones · TVs · laptops
Cloudflare edge
DNS · TLS · DDoS protection
Site A · My place
Server
Debian (headless) · Docker · KVM
- Jellyfin
- Navidrome
- Nextcloud
- Hermes agent
- Docker
Workstation
Debian (headless) · Docker
- HandBrake
- Nextcloud
- Gitea
- Hermes agent
Site B · Friend's place
Mini PC
Debian (headless)
- HandBrake
## write-ups
From disc to stream
How a DVD or CD goes from a drive at either site to a stream on any device.
Jellyfin · Navidrome · HandBrake · Docker
Remote access without opening ports
Why neither router has a single port forwarded, and how everything is still reachable.
Cloudflare Tunnel · Tailscale · Security
Two sites, one library: sync and backups
Keeping a copy of everything at both homes.
Backups · Tailscale · Debian
Configs in Git, agents in a sandbox
Keeping infrastructure configs in a self-hosted Git server, with an AI agent that works on them from inside its own VM.
Gitea · KVM · Automation