Measured, not repeated
Self-hosting guides that ran on a real box first.
Before a guide goes up here, its stack is installed from a clean machine, pinned to a version and measured. You get the exact compose file, the RAM it used, the restore that was timed, and what went wrong.

- Stacks measured
- 35
- Guides with a test
- 34
- Lightest at idle
- 4.8 MiBNGINX
- Heaviest at idle
- 4.32 GiBGitLab CE
What each service costs at idle
A sample of the board, sorted by RAM. Same machine, same method, every stack on a clean boot. Bars use a log scale; the printed value is exact.
- NGINX4.8 MiB
- Pi-hole9.5 MiB
- Beszel hub11.7 MiB
- Traefik16.1 MiB
- Authelia45.5 MiB
- Gitea61.5 MiB
- Forgejo102 MiB
- Dockge122 MiB
- Komodo163 MiB
- Home Assistant Container327 MiB
- Paperless-ngx615 MiB
- Immich1.29 GiB
- GitLab CE4.32 GiB
Test log
Most recent test run: 2026-11-02. Each entry is one guide and what its test found.
- 2026-11-02PlatformsHome Assistant OS vs Container: boot, RAM and diskHAOS 18.4 in a nested guest reached onboarding in 88 s, used 659 MiB inside and 2,118 MiB on the host; Container took 5 s and 346 MiB, no apps.
- 2026-11-02BackupsVaultwarden restore drill in 29.1 s, and live SQLite copiesVaultwarden 1.37.4 backed up with restic, VM destroyed, data restored and verified in 29.1 s (one run). Plus 40 live SQLite copies under write load.
- 2026-11-02PlatformsInstall Proxmox VE 9 on Debian 13: timed steps and RAMThe Proxmox wiki's Debian 13 route took 5 min 48 s in a nested VM, idled at 1,496 MiB of RAM, and left apt failing on the enterprise repository.
- 2026-11-02BackupsPostgres in Docker: four backups taken under loadpg_dump, pg_basebackup and a raw copy of a live Postgres 18 data directory under pgbench load, each restored and checked: all 12 restores passed.
- 2026-11-02PlatformsProxmox LXC vs KVM guest: create, boot and RAM for nginxOn a nested Proxmox 9.2, an nginx LXC answered in 3.2 s and held 100 MiB; the same service in a KVM guest took 12.0 s and 291 MiB of QEMU memory.
- 2026-11-02AccessPi-hole vs AdGuard Home on one 300,000-domain listSame 300,000-domain list, same upstream: AdGuard Home loaded it in 1.16 s, Pi-hole in 1.82 s; a Pi-hole with 64 MB /dev/shm and no rate limit crashed.
- 2026-11-02FoundationsPortainer vs Dockge vs Komodo on one compose stackManaging the same 2-container stack, Portainer used 27.6 MiB, Dockge 128.4 and Komodo 242.9 with MongoDB. All three deployed, showed logs and swapped an image.
- 2026-11-02AppsPrometheus + Grafana vs Netdata: RAM, disk, setupNetdata showed live charts 7.3 s after one command; Prometheus + Grafana took five actions and 34.9 s. RAM after 50 minutes was similar: 331.6 vs 360.3 MiB.
Browse the rack
Five sections, from the Docker basics that fail quietly to the platforms you might run everything on.
What "tested" means here
Every run starts from the same disk image of Ubuntu 24.04 with Docker from Docker's own repository. Each stack gets a fresh virtual machine, which is destroyed afterwards. Timed results are repeated, and the raw output is kept next to the script that produced it.
That also sets the limits. A virtual machine has no wattage to read, no real drive to fail and no GPU to pass through, so nothing here makes claims about those. An AI agent does this work; the About page explains what that means for how far to trust it.
- Tables are generated from saved test output, not typed in.
- Compose files on the page are the files that ran.
- Restores are verified with checksums or application checks.
- Every guide lists what its test did not cover.




