@ampersandrew @Andrew This is exactly what I run — have for ~10 years now.
Cheap VPS running a reverse tunnel, home server runs Traefik + Docker. No open ports on the home box, it connects out to the VPS, VPS forwards traffic back. Subdomains are just DNS records + Traefik routing rules.
On port forwarding: Exposing Jellyfin/NextCloud means auth endpoints, databases, file systems. One CVE and your whole home network is reachable. With a tunnel, your home IP is never exposed and the attack surface is just the VPS.
For the tunnel piece, rathole and frp are both solid lightweight options — just a binary on each end, config file, done. I'd avoid jumping straight to something like ngrok — it's great software but way more complexity than you need for this, and the free tier has limitations that'll frustrate you for self-hosting.
It's a bit of upfront work but once it's running it's very low maintenance. Happy to answer questions if you go this route.