Homelab

Current Homelab Setup

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.

What Runs Here

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.

Hardware

CPU

AMD Ryzen 5 3600

6 cores / 12 threads. Plenty for a house full of containers.

RAM

16 GB

The ZFS cache is capped at 4 GB so the containers keep their memory.

GPU

GTX 1660 SUPER

Hardware video transcoding and machine learning for the photo library.

Storage

3 × 8 TB + 2 × 1 TB

3 × 8 TB in RAIDZ1 for data, a 2 × 1 TB mirror for apps, and an NVMe drive to boot from.

Current Stack

Operating system

TrueNAS SCALE

The base of the whole thing: ZFS pools for storage, with snapshots as the safety net.

Containers

Docker Compose

28 containers in 13 compose projects, no app-store UI, one config repo.

Reverse proxy

Caddy

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.

Database

PostgreSQL

One shared database server, with one role per app and only the privileges that app needs.

Health

Monitoring

Beszel keeps an eye on container health, and a Homepage-style dashboard ties it all together.

Shipping changes

Deployment

rsync + a small "apps" helper today; git push-to-deploy and Renovate for image updates are the plan.

What's Public

Everything else (media, dashboards, admin tools) is reachable only from the home network.

How I Run It

Plain Compose over app UIs

Every service is a normal Docker Compose project I can read, diff and rebuild, not a set of clicks in an app store.

One source of truth in git

Compose files, the Caddyfile and the docs all live in one repo. If it isn't in git, it doesn't exist.

Secrets stay out of git

Passwords and keys live in env files on the server and are never committed. The repo only has example files.

Guard the internet-facing side

The security focus is what the internet can reach: keeping Caddy, Nextcloud and Immich current comes first.

Configure plainly, step by step

One change at a time, written down, checked, then the next one. Boring on purpose.

Snapshot before changing things

A ZFS snapshot before any bigger change, so a bad evening is a rollback rather than a rebuild.

Projects Around It

Astro, Node, Postgres

This website

Deployed in phases: static files, then a Node server, then a database, then a consented visitor demo.

Private

Homelab config repo

The compose files, Caddyfile and docs for everything on this page. Private, for obvious reasons.

Python, public

WCL Analyzer

A Python tool that turns World of Warcraft raid logs into a self-contained HTML dashboard. Shared as a single HTML file on Discord.

Change Log

1 Oct 2026 - Service

All apps migrated to plain Docker Compose

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.

1 Oct 2026 - Deployment

Deploy helper and config repo

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.

1 Oct 2026 - Service

Container images pinned, healthchecks added

The containers that were still floating on latest are now pinned to a fixed major version, and they have healthchecks.

1 Oct 2026 - Deployment

Website moved to a Node server behind Caddy

The site now runs as an Astro Node server behind Caddy, and the old nginx container that served the static files is retired.

1 Oct 2026 - Hardware

ZFS cache capped at 4 GB

The ZFS ARC is now capped at 4 GB, so the containers stop competing with the filesystem cache for the 16 GB of RAM.

23 Sep 2026 - Other

Homelab rules written down

Started writing down the house rules for the homelab, plus a backlog of optimisations to work through one at a time.

15 Jun 2026 - Service

Website rebuilt in Astro

The site was rebuilt in Astro, replacing the hand-written static pages. (Approximate date: sometime in June 2026.)