The homelab started two years ago with a Raspberry Pi running Home Assistant. Today I have a mini PC running Proxmox, 12 self-hosted services, and a fully automated house. Here’s the tour.
The hardware
Main server: Minisforum MS-01
- Intel Core i9-12900H
- 64 GB DDR5
- 2× 2TB NVMe (ZFS mirror)
Network:
- Router: UniFi Dream Machine SE
- Switches: 2× UniFi USW-Lite-8-PoE
- APs: 2× UniFi U6-LR
NAS Storage:
- TrueNAS Scale on a Proxmox VM
- 4× 4TB in RAIDZ1
The software stack
Proxmox as the foundation
Everything runs on Proxmox VE. Split between:
- VMs: For full operating systems (TrueNAS, Windows for remote gaming)
- LXC Containers: For lightweight Linux services (most of my apps)
- HAOS as a VM: Home Assistant needs its own VM for proper USB passthrough
The self-hosted services
| Service | Purpose |
|---|---|
| Home Assistant | Home automation |
| Vaultwarden | Password manager |
| Nextcloud | Storage and calendars |
| Jellyfin | Media streaming |
| Paperless-ngx | Document management |
| Immich | Photo backup |
| Grafana + InfluxDB | Monitoring and metrics |
| Traefik | Reverse proxy |
| Authentik | SSO and authentication |
External access with Cloudflare Tunnel
I don’t open ports on the router. All external access goes through Cloudflare Tunnel, which establishes an outbound encrypted connection from my server to Cloudflare’s edge nodes.
# cloudflared config
tunnel: my-tunnel-id
credentials-file: /root/.cloudflared/credentials.json
ingress:
- hostname: ha.ferllini.com
service: http://homeassistant:8123
- hostname: cloud.ferllini.com
service: http://nextcloud:443
originRequest:
noTLSVerify: true
- service: http_status:404
Centralized authentication with Authentik
All external services are behind Authentik for SSO. One login, centralized policies, and mandatory 2FA for everything.
Home Automation
42 devices in Home Assistant. The mix:
- Zigbee: Aqara devices (sensors, switches)
- WiFi: Sonoff plugs with ESPHome (custom firmware)
- Matter: Some newer devices
- Integrations: Bambu Lab P2S, UniFi, Plex, and more
An automation I love
# When I arrive home
alias: "Arrival home"
trigger:
- platform: zone
entity_id: person.fran
zone: zone.home
event: enter
action:
- service: light.turn_on
target:
area_id: living_room
data:
brightness_pct: 80
- service: climate.set_hvac_mode
entity_id: climate.ac_living_room
data:
hvac_mode: cool
- service: notify.telegram
data:
message: "Welcome home 🏠"
Lessons learned
1. Backups first, always. I lost data once due to no VM backup. Now I follow 3-2-1: 3 copies, 2 different media, 1 offsite (Backblaze B2).
2. Document everything. I have an Obsidian Vault with docs for each service — how it’s configured and why. A lifesaver when something breaks at 2am.
3. Don’t overcomplicate what works. I was tempted to migrate to Kubernetes. I didn’t. Docker Compose + Proxmox LXC is perfectly fine at homelab scale.
4. Monitoring from day one. Grafana + Prometheus from the start. Knowing the server was at 90% RAM saved me from an outage.
Where to start?
If you’re just beginning, my recommendation:
- A Raspberry Pi 5 or cheap mini PC
- Home Assistant OS
- Vaultwarden for passwords
- Nextcloud for files
That gives you real value without complexity. You can add more later.
Questions about a specific service? Reach out — happy to help.