MiniLabHQ
Isometric budget homelab stack showing N100 mini PC, external SATA drive, and Docker container icons
builds

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.

By MiniLabHQ Editorial · · 8 min read

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

PartSpecCost
Mini PCBeelink S12 Pro (Intel N100, 16GB DDR4, 500GB NVMe)$159
SATA SSDCrucial 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.

ServicePurposeRAMNotes
CaddyReverse proxy with auto-HTTPS80MBCloudflare DNS challenge for wildcard certs
Pi-holeNetwork-wide ad/tracker blocking120MBDNS for the whole house
AdGuard HomeBackup DNS + DNS-over-HTTPS90MBFailover when Pi-hole reboots
Nextcloud (AIO)File sync, photos, contacts, calendar1.4GBAll four nodes in one Compose file
Home AssistantHome automation600MB35 entities, 18 automations
JellyfinMedia server400MB idleHardware transcoding via the N100’s iGPU
VaultwardenPassword manager (Bitwarden API-compatible)60MBFamily of 4 + 200 logins
Uptime KumaStatus page for my own services110MBNotifies me via Telegram when something’s down
WatchtowerAuto-updates Docker containers nightly30MBSkips Nextcloud and HA — those I update manually
TailscaleMesh VPN to access services from anywhere50MBWorks as the only “external” exposure I have
GlancesWeb-based system monitor60MBQuick 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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

Comments