Infrastructure
The homelab runs on a single Proxmox hypervisor hosting one VM — OPNsense, the router and firewall — while the workloads themselves live on two bare-metal uCore servers. The guiding principle is reproducibility: the operating system is immutable and image-based, so there is no in-place configuration to drift, and everything above it is provisioned declaratively with Ansible. No server is configured by hand; if a machine were lost, it could be rebuilt from an Ignition config plus the Ansible repository.
Storage is centralised on a Synology DS920+ and shared to the servers over NFS, which keeps the containers stateless where possible and the bulk data in one place that is itself backed up off-site. The two servers split responsibilities cleanly: monitoring runs the observability stack (Prometheus, Grafana, Loki) as rootless Podman containers, and kontti runs the media, AI and application workloads. Why each of these choices was made — immutable OS, Podman over Kubernetes, the rootless/rootful split — is documented on the Architecture decisions page.
graph TD
proxmox[Proxmox hypervisor] --> opnsense[OPNsense VM<br/>router · firewall · DNS]
opnsense --> monitoring[monitoring<br/>Prometheus · Grafana · Loki<br/>rootless Podman]
opnsense --> kontti[kontti<br/>media · AI · apps<br/>rootful Podman]
opnsense --> nas[Synology DS920+<br/>NFS · backup target]
kontti -.->|NFS| nas
monitoring -.->|scrape| kontti
monitoring -.->|scrape| proxmox
nas -.->|Hyper Backup| b2[(Backblaze B2<br/>off-site)] | Component | Purpose |
|---|---|
| Proxmox | Hypervisor, runs the OPNsense router VM |
| monitoring | Prometheus + Grafana + Loki observability stack |
| kontti | Media, AI and application services |
| Synology DS920+ | NFS shared storage and backup target |