Lab Census, Mid-2026: Eleven Containers and One Empty Chair

A headcount of everything running on the Proxmox cluster right now — taken live from `pct list` — including the container that quietly replaced Pi-hole while nobody was looking.

The Census Rule

Home labs rot in a specific way: not by breaking, but by drifting away from what you think is running. So twice a year I take an actual census — straight from pct list, not from memory — and write down what every container is for. If I can't explain one in a sentence, it gets a eulogy instead.

Here's the mid-2026 count, taken live off pve1 (the HP EliteDesk 805 G8 from the earlier posts — up 4 days since its last kernel update, if you're wondering):


pve1: The Workhorse

CT Name One-sentence justification
100 immich Self-hosted Google Photos; AMD iGPU passthrough does the ML face-matching. The single most family-approved service in the rack.
102 adguard-unbound DNS ad-blocking + recursive resolution. Yes — Pi-hole is gone. More below.
104 nginxproxymanager Reverse proxy for everything with a hostname, plus the DDNS heartbeat.
107 tailscale Subnet router advertising the home network to my devices anywhere. Since the memory backend went private-only, this little box is the drawbridge.
112 cloudflared Cloudflare Tunnel for the few things that are meant to be public.
117 mkdocs Personal docs site. Documentation nobody reads but me, hosted with the seriousness of a product.
118 gitea Self-hosted git. This very blog's origin remote lives here.
119 uptime-kuma The watcher. Pings everything else and messages me when the lab is having feelings.
120 freqtrade Three crypto trading bots: one test, one paper, and one brave little live one. The portfolio remains… educational.
126 videovault yt-dlp downloader/organizer. Currently stopped — the empty chair in this census. Storage filled up; its fate is under review.
128 hindsight The AI memory backend from the shared-brain post. Newest resident, already load-bearing.

Ten running, one stopped, zero unexplainable. A good year.

pve2, the newer second node (i5-14600K, 32 GB, RTX 5060 Ti 16 GB), stays lean by design: it's the GPU box, currently hosting a single Ubuntu container for video-pipeline experiments with full GPU passthrough. Its job is to be mostly empty so experiments have somewhere to land.


The Quiet Coup: Pi-hole → AdGuard Home + Unbound

If you've read the earlier lab posts, you met Pi-hole as "production DNS." That era ended. CT 102 now runs AdGuard Home backed by Unbound as a recursive resolver.

The honest reasons:

  • Unbound underneath means the lab resolves DNS from the roots itself — no upstream resolver seeing every domain the household visits. Pairing that with Pi-hole was possible; with AdGuard it was one config block.
  • AdGuard's default filtering + DoH/DoT support covered what I'd been bolting onto Pi-hole with extra lists and scripts.
  • The web UI won the household usability vote, which is the vote that counts.

Pour one out for Pi-hole regardless — it served two faithful years and taught this lab what "the network feels broken, reboot the DNS box" means.


Census Findings

  1. The stack has specialized. Early labs run apps; this one increasingly runs infrastructure for apps — DNS, proxy, tunnel, VPN, git, monitoring, and now an AI memory. Six of eleven containers exist to serve the other five.
  2. Stopped ≠ deleted is a trap. VideoVault has been "temporarily stopped" long enough to appear in a census. By the next one it either runs or it's gone — this sentence is my accountability mechanism.
  3. The GPU node stays empty on purpose. Every time I'm tempted to colonize pve2 with permanent services, an experiment comes along that needs the whole card. Slack capacity is the feature.
  4. pct list doesn't lie; my memory does. I'd have told you CUPS was still running. It was removed months ago. Take the census from the machine.