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:

  1. Under 25 dB at idle. That’s quieter than a whisper from 3 feet away. Fanless or near-fanless only.
  2. Fits behind a monitor or under a TV stand. No rack. No blinking lights visible from the couch.
  3. 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.