Back to Blog
Self-HostingMarch 14, 202412 min read

Building My Home Lab: A Journey into Self-Hosting

How I built a complete self-hosted infrastructure using Proxmox, Docker, and Traefik. From hardware selection to automated deployments.

ProxmoxDockerTraefikHome Lab

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:

yaml
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: true

Traefik 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!

Your Cart

Your cart is empty

Add some awesome 3D prints to get started!