r/selfhosted had a thread this January that stuck with me: “Girlfriend approved homeserver setup” — a photo of a clean desk, a tiny black box tucked behind a monitor, and a title that got 1,313 upvotes. The top comment: “She noticed when Plex went down. That’s when I knew it was real.”
That thread resonated because it captures the actual bar for a family home server. Not benchmark scores or rack-mounted gear — the bar is does anyone in the house notice it exists, and if they do, is it because something broke or because something useful happened?
I built our family server in March 2024. Eighteen months later, my partner uses it daily without knowing its IP address. Here’s exactly how that happened — the hardware, the software, the mistakes, and the power bill.
The Three Non-Negotiables: Silence, Footprint, and “Just Works”
Servers in data centers can sound like jet engines. Servers in living rooms cannot. After my first attempt — a used Dell PowerEdge T320 that idled at 42 dB (roughly a quiet refrigerator) — got vetoed within 72 hours, I established three rules:
- Under 25 dB at idle. That’s quieter than a whisper from 3 feet away. Fanless or near-fanless only.
- Fits behind a monitor or under a TV stand. No rack. No blinking lights visible from the couch.
- Zero manual intervention for core services. If Immich stops uploading photos, I hear about it. If Pi-hole blocks a shopping site, I hear about it faster.
Hardware: What I Actually Bought (And What I Wish I’d Bought First)
I tested four configurations over six months. Here’s how they compare:
| Hardware | Price (Used) | Idle Power | Noise (Idle) | RAM Max | Verdict |
|---|---|---|---|---|---|
| Raspberry Pi 5 (8 GB) | $80 | 5W | 0 dB (fanless case) | 8 GB | Too weak for multi-service |
| Dell OptiPlex 3070 Micro | $130 | 12W | 19 dB | 32 GB | Winner — silent enough, powerful enough |
| Synology DS220+ | $250 | 18W | 18 dB | 6 GB | Expensive for the CPU, locked ecosystem |
| Old ThinkPad T480 (repurposed) | $0 (had it) | 8W | 22 dB | 32 GB | Good starter, ugly on a shelf |
The OptiPlex 3070 Micro — a 7×7×1.4-inch box with an i5-8500T, 16 GB DDR4, and a 512 GB NVMe — cost $130 on eBay. It’s literally smaller than the router it sits next to. I added a 4 TB external USB HDD ($89) for media and backups, bringing total hardware to $219.
What I wish someone had told me: skip the Raspberry Pi for a multi-service home server. The Pi 5 is a fantastic single-purpose device (Pi-hole alone, a lightweight NAS, Home Assistant). Attempting Docker Compose with Immich, Nextcloud, and Nginx Proxy Manager on 8 GB of LPDDR4X will teach you the meaning of OOM killer. My Pi 5 swap-thrashed itself into unusability within 40 minutes of Immich’s initial library scan.
The Software Stack: One docker-compose.yml to Rule the Living Room
Everything runs through Docker on Ubuntu Server 24.04 LTS. Here’s the core stack my family actually interacts with:
services:
# DNS ad-blocking — invisible, essential
pihole:
image: pihole/pihole:latest
ports:
- "53:53/tcp" - "53:53/udp"
- "8089:80/tcp"
environment:
TZ: "America/Chicago"
WEBPASSWORD: "${PIHOLE_PASSWORD}"
volumes:
- ./pihole/etc:/etc/pihole
- ./pihole/dnsmasq:/etc/dnsmasq.d
# Photo backup — the service my partner actually uses
immich:
image: ghcr.io/immich-app/immich-server:release
volumes:
- /mnt/data/photos:/usr/src/app/upload
env_file: .env
# File sync for documents, tax records, shared folders
nextcloud:
image: nextcloud:stable
ports:
- "8080:80"
volumes:
- /mnt/data/nextcloud:/var/www/html
# Finance tracking — replaced our Mint/Personal Capital dependency
wealthfolio:
image: ghcr.io/wealthfolio/wealthfolio:latest
ports:
- "3000:3000"
volumes:
- /mnt/data/wealthfolio:/app/data
# SSL termination and reverse proxy
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
ports:
- "80:80" - "443:443" - "81:81"
volumes:
- ./npm/data:/data
- ./npm/letsencrypt:/etc/letsencrypt
# Docker management dashboard
portainer:
image: portainer/portainer-ce:latest
ports:
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Resource usage on the OptiPlex 3070 at steady state:
| Service | RAM | CPU (Idle) |
|---|---|---|
| Pi-hole | 32 MB | <0.1% |
| Immich (with ML disabled) | 620 MB | 0.2% |
| Nextcloud | 380 MB | 0.3% |
| Wealthfolio | 195 MB | 0.1% |
| Nginx Proxy Manager | 58 MB | <0.1% |
| Portainer | 72 MB | <0.1% |
| PostgreSQL (shared) | 210 MB | 0.1% |
| Total | 1,567 MB | ~1% |
Sixteen gigabytes of RAM leaves enormous headroom. The CPU barely registers until Immich runs face detection on a new batch of photos — at which point it spikes to 65% for about 90 seconds and settles back down.
The Service My Family Actually Uses (Ranked by Real Engagement)
I deployed twelve services initially. After six months, usage data from Portainer container uptime and my own observation painted a clear picture:
| Rank | Service | Who Uses It | Frequency | “I’d Be Mad If It Died” |
|---|---|---|---|---|
| 1 | Pi-hole | Everyone (transparent) | Constantly | Yes — ads are noticeable |
| 2 | Immich | Partner (photo backup) | Daily | Yes — auto-upload is addicting |
| 3 | Wealthfolio | Me (finance tracking) | Weekly | Moderate |
| 4 | Nextcloud | Both (shared docs, taxes) | Monthly | Low |
| 5 | Jellyfin | Both (movie nights) | Weekly | Only on Friday nights |
The services that got deleted within two months: Home Assistant (too much tinkering for our simple apartment), Uptime Kuma (paranoia fuel), and Mealie (we already use Paprika). My advice: deploy three services, wait a month, then add one more. The family server you maintain is infinitely better than the one you abandon.
The Power Bill Reality Check
I plugged the OptiPlex into a Kill-A-Watt for 30 days to get real numbers:
Idle draw: 11.8 W
Average load: 16.3 W (includes nightly backup jobs)
Peak (Immich ML): 38.2 W (roughly 90 seconds per batch)
30-day total: 12.1 kWh
Annual estimate: 145 kWh
Annual cost: $20.30 (at $0.14/kWh US average)
For context, that’s less electricity than a single incandescent light bulb left on 24/7. The Synology DS220+ actually drew more at idle (18W) because its Celeron J4025 lacks the efficiency of Intel’s mobile T-series. And the old ThinkPad T480, despite sipping 8W at idle, produced a faint but perceptible coil whine that my partner described as “a mosquito trapped in the bookshelf.”
The Two Conversations That Will Happen
Conversation #1 — “Why is X not working?” Happens in the first two weeks. Pi-hole blocks a domain that some app depends on (for us it was app-measurement.com, which Samsung Health apparently can’t live without). Fix: open Pi-hole’s Query Log, find the blocked domain, whitelist it. Takes 90 seconds. Whichever family member complained will think you’re a wizard.
Conversation #2 — “Is this costing us money?” In our case the answer was “$1.69/month.” My partner’s response: “That’s less than the drip coffee I forgot to drink this morning.” Your power rate may differ — at European rates (€0.35/kWh), the same hardware costs about $4.25/month. Print the Kill-A-Watt numbers and tape them to the server.
Where to Start If You Have Zero Experience
The OptiPlex Micro route. eBay “Dell OptiPlex Micro i5-8500T 16GB” — $120-$150. Install Ubuntu Server via USB (the installer holds your hand). Run three commands:
sudo apt update && sudo apt install docker.io docker-compose-v2 -y
mkdir ~/server && cd ~/server
nano docker-compose.yml # paste the stack above
docker compose up -d
Navigate to http://your-server-ip:81 — that’s Nginx Proxy Manager’s admin panel. Add your first domain. You now have a home server.
The OptiPlex sits behind our router, silent, drawing less power than a phone charger. Nobody knows it’s there. That’s the whole point.