CASE 03 Proxmox, ZFS, Docker, Cloudflare Tunnel and Access 2026 46 containers

Nothing reachable that is not monitored, nothing monitored that is not backed up.

3 SHOTS topology, backup job, pool state

1 / 3
Homelab topologyEight nodes. The Proxmox host with its raidz2 pool is the hub, drawn with an ember border. The Cloudflare edge reaches the Docker host through a tunnel. The Proxmox host connects to the Docker host, to DNS, and to the offsite store, which receives a daily backup. The Proxmox host also pulls a nightly backup from the bot realm, and the bot realm connects to the home AI brain. The uptime board runs on the Docker host, and the offsite backup job on the Proxmox host pushes a heartbeat to it.Cloudflare edge / tunnel + AccessOffsite storeProxmox host / raidz2Docker hostDNSBot realmHome AI brainUptime boardtunneldailypullheartbeat
fig. 1 Topology drawn by hand from the host’s guest list, the container inventory and the backup job’s configuration, 2026-10-30. Not every guest is drawn. No hostnames, addresses or names.

One Proxmox host with a seven-disk raidz2 pool, a Docker host carrying 46 containers, a DNS server, and a Cloudflare tunnel with Access in front of what faces the internet. The bot realm and the home AI brain are drawn as nodes only.

I hold the lab to the title: anything reachable gets a check on the uptime board, and anything with a check has a copy somewhere else. A pool is not that copy. Raidz2 survives the loss of any two disks, and the pool reads 841G allocated of 12.7T with no known data errors, but the same data goes offsite every night.

On 2026-10-30 that job protected 107.486 GiB, added 40.772 MiB to the repository and read 5% of the stored data back to check it: no errors, 1 minute 45 seconds. Its last step pushes a heartbeat to the uptime board, so a night that does not finish raises an alert.

Offsite backup, 2026-10-30