A detailed breakdown of my first home server build using TrueNAS Scale, Docker, ZFS, and a suite of self-hosted applications for media, photos, and AI.
Introduction
After months of planning and learning, I finally completed my first home server build, and I wanted to document the entire process and final architecture. My primary goal was to repurpose an old gaming PC into a reliable, multi-functional server for my family's needs, focusing on data ownership and privacy. This post covers the hardware, storage strategy, software stack, and the intricate networking setup.
The Hardware
The foundation of this project is my retired gaming rig. It provides more than enough power for my use cases, especially with a dedicated GPU for video transcoding.
- CPU: Intel i5-7600k
- Motherboard: Gigabyte GA-B250M-D2V
- RAM: 32GB DDR4
- GPU: Zotac Geforce GTX 1060 3GB
- PSU: Corsair VS550
The Operating System and Storage
I chose TrueNAS Scale as the host OS for its robustness, excellent ZFS support, and native Docker capabilities. My storage is configured as follows:
- OS Drive: 500GB Crucial SATA SSD
-
andromeda
Pool (4TB Mirror): Dedicated ZFS mirror for family photos and videos via Immich. -
orion
Pool (2TB Mirror): A ZFS mirror for all media files and, crucially, persistent storage for all Docker application configurations. -
comet
Pool (1TB Stripe): A single-disk pool for non-critical, temporary data.
The Self-Hosted Services (via Docker)
All services run as Docker containers, managed via the Portainer UI. My stack is built around three core use cases.
1. Automated Media Server
- Streaming: Jellyfin (leveraging the GTX 1060 for hardware transcoding).
- Automation: The full *Arr stack (Sonarr, Radarr, Bazarr, Prowlarr) for a "set it and forget it" media library.
- Requests: Jellyseers provides a user-friendly request portal.
- Privacy: All downloaders (qBittorrent, Sabnzbd) are routed through a Gluetun VPN container.
2. Private Photo Cloud
- Immich: This is the star of the show. It provides a self-hosted Google Photos alternative, automatically backing up photos from our mobile devices.
3. Local AI Hub
- OpenWebUI & LiteLLM: A powerful combination to create a local ChatGPT-like interface that can connect to multiple LLM APIs.
The Networking Architecture
This was the most challenging and rewarding part. I implemented a three-tiered access system using Nginx Proxy Manager, Cloudflare, and Tailscale.
- Local DNS (
*.local.mydomain.com
): For fast and reliable access on the home network. - Tailscale VPN (
*.tail.mydomain.com
): Secure access from anywhere in the world by simply activating the VPN on a device. - Cloudflare Tunnels (
service.mydomain.com
): For the few services I want to expose publicly, I use a secure Cloudflare Tunnel with Google OAuth for an extra layer of authentication. No open ports on my router!
What's Next?
The journey doesn't end here. My roadmap includes:
- Home Assistant: For centralizing and automating smart home devices.
- AdGuard Home: For network-wide ad and tracker blocking.
-
Robust Backups: Implementing a 3-2-1 backup strategy by using TrueNAS Cloud Sync to push encrypted snapshots of my
andromeda
(photos) andorion
(app-configs) pools to Backblaze B2.
This project has been an incredible learning experience. Building and managing your own private cloud is a powerful way to take control of your data and learn a ton in the process.
Feel free to check out the full documentation on my GitHub! [https://github.com/kushagrakasbi/KryNet-Homelab/tree/main]
Let me know your thoughts or if you have any questions in the comments!
Top comments (0)