Finally Sharing My Homelab
Finally Sharing My Homelab
After years of quietly building and refining my home infrastructure, I’m finally ready to share my homelab setup with the community. What started as a modest Beelink mini PC and a Raspberry Pi has evolved into a comprehensive self-hosted ecosystem that powers my personal projects, learning initiatives, and even some light production workloads.
This post details my current homelab configuration, the rationale behind each component, and the lessons learned along the way. Whether you’re just starting your homelab journey or looking to optimize an existing setup, I hope this comprehensive overview provides valuable insights into building a flexible, scalable home infrastructure.
Understanding the Homelab Evolution
From Humble Beginnings to Current State
My homelab journey began like many others—with curiosity and modest hardware. The initial setup of a Beelink mini PC and Raspberry Pi served as an excellent foundation for learning containerization, networking, and basic system administration. Over time, the need for more processing power, better virtualization capabilities, and increased storage capacity drove the expansion.
The current iteration represents a thoughtful balance between performance, form factor, and energy efficiency. The 10-inch rack form factor was chosen specifically for its compact footprint while still providing adequate space for cooling and cable management. This size has proven ideal for my home office environment where space is at a premium.
Hardware Architecture
The left rack houses two Minisforum computers: an MS-A2 and an MS-01, both running Proxmox for virtualization management. The MS-A2, with its AMD Ryzen 7 5800H processor, handles most of the compute-intensive workloads, while the MS-01 serves as a secondary node for redundancy and additional capacity. This dual-node setup enables live migration, high availability, and distributed storage through Proxmox’s built-in Ceph integration.
The Mac Studio, positioned separately, runs Ollama for local Large Language Model (LLM) inference and serves as an MCP (Model Context Protocol) server. This dedicated AI workstation provides the computational resources necessary for experimenting with modern machine learning models without relying on cloud services, maintaining data privacy and reducing operational costs.
Storage is centralized through a Synology NAS, which provides reliable, scalable storage for virtual machine images, container data, backups, and media files. The NAS serves as the backbone of the homelab, offering features like data deduplication, snapshots, and cross-site replication.
Monitoring and Management
Three JetKVM devices are strategically placed to monitor the Mac Studio and both Minisforum PCs. These IP-based KVM solutions provide out-of-band access to the systems, which is invaluable for troubleshooting boot issues, BIOS configuration, and emergency recovery scenarios. The ability to access the console remotely has saved countless hours that would otherwise be spent physically connecting to each machine.
Prerequisites for a Homelab Setup
Hardware Requirements
For a setup similar to mine, you’ll need:
- Compute Nodes: At least one modern x86_64 system with virtualization extensions (VT-x/AMD-V). My Minisforum MS-A2 with Ryzen 7 5800H provides 8 cores and 16 threads, which handles most workloads efficiently.
- Management Node: A separate system for specialized workloads like AI/ML (Mac Studio in my case) or a dedicated management server.
- Storage: Network-attached storage with at least 4TB usable space for growth. My Synology NAS started with 8TB and has been expanded as needed.
- Networking Equipment: A managed switch with VLAN support, a reliable router, and adequate cabling. I use a 8-port managed switch with PoE for some devices.
- Monitoring Hardware: IP KVM devices for out-of-band management. JetKVM has worked well for my needs, but there are several alternatives.
Software Dependencies
- Virtualization Platform: Proxmox VE 8.x for its robust feature set and active development community
- Container Orchestration: Docker and Docker Compose for application deployment
- Monitoring Stack: Prometheus, Grafana, and Node Exporter for system monitoring
- Backup Solution: Veeam or UrBackup for automated backups
- Network Services: pfSense or OPNsense for firewall and routing
Network Considerations
A homelab requires careful network planning:
- Separate VLANs: Create isolated networks for management, guest access, and production workloads
- Static IPs: Reserve IP addresses for critical infrastructure components
- DNS Configuration: Set up internal DNS resolution for easier service access
- Backup Connectivity: Ensure redundant paths for critical services
Installation and Setup
Proxmox Installation
1
2
3
4
5
6
7
8
9
10
# Download the latest Proxmox VE ISO
wget https://www.proxmox.com/en/downloads/item/proxmox-ve-8-0-0
# Create a bootable USB
dd if=proxmox-ve-8.0-0.iso of=/dev/sdX bs=1M status=progress
# Boot from USB and follow installation prompts
# - Select ZFS for storage (mirrored vdevs for redundancy)
# - Configure network with static IP
# - Set up email for alerts
After installation, secure your Proxmox host:
1
2
3
4
5
6
7
8
9
10
# Update and secure the system
apt update && apt upgrade -y
systemctl enable pveproxy pvedaemon pvemanager
# Configure firewall
ufw allow 22 80 443 8006
ufw enable
# Set up Let's Encrypt for web interface
pvecm addcert yourdomain.com
Container Setup with Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Install Docker on Proxmox hosts
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl enable docker && systemctl start docker
# Create a docker-compose.yml for common services
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports:
- "9443:9443"
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
restart: unless-stopped
Synology NAS Configuration
1
2
3
4
5
6
7
# Set up shared folders for Proxmox
# 1. Create an iSCSI target on Synology
# 2. Connect from Proxmox using the iSCSI initiator
# 3. Format and add to storage pool
# Install Synology Drive package for file synchronization
sudo synoindex --rescan
Configuration and Optimization
Proxmox Cluster Configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /etc/pve/cluster.conf
<network>
<bond>
<name>bond0</name>
<slaves>eth0 eth1</slaves>
<mode>802.3ad</mode>
<transmit_hash_policy>layer3+4</transmit_hash_policy>
</bond>
<bridge>
<name>vmbr0</name>
<bond>bond0</bond>
<vlans>0</vlans>
<tag>1</tag>
</bridge>
</network>
Performance Tuning
1
2
3
4
5
6
7
8
9
10
# Optimize ZFS for homelab workloads
echo "zfs_dirty_data_max_percent=10" >> /etc/modprobe.d/zfs.conf
echo "zfs_txg_timeout=5" >> /etc/modprobe.d/zfs.conf
# Enable CPU frequency scaling
cpupower frequency-set -g performance
# Configure hugepages for VMs
echo 'vm.nr_hugepages=1024' >> /etc/sysctl.conf
sysctl -p
Security Hardening
1
2
3
4
5
6
7
8
9
10
11
# Configure fail2ban for Proxmox web interface
apt install fail2ban
cat > /etc/fail2ban/jail.local << EOF
[proxmox-web]
enabled = true
port = 8006
filter = proxmox-web
logpath = /var/log/pveproxy/access.log
maxretry = 3
bantime = 3600
EOF
Usage and Operations
Daily Management Tasks
1
2
3
4
5
6
7
8
9
10
11
# Monitor system health
pveperf
pvesh get /nodes/localhost/status
# Manage VMs and containers
qm list
pct list
# Check resource utilization
htop
iotop
Backup Procedures
1
2
3
4
5
6
7
# Create a backup job in Proxmox
vzdump 100 --mode snapshot --compress zstd --mailto admin@homelab.com
# Set up automated backups
cat > /etc/cron.d/proxmox-backup << EOF
0 2 * * * root vzdump 100 --mode snapshot --compress zstd
EOF
Monitoring Setup
1
2
3
4
5
6
7
8
9
10
# Deploy Prometheus and Grafana
docker run -d --name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
docker run -d --name grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=securepassword \
grafana/grafana
Troubleshooting Common Issues
Network Connectivity Problems
1
2
3
4
5
6
7
8
# Check bond interface status
cat /proc/net/bonding/bond0
# Verify VLAN tagging
ip addr show vmbr0
# Test iSCSI connectivity
iscsiadm -m discovery -t st -p 192.168.1.100
VM Performance Issues
1
2
3
4
5
6
7
8
# Check CPU pinning
virsh vcpupin 100
# Monitor disk I/O
iostat -x 1
# Adjust memory balloon driver
qm set 100 -balloon 0
Storage Corruption Recovery
1
2
3
4
5
6
7
8
# Check ZFS pool health
zpool status -v
# Scrub the pool
zpool scrub tank
# Replace a failing drive
zpool replace tank ada1 ada2
Conclusion
Building a homelab is a journey of continuous learning and refinement. My setup has evolved from simple beginnings to a sophisticated infrastructure that supports my professional development, personal projects, and experimentation with new technologies. The key lessons I’ve learned are to start small, plan for scalability, and prioritize redundancy and monitoring from the beginning.
The combination of Proxmox for virtualization, Docker for containers, and a centralized Synology NAS for storage provides a flexible foundation that can adapt to changing needs. The addition of specialized hardware like the Mac Studio for AI workloads demonstrates how a homelab can incorporate cutting-edge technologies while maintaining practical utility.
Remember that every homelab is unique—what works for me may not be optimal for your specific requirements. The most important aspect is to build something that serves your learning goals and interests while maintaining security and reliability. I encourage you to share your own homelab setups and experiences with the community, as we all benefit from collective knowledge and collaboration.
For further learning, I recommend exploring the official Proxmox documentation, Docker’s best practices guide, and ZFS administration resources. The homelab community on Reddit, Discord, and specialized forums provides excellent support and inspiration for your next project.