MiniLabHQ
builds

My $200 N100 Homelab: 11 Services, 8W Idle, Eight Months Uptime

A first-person walkthrough of my current N100 mini PC homelab — every part, every service, every BIOS tweak, and what the whole thing costs to run per year. Built and documented so you can copy it.

By Editorial · · 8 min read

I’ve been running my current homelab on a single N100 mini PC for eight months. It pulls 8 watts at warm idle, runs eleven services, and the whole thing — hardware plus storage — cost $193 out the door. This is the build I send to friends who ask “what should I get to start a homelab?”

Here’s exactly what’s in it, what runs on it, and what I’d change if I were building today.

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 was the right call at the price. It has two SODIMM slots (so the 16GB is upgradeable to 32GB later), a 2.5” SATA bay (so I added the 2TB drive for media + backups), and idle wattage is excellent. The 500GB NVMe is for the OS and Docker volumes; the 2TB SATA is for everything else.

I bought the SATA SSD used from a local listing for $34. If you can find a 1–2TB SATA SSD used, it’s the cheapest way to add bulk storage. Avoid spinning rust here — the noise and idle power of a 3.5” HDD defeats half the point of an N100 box.

I picked up the same machine on Amazon — Beelink S12 Pro N100 mini PC. Prices fluctuate $20–$30 depending on sales; 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:

That’s about 3.7W of savings, or roughly $5–6/year. Over the box’s expected life, that pays for the SSD.

Power and cost

The whole setup pulls about 70 kWh per year. At my electricity rate (around $0.18/kWh on time-of-use), that’s $12.60/year to run.

For comparison, my old Synology DS218+ pulled about 220 kWh/year and ran a third as many services. The N100 box has paid for itself in electricity savings alone in about five years’ worth of avoided draw. (It hasn’t been running that long yet, but the math says it will.)

What I’d change today

A few things I’d do differently if I were starting fresh in 2026:

  1. Buy 32GB of RAM up front. I’m at 6GB used now, but I keep wanting to add things (Frigate for camera AI, Immich for photos, a small Mastodon instance). 32GB DDR4 SODIMMs are under $80 now; the headroom is worth it.
  2. Get a 1TB NVMe instead of 500GB. Docker volumes grow faster than I expected. The 500GB drive is at 60% capacity and I’m being careful.
  3. Add a UPS. I haven’t yet and I should. A $60 CyberPower CP685AVR keeps a 10W mini PC alive for 30+ minutes during a power blip and lets it shut down cleanly.
  4. Consider an N305 if you want headroom for VMs. The N100 is enough for my 11 containers, but if I wanted to run a couple of small VMs alongside, the N305’s eight cores (vs N100’s four) would make sense. Compare in my 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:

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. Eight months in, zero unexpected restarts, eight watts at idle, eleven services that I trust to be there when I need them. The whole thing fits in one hand.

#n100 #homelab-build #budget #docker #nextcloud #home-assistant #pi-hole #jellyfin

Related

Comments