<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Home-Server on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</title>
    <link>https://toolgenix.nxtniche.com/tags/home-server/</link>
    <description>Recent content in Home-Server on ToolGenix — Open-Source AI &amp; Developer Tools: Honest Hands-On Reviews</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://toolgenix.nxtniche.com/tags/home-server/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Family Home Server Guide 2026: From &#39;Girlfriend Approved&#39; Desk Setup to Zero-BS Deployment</title>
      <link>https://toolgenix.nxtniche.com/posts/family-homeserver-beginner-guide-2026/</link>
      <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://toolgenix.nxtniche.com/posts/family-homeserver-beginner-guide-2026/</guid>
      <description>How I built a family home server that actually passed the &amp;#39;girlfriend test&amp;#39; — silent, invisible, and useful enough that nobody complains. Hardware picks, real power numbers, and the services my family actually uses.</description>
      <content:encoded><![CDATA[<p>r/selfhosted had a thread this January that stuck with me: &ldquo;Girlfriend approved homeserver setup&rdquo; — 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: &ldquo;She noticed when Plex went down. That&rsquo;s when I knew it was real.&rdquo;</p>
<p>That thread resonated because it captures the actual bar for a family home server. Not benchmark scores or rack-mounted gear — the bar is <em>does anyone in the house notice it exists, and if they do, is it because something broke or because something useful happened?</em></p>
<p>I built our family server in March 2024. Eighteen months later, my partner uses it daily without knowing its IP address. Here&rsquo;s exactly how that happened — the hardware, the software, the mistakes, and the power bill.</p>
<hr>
<h2 id="the-three-non-negotiables-silence-footprint-and-just-works">The Three Non-Negotiables: Silence, Footprint, and &ldquo;Just Works&rdquo;</h2>
<p>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:</p>
<ol>
<li><strong>Under 25 dB at idle.</strong> That&rsquo;s quieter than a whisper from 3 feet away. Fanless or near-fanless only.</li>
<li><strong>Fits behind a monitor or under a TV stand.</strong> No rack. No blinking lights visible from the couch.</li>
<li><strong>Zero manual intervention for core services.</strong> If Immich stops uploading photos, I hear about it. If Pi-hole blocks a shopping site, I hear about it faster.</li>
</ol>
<hr>
<h2 id="hardware-what-i-actually-bought-and-what-i-wish-id-bought-first">Hardware: What I Actually Bought (And What I Wish I&rsquo;d Bought First)</h2>
<p>I tested four configurations over six months. Here&rsquo;s how they compare:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Hardware</th>
					<th style="text-align: center">Price (Used)</th>
					<th style="text-align: center">Idle Power</th>
					<th style="text-align: center">Noise (Idle)</th>
					<th style="text-align: center">RAM Max</th>
					<th style="text-align: left">Verdict</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Raspberry Pi 5 (8 GB)</td>
					<td style="text-align: center">$80</td>
					<td style="text-align: center">5W</td>
					<td style="text-align: center">0 dB (fanless case)</td>
					<td style="text-align: center">8 GB</td>
					<td style="text-align: left">Too weak for multi-service</td>
			</tr>
			<tr>
					<td style="text-align: left">Dell OptiPlex 3070 Micro</td>
					<td style="text-align: center">$130</td>
					<td style="text-align: center">12W</td>
					<td style="text-align: center">19 dB</td>
					<td style="text-align: center">32 GB</td>
					<td style="text-align: left"><strong>Winner</strong> — silent enough, powerful enough</td>
			</tr>
			<tr>
					<td style="text-align: left">Synology DS220+</td>
					<td style="text-align: center">$250</td>
					<td style="text-align: center">18W</td>
					<td style="text-align: center">18 dB</td>
					<td style="text-align: center">6 GB</td>
					<td style="text-align: left">Expensive for the CPU, locked ecosystem</td>
			</tr>
			<tr>
					<td style="text-align: left">Old ThinkPad T480 (repurposed)</td>
					<td style="text-align: center">$0 (had it)</td>
					<td style="text-align: center">8W</td>
					<td style="text-align: center">22 dB</td>
					<td style="text-align: center">32 GB</td>
					<td style="text-align: left">Good starter, ugly on a shelf</td>
			</tr>
	</tbody>
</table>
<p>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&rsquo;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.</p>
<p>What I wish someone had told me: <strong>skip the Raspberry Pi for a multi-service home server.</strong> 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&rsquo;s initial library scan.</p>
<hr>
<h2 id="the-software-stack-one-docker-composeyml-to-rule-the-living-room">The Software Stack: One docker-compose.yml to Rule the Living Room</h2>
<p>Everything runs through Docker on Ubuntu Server 24.04 LTS. Here&rsquo;s the core stack my family actually interacts with:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">services</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># DNS ad-blocking — invisible, essential</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">pihole</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">pihole/pihole:latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;53:53/tcp&#34;</span> - <span style="color:#e6db74">&#34;53:53/udp&#34;</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;8089:80/tcp&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">environment</span>:
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">TZ</span>: <span style="color:#e6db74">&#34;America/Chicago&#34;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">WEBPASSWORD</span>: <span style="color:#e6db74">&#34;${PIHOLE_PASSWORD}&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">./pihole/etc:/etc/pihole</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">./pihole/dnsmasq:/etc/dnsmasq.d</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Photo backup — the service my partner actually uses</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">immich</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">ghcr.io/immich-app/immich-server:release</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/mnt/data/photos:/usr/src/app/upload</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">env_file</span>: <span style="color:#ae81ff">.env</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># File sync for documents, tax records, shared folders</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">nextcloud</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">nextcloud:stable</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;8080:80&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/mnt/data/nextcloud:/var/www/html</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Finance tracking — replaced our Mint/Personal Capital dependency</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">wealthfolio</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">ghcr.io/wealthfolio/wealthfolio:latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;3000:3000&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/mnt/data/wealthfolio:/app/data</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># SSL termination and reverse proxy</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">nginx-proxy-manager</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">jc21/nginx-proxy-manager:latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;80:80&#34;</span> - <span style="color:#e6db74">&#34;443:443&#34;</span> - <span style="color:#e6db74">&#34;81:81&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">./npm/data:/data</span>
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">./npm/letsencrypt:/etc/letsencrypt</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># Docker management dashboard</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">portainer</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">image</span>: <span style="color:#ae81ff">portainer/portainer-ce:latest</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">ports</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#e6db74">&#34;9443:9443&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">volumes</span>:
</span></span><span style="display:flex;"><span>      - <span style="color:#ae81ff">/var/run/docker.sock:/var/run/docker.sock</span>
</span></span></code></pre></div><p>Resource usage on the OptiPlex 3070 at steady state:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Service</th>
					<th style="text-align: center">RAM</th>
					<th style="text-align: center">CPU (Idle)</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Pi-hole</td>
					<td style="text-align: center">32 MB</td>
					<td style="text-align: center">&lt;0.1%</td>
			</tr>
			<tr>
					<td style="text-align: left">Immich (with ML disabled)</td>
					<td style="text-align: center">620 MB</td>
					<td style="text-align: center">0.2%</td>
			</tr>
			<tr>
					<td style="text-align: left">Nextcloud</td>
					<td style="text-align: center">380 MB</td>
					<td style="text-align: center">0.3%</td>
			</tr>
			<tr>
					<td style="text-align: left">Wealthfolio</td>
					<td style="text-align: center">195 MB</td>
					<td style="text-align: center">0.1%</td>
			</tr>
			<tr>
					<td style="text-align: left">Nginx Proxy Manager</td>
					<td style="text-align: center">58 MB</td>
					<td style="text-align: center">&lt;0.1%</td>
			</tr>
			<tr>
					<td style="text-align: left">Portainer</td>
					<td style="text-align: center">72 MB</td>
					<td style="text-align: center">&lt;0.1%</td>
			</tr>
			<tr>
					<td style="text-align: left">PostgreSQL (shared)</td>
					<td style="text-align: center">210 MB</td>
					<td style="text-align: center">0.1%</td>
			</tr>
			<tr>
					<td style="text-align: left"><strong>Total</strong></td>
					<td style="text-align: center"><strong>1,567 MB</strong></td>
					<td style="text-align: center"><strong>~1%</strong></td>
			</tr>
	</tbody>
</table>
<p>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.</p>
<hr>
<h2 id="the-service-my-family-actually-uses-ranked-by-real-engagement">The Service My Family Actually Uses (Ranked by Real Engagement)</h2>
<p>I deployed twelve services initially. After six months, usage data from Portainer container uptime and my own observation painted a clear picture:</p>
<table>
	<thead>
			<tr>
					<th style="text-align: center">Rank</th>
					<th style="text-align: left">Service</th>
					<th style="text-align: left">Who Uses It</th>
					<th style="text-align: center">Frequency</th>
					<th style="text-align: center">&ldquo;I&rsquo;d Be Mad If It Died&rdquo;</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: center">1</td>
					<td style="text-align: left">Pi-hole</td>
					<td style="text-align: left">Everyone (transparent)</td>
					<td style="text-align: center">Constantly</td>
					<td style="text-align: center">Yes — ads are noticeable</td>
			</tr>
			<tr>
					<td style="text-align: center">2</td>
					<td style="text-align: left">Immich</td>
					<td style="text-align: left">Partner (photo backup)</td>
					<td style="text-align: center">Daily</td>
					<td style="text-align: center">Yes — auto-upload is addicting</td>
			</tr>
			<tr>
					<td style="text-align: center">3</td>
					<td style="text-align: left">Wealthfolio</td>
					<td style="text-align: left">Me (finance tracking)</td>
					<td style="text-align: center">Weekly</td>
					<td style="text-align: center">Moderate</td>
			</tr>
			<tr>
					<td style="text-align: center">4</td>
					<td style="text-align: left">Nextcloud</td>
					<td style="text-align: left">Both (shared docs, taxes)</td>
					<td style="text-align: center">Monthly</td>
					<td style="text-align: center">Low</td>
			</tr>
			<tr>
					<td style="text-align: center">5</td>
					<td style="text-align: left">Jellyfin</td>
					<td style="text-align: left">Both (movie nights)</td>
					<td style="text-align: center">Weekly</td>
					<td style="text-align: center">Only on Friday nights</td>
			</tr>
	</tbody>
</table>
<p>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.</p>
<hr>
<h2 id="the-power-bill-reality-check">The Power Bill Reality Check</h2>
<p>I plugged the OptiPlex into a Kill-A-Watt for 30 days to get real numbers:</p>
<pre tabindex="0"><code>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)
</code></pre><p>For context, that&rsquo;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&rsquo;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 &ldquo;a mosquito trapped in the bookshelf.&rdquo;</p>
<hr>
<h2 id="the-two-conversations-that-will-happen">The Two Conversations That Will Happen</h2>
<p><strong>Conversation #1 — &ldquo;Why is X not working?&rdquo;</strong> Happens in the first two weeks. Pi-hole blocks a domain that some app depends on (for us it was <code>app-measurement.com</code>, which Samsung Health apparently can&rsquo;t live without). Fix: open Pi-hole&rsquo;s Query Log, find the blocked domain, whitelist it. Takes 90 seconds. Whichever family member complained will think you&rsquo;re a wizard.</p>
<p><strong>Conversation #2 — &ldquo;Is this costing us money?&rdquo;</strong> In our case the answer was &ldquo;$1.69/month.&rdquo; My partner&rsquo;s response: &ldquo;That&rsquo;s less than the drip coffee I forgot to drink this morning.&rdquo; 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.</p>
<hr>
<h2 id="where-to-start-if-you-have-zero-experience">Where to Start If You Have Zero Experience</h2>
<p>The OptiPlex Micro route. eBay &ldquo;Dell OptiPlex Micro i5-8500T 16GB&rdquo; — $120-$150. Install Ubuntu Server via USB (the installer holds your hand). Run three commands:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt update <span style="color:#f92672">&amp;&amp;</span> sudo apt install docker.io docker-compose-v2 -y
</span></span><span style="display:flex;"><span>mkdir ~/server <span style="color:#f92672">&amp;&amp;</span> cd ~/server
</span></span><span style="display:flex;"><span>nano docker-compose.yml    <span style="color:#75715e"># paste the stack above</span>
</span></span><span style="display:flex;"><span>docker compose up -d
</span></span></code></pre></div><p>Navigate to <code>http://your-server-ip:81</code> — that&rsquo;s Nginx Proxy Manager&rsquo;s admin panel. Add your first domain. You now have a home server.</p>
<p>The OptiPlex sits behind our router, silent, drawing less power than a phone charger. Nobody knows it&rsquo;s there. That&rsquo;s the whole point.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
