U6 / Measured data
The RAM board
How much memory 35 self-hosted stacks use once they have started and settled. Whole stacks count, so a database container adds to the app that needs it.
- NGINX4.8 MiB
- Gatus5.9 MiB
- Vaultwarden7.4 MiB
- Pi-hole9.5 MiB
- Caddy10.9 MiB
- AdGuard Home11.3 MiB
- Beszel hub11.7 MiB
- Headscale12.1 MiB
- Stalwart13.6 MiB
- Traefik16.1 MiB
- Portainer CE18.2 MiB
- FreshRSS18.5 MiB
- Authelia45.5 MiB
- wg-easy49.4 MiB
- Miniflux52.4 MiB
- Gitea61.5 MiB
- Nginx Proxy Manager68.5 MiB
- Wiki.js85.2 MiB
- Forgejo102 MiB
- Uptime Kuma109 MiB
- Netdata120 MiB
- Dockge122 MiB
- Jellyfin149 MiB
- BookStack160 MiB
- Komodo163 MiB
- Nextcloud255 MiB
- docker-mailserver280 MiB
- Home Assistant Container327 MiB
- Prometheus + Grafana + node_exporter341 MiB
- Seafile CE468 MiB
- Paperless-ngx615 MiB
- authentik799 MiB
- Ollama + Open WebUI1.26 GiB
- Immich1.29 GiB
- GitLab CE4.32 GiB
How to read it
The figure is the sum of docker stats memory across a stack's containers: the median of repeated samples after the stack settled, with no users and no content. That makes it the floor. Page cache is excluded, and real libraries, users and background jobs add to it. Many apps were measured on first run, still at their setup wizard or login page, and Stalwart was in its unconfigured bootstrap mode, so its figure is not comparable with a working mail server. Guides that measured a workload report those figures separately.
Bars use a log scale, because one large stack would flatten the rest. Read the printed number.
The test box
- 4 vCPU on an AMD Ryzen 5 PRO 3600 host (KVM)
- 8 GB RAM, Ubuntu 24.04, kernel 6.8
- Docker Engine 29.9.2, Compose 5.6.1
- Fresh disk for every stack, destroyed after the run
Details and limits are on the test method page. To add up your own combination, use Will it fit?
Full results
| Stack | Version | Category | RAM at idle | Peak sample | CPU at idle | Images on disk | Ready after |
|---|---|---|---|---|---|---|---|
| NGINX | 1.31.8 | Reverse proxy | 4.8 MiB | 4.8 MiB | 0.00% | 93.6 MB | 0.8 s |
| Gatus | 5.38.0 | Monitoring | 5.9 MiB | 6.2 MiB | 0.02% | 78.1 MB | 2.4 s |
| Vaultwarden | 1.37.4 | Passwords | 7.4 MiB | 7.6 MiB | 0.00% | 402 MB | 2 s |
| Pi-hole | 2026.10.1 | DNS | 9.5 MiB | 9.5 MiB | 0.21% | 148.8 MB | 5.2 s |
| Caddy | 2.11.7 | Reverse proxy | 10.9 MiB | 10.9 MiB | 0.00% | 92.8 MB | 0.8 s |
| AdGuard Home | 0.107.79 | DNS | 11.3 MiB | 11.3 MiB | 0.00% | 113.6 MB | 1.2 s |
| Beszel hub | 0.21.1 | Monitoring | 11.7 MiB | 11.7 MiB | 0.00% | 47.5 MB | 1.6 s |
| Headscale | 0.29.7 | VPN | 12.1 MiB | 12.1 MiB | 0.07% | 113.3 MB | 2.6 s |
| Stalwart | 1.0.1 | 13.6 MiB | 13.6 MiB | 0.00% | 483.6 MB | 1.8 s | |
| Traefik | 3.7.17 | Reverse proxy | 16.1 MiB | 16.1 MiB | 0.00% | 249.2 MB | 2.2 s |
| Portainer CE | 2.45.3 | Docker UI | 18.2 MiB | 18.2 MiB | 0.00% | 200.6 MB | 1.7 s |
| FreshRSS | 1.30.4 | Feeds | 18.5 MiB | 18.5 MiB | 0.00% | 368.4 MB | 2.1 s |
| Authelia | 4.39.28 | Auth | 45.5 MiB | 45.7 MiB | 0.02% | 109.9 MB | 2.2 s |
| wg-easy | 15.5.0 | VPN | 49.4 MiB | 49.5 MiB | 0.00% | 321.4 MB | 4.2 s |
| Miniflux | 2.3.4 | Feeds | 52.4 MiB | 52.4 MiB | 0.00% | 484.8 MB | 8.6 s |
| Gitea | 28.3.0 | Git | 61.5 MiB | 76.2 MiB | 0.00% | 261.7 MB | 2 s |
| Nginx Proxy Manager | 2.16.0 | Reverse proxy | 68.5 MiB | 68.7 MiB | 0.04% | 1909.4 MB | 5.7 s |
| Wiki.js | 2.5.315 | Wiki | 85.2 MiB | 85.2 MiB | 0.02% | 1451.2 MB | 7 s |
| Forgejo | 17.0.1 | Git | 102 MiB | 102 MiB | 0.02% | 291.2 MB | 1.8 s |
| Uptime Kuma | 2.5.9 | Monitoring | 109 MiB | 109 MiB | 0.00% | 2531.2 MB | 4.6 s |
| Netdata | 2.12.2 | Monitoring | 120 MiB | 120 MiB | 3.04% | 1322 MB | 6.3 s |
| Dockge | 1.5.0 | Docker UI | 122 MiB | 122 MiB | 0.21% | 1168.8 MB | 3.7 s |
| Jellyfin | 12.4 | Media | 149 MiB | 150 MiB | 0.01% | 2490 MB | 3 s |
| BookStack | 26.09.2 | Wiki | 160 MiB | 160 MiB | 0.03% | 953.6 MB | 34.8 s |
| Komodo | 2.3.4 | Docker UI | 163 MiB | 189 MiB | 0.78% | 2899.1 MB | 9.9 s |
| Nextcloud | 33.0.10 | Files | 255 MiB | 255 MiB | 0.55% | 2575.5 MB | 63.8 s |
| docker-mailserver | 16.0.1 | 280 MiB | 280 MiB | 0.84% | 1041.9 MB | 5.5 s | |
| Home Assistant Container | 2026.10.4 | Smart home | 327 MiB | 327 MiB | 0.00% | 3467.9 MB | 12.3 s |
| Prometheus + Grafana + node_exporter | 3.15.1 / 13.3.0 | Monitoring | 341 MiB | 342 MiB | 1.38% | 2429.7 MB | 45.9 s |
| Seafile CE | 14.0.9 | Files | 468 MiB | 468 MiB | 0.96% | 2668.6 MB | 45.8 s |
| Paperless-ngx | 3.4.1 | Documents | 615 MiB | 615 MiB | 0.40% | 4273.4 MB | 26.1 s |
| authentik | 2026.8.5 | Auth | 799 MiB | 800 MiB | 1.58% | 2356.7 MB | 100.1 s |
| Ollama + Open WebUI | 0.40.13 / 0.12.5 | Local AI | 1.26 GiB | 1.26 GiB | 0.39% | 14910.7 MB | 47.5 s |
| Immich | 3.3.5 | Photos | 1.29 GiB | 1.30 GiB | 0.40% | 4706.9 MB | 17 s |
| GitLab CE | 19.4.5 | Git | 4.32 GiB | 4.35 GiB | 8.07% | 5640.5 MB | 168.1 s |
CPU: 100% equals one vCPU. Images on disk: Docker 29 with its containerd image store counts compressed layers too, so these run larger than the unpacked image. Ready after: seconds from starting the stack to its first valid HTTP response or readiness check, with images already downloaded.