AMD Ryzen 5 3600
6 cores / 12 threads. Plenty for a house full of containers.
Homelab
One TrueNAS box at home runs my files, my photos and a pile of experiments, all as plain Docker Compose projects. This very website is served from it too.
The homelab is a single TrueNAS SCALE server doing storage, photos, file sync, media streaming and whatever I'm tinkering with that month. Everything runs in containers, defined in plain Docker Compose files that live in git.
Why plain Compose instead of the built-in app catalogue? Because I want to be able to read exactly what's running, change it in a text editor, and rebuild it from scratch if I have to. And yes, the page you're reading is served from that same box.
6 cores / 12 threads. Plenty for a house full of containers.
The ZFS cache is capped at 4 GB so the containers keep their memory.
Hardware video transcoding and machine learning for the photo library.
3 × 8 TB in RAIDZ1 for data, a 2 × 1 TB mirror for apps, and an NVMe drive to boot from.
The base of the whole thing: ZFS pools for storage, with snapshots as the safety net.
28 containers in 13 compose projects, no app-store UI, one config repo.
Sits in front of everything with automatic TLS from Let's Encrypt: HTTP-01 for the public sites and DNS-01 for the internal names.
One shared database server, with one role per app and only the privileges that app needs.
Beszel keeps an eye on container health, and a Homepage-style dashboard ties it all together.
rsync + a small "apps" helper today; git push-to-deploy and Renovate for image updates are the plan.
Everything else (media, dashboards, admin tools) is reachable only from the home network.
Every service is a normal Docker Compose project I can read, diff and rebuild, not a set of clicks in an app store.
Compose files, the Caddyfile and the docs all live in one repo. If it isn't in git, it doesn't exist.
Passwords and keys live in env files on the server and are never committed. The repo only has example files.
The security focus is what the internet can reach: keeping Caddy, Nextcloud and Immich current comes first.
One change at a time, written down, checked, then the next one. Boring on purpose.
A ZFS snapshot before any bigger change, so a bad evening is a rollback rather than a rebuild.
Deployed in phases: static files, then a Node server, then a database, then a consented visitor demo.
The compose files, Caddyfile and docs for everything on this page. Private, for obvious reasons.
A Python tool that turns World of Warcraft raid logs into a self-contained HTML dashboard. Shared as a single HTML file on Discord.
Every TrueNAS custom app moved to a plain Docker Compose project: 28 containers across 13 projects, all defined in files I can read and diff.
Added a web UI for managing the compose projects and a small "apps" deploy helper. The server's config mirror is now in git, with a .env.example per app so the real secrets never get committed.
The containers that were still floating on latest are now pinned to a fixed major version, and they have healthchecks.
The site now runs as an Astro Node server behind Caddy, and the old nginx container that served the static files is retired.
The ZFS ARC is now capped at 4 GB, so the containers stop competing with the filesystem cache for the 16 GB of RAM.
Started writing down the house rules for the homelab, plus a backlog of optimisations to work through one at a time.
The site was rebuilt in Astro, replacing the hand-written static pages. (Approximate date: sometime in June 2026.)