Building My Home Lab: A Journey into Self-Hosting
After years of relying on cloud services, I decided to take the plunge and build my own home lab. This journey has been both challenging and incredibly rewarding, teaching me more about infrastructure and networking than any tutorial ever could.
The Hardware Setup
I started with a refurbished HP EliteDesk as my primary server. It's not the most powerful machine, but it's energy-efficient and surprisingly capable for a home lab setup.
Key Components:
- **CPU**: Intel i5-8500T (6 cores, 9MB cache)
- **RAM**: 32GB DDR4
- **Storage**: 512GB NVMe SSD + 2TB HDD
- **Network**: Gigabit Ethernet
The most important lesson here? You don't need enterprise-grade hardware to start. Begin with what you have and upgrade as you learn what you actually need.
Choosing Proxmox
I evaluated several virtualization platforms before settling on Proxmox VE. Here's why it won:
1. Open Source: No licensing headaches
2. Web Interface: Clean, intuitive management UI
3. Container Support: Both VMs and LXC containers
4. Community: Excellent documentation and active forums
The installation was straightforward. I followed the official guide and had Proxmox running within an hour.
Docker and Orchestration
Inside Proxmox, I created a dedicated Ubuntu VM for Docker services. This VM runs all my containerized applications:
- **Traefik**: Reverse proxy with automatic SSL
- **Portainer**: Docker management UI
- **Home Assistant**: Home automation
- **Gitea**: Self-hosted Git service
- **Nextcloud**: File sync and share
- **Jellyfin**: Media server
The Docker Compose Pattern
Every service gets its own docker-compose.yml file in a organized directory structure:
version: '3.8'
services:
app:
image: service:latest
container_name: service-name
restart: unless-stopped
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.service.rule=Host(`service.domain.com`)"
- "traefik.http.routers.service.entrypoints=websecure"
- "traefik.http.routers.service.tls.certresolver=letsencrypt"
networks:
traefik:
external: trueTraefik for Routing
Traefik has been a game-changer. It automatically:
- Routes traffic to the correct containers
- Handles SSL certificates via Let's Encrypt
- Updates routing when containers start/stop
- Provides a dashboard for monitoring
The best part? Once configured, it just works. No manual certificate renewals or config updates needed.
Remote Access with Cloudflare Tunnel
For secure remote access, I use Cloudflare Tunnel (formerly Argo Tunnel). This means:
- No open ports on my home router
- No need for dynamic DNS
- Built-in DDoS protection
- Free for personal use
Backup Strategy
This is crucial. I learned the hard way after a configuration mishap nearly wiped my Gitea instance.
My current backup approach:
1. Automated Proxmox Backups: Weekly full VM backups to external USB drive
2. Docker Volume Backups: Daily backups of critical volumes to NAS
3. Off-site Backup: Weekly encrypted backups to Backblaze B2
The 3-2-1 rule: 3 copies, 2 different media types, 1 off-site.
Monitoring and Maintenance
I use Uptime Kuma to monitor all services. It sends me alerts via Discord when something goes down. For system monitoring, I run Grafana with Prometheus for metrics collection.
Weekly maintenance includes:
- Reviewing logs for errors
- Updating containers
- Checking backup integrity
- Monitoring disk space
Lessons Learned
Start Small: I initially tried to run everything at once and ended up overwhelmed. Start with one or two services and expand gradually.
Document Everything: Future you will thank present you. I maintain a wiki with all my configs and procedures.
Security First: Use strong passwords, enable 2FA where possible, keep services updated, and use VLANs to isolate critical infrastructure.
Energy Efficiency: My entire setup uses about 45W idle, which translates to roughly $5/month in electricity. Way cheaper than cloud hosting.
What's Next?
I'm planning to:
- Add a second server for high availability
- Implement automated testing of backups
- Expand my monitoring stack
- Build a custom dashboard for family members
Conclusion
Building a home lab has been one of the most valuable learning experiences of my tech journey. It's given me hands-on experience with technologies I'd only read about and complete control over my data.
If you're considering building your own home lab, my advice is simple: just start. You'll make mistakes, things will break, and that's exactly how you'll learn.
Feel free to reach out if you have questions about any part of my setup. Happy self-hosting!