A $200 N100 Homelab: 11 Services, ~8W Idle, Low Maintenance
A complete reference N100 mini PC homelab build — every part, every service, every BIOS tweak, and what it costs to run per year. Documented so you can copy it.
This is a complete, copyable reference homelab on a single N100 mini PC: roughly 8 watts at warm idle, eleven services, and a total cost — hardware plus storage — that lands around the $200 mark. It’s the build to point someone to when they ask “what should I get to start a homelab?”
Here’s exactly what’s in it, what runs on it, and what’s worth changing depending on your needs.
The hardware
| Part | Spec | Cost |
|---|---|---|
| Mini PC | Beelink S12 Pro (Intel N100, 16GB DDR4, 500GB NVMe) | $159 |
| SATA SSD | Crucial MX500 2TB (added to the internal 2.5” bay) | $109 (used $34) |
| Total | $193 |
The Beelink S12 Pro is a strong pick at this price (any equivalent dual-SODIMM N100 box works the same way). It has two SODIMM slots (so the 16GB is upgradeable to 32GB later), a 2.5” SATA bay for adding a 2TB drive for media + backups, and excellent idle wattage. The 500GB NVMe is for the OS and Docker volumes; the 2TB SATA is for everything else.
Buying the bulk SATA SSD used is the single cheapest move here — a 1–2TB SATA SSD off the used market can be a fraction of new price, which is what makes the sub-$200 total realistic. Avoid spinning rust for this role: the noise and idle power of a 3.5” HDD defeats half the point of an N100 box.
The same machine is widely available — Beelink S12 Pro N100 mini PC ↗. Prices fluctuate by sale; check Beelink’s site for direct discounts too.
The OS layer
Debian 12 minimal install, no desktop environment, Docker installed from the official Docker repo. That’s it. I tried Proxmox first and ran a single Debian VM inside it; the overhead wasn’t worth it for one machine. If you’re running multiple physical hosts and need isolation between them, Proxmox makes sense. For one box, bare-metal Debian + Docker is simpler and uses 200–300MB less RAM.
The whole OS install fits in 8GB. Docker images and volumes live on the NVMe drive. Media, backups, and large persistent data live on the 2TB SATA SSD, mounted at /mnt/storage. I keep a copy of the Docker Compose files in /home/me/stack/ with subfolders per service.
What’s running
Eleven services in eleven containers, all behind a Caddy reverse proxy. Total RAM used: about 6GB of 16GB.
| Service | Purpose | RAM | Notes |
|---|---|---|---|
| Caddy | Reverse proxy with auto-HTTPS | 80MB | Cloudflare DNS challenge for wildcard certs |
| Pi-hole | Network-wide ad/tracker blocking | 120MB | DNS for the whole house |
| AdGuard Home | Backup DNS + DNS-over-HTTPS | 90MB | Failover when Pi-hole reboots |
| Nextcloud (AIO) | File sync, photos, contacts, calendar | 1.4GB | All four nodes in one Compose file |
| Home Assistant | Home automation | 600MB | 35 entities, 18 automations |
| Jellyfin | Media server | 400MB idle | Hardware transcoding via the N100’s iGPU |
| Vaultwarden ↗ | Password manager (Bitwarden API-compatible) | 60MB | Family of 4 + 200 logins |
| Uptime Kuma | Status page for my own services | 110MB | Notifies me via Telegram when something’s down |
| Watchtower | Auto-updates Docker containers nightly | 30MB | Skips Nextcloud and HA — those I update manually |
| Tailscale | Mesh VPN to access services from anywhere | 50MB | Works as the only “external” exposure I have |
| Glances | Web-based system monitor | 60MB | Quick view of CPU/RAM/disk |
Caddy fronts everything. The only port exposed to the wider internet is the Tailscale endpoint; nothing else has a public DNS record. The team at DockerHomeLab ↗ has solid Compose file examples for most of these services — I started from their templates and customized from there.
The Docker Compose layout
I keep one docker-compose.yml per service, in its own subfolder. This makes updates and debugging much easier than one giant compose file. The tree looks like:
/home/me/stack/
├── caddy/
│ ├── docker-compose.yml
│ ├── Caddyfile
│ └── data/
├── pihole/
│ ├── docker-compose.yml
│ └── etc-pihole/
├── nextcloud/
│ ├── docker-compose.yml
│ └── .env
└── ... (one folder per service)
A shared external Docker network (proxy) lets Caddy reach every service container by name. Each service’s compose file declares networks: [proxy] and exposes its port only on the internal network, never bound to the host. Caddy is the only thing with port 80/443 published.
The BIOS tweaks that mattered
When I first plugged it in, the Beelink idled at 11.5W. After BIOS tweaks, it sits at 7.8W. The changes:
- Disabled Intel Turbo Boost — N100 doesn’t need it for homelab workloads
- Enabled Package C-State up to C10
- Disabled the front-panel LED
- Disabled WiFi and Bluetooth (it’s wired)
- Set fan curve to “silent” (the fan rarely spins above 1200 RPM now)
That’s on the order of a few watts saved — a handful of dollars a year — which over the box’s life roughly offsets the cost of the SSD.
Power and cost
A tuned build like this draws on the order of ~70 kWh per year. At a typical residential rate, that lands around $10–$15/year to run — use the power cost math with your own rate for an exact figure.
For comparison, a typical older 2-bay NAS or always-on tower in this role pulls several times that for fewer services. Against that baseline, an N100 box of this kind pays for itself in electricity savings within a few years and keeps saving after that.
What to change for your needs
A few adjustments worth considering depending on how far you plan to take this:
- Buy 32GB of RAM up front if you’ll expand. Eleven services land comfortably under 16GB, but appetites grow (Frigate for camera AI, Immich for photos, a small Mastodon instance add up fast). 32GB DDR4 SODIMM kits are inexpensive; the headroom is cheap insurance.
- Get a 1TB NVMe instead of 500GB. Docker volumes grow faster than most people expect; the larger boot/volume drive is worth the small premium.
- Add a UPS. A small line-interactive UPS (a ~600VA unit like a CyberPower CP685AVR class) keeps a ~10W mini PC alive through a power blip and lets it shut down cleanly — well worth it for an always-on box.
- Consider an N305 if you want headroom for VMs. The N100 is enough for ~11 containers, but for a couple of small VMs alongside, the N305’s eight cores (vs the N100’s four) make sense. Compare in the N100 buying guide.
The “should I copy this?” answer
If you want a working homelab in a weekend, with the cheapest x86 hardware that handles a real service stack:
- Buy an N100 mini PC with at least one SODIMM slot upgradeable to 32GB and at least one 2.5” SATA bay
- 16GB RAM minimum, 32GB if budget allows
- 500GB NVMe boot drive plus a 1–2TB SATA SSD for bulk storage
- Debian 12 minimal + Docker
- One Compose file per service, all behind Caddy
Total cost: $180–$250 depending on RAM and storage. Annual electricity: $10–$15. Time to a working stack: a weekend if you’ve never done this before, a few hours if you have.
If you want help picking the rest of the stack, SelfhostRealm’s first-5-services guide ↗ is the most useful starting point I know of — it covers what to run first and why, before you get into the rabbit hole of self-hosting everything you’ve ever used.
That’s the build. Properly tuned, it settles at roughly eight watts at idle and runs eleven services dependably on hardware that fits in one hand — which is the entire point of doing it this way instead of on an old tower.
Related
A Starter Self-Hosting Stack for a Mini PC
The first services to run on a new N100-class homelab box, in sensible order: reverse proxy, DNS, remote access, backups, then the fun stuff — with the
A Low-Power 24/7 Home Server Build That Stays Quiet
A complete parts-to-power walkthrough of a 24/7 home server designed around idle wattage and silence first: hardware choices, the OS layer, BIOS tuning, a
Is an N100 Mini PC Enough for Plex Transcoding? What Quick Sync Can and Can't Do
The Intel N100's Quick Sync engine makes a tiny mini PC a capable Plex transcoder, but only within limits. Here's what it handles in hardware, where it