If you're getting a VPS I'd generally recommend getting pangolin. It's basically like cloudflared tunnels, but self hosted (on the vps). It works the same, you use it to map your subdomains to IPs on the other end of the secure tunnel.
It has things like user access controls for each of the subdomains, the ability connect it to an identity provider, rules governing which paths need authentication and which don't, etc.
It can optionally come preconfigured with crowedsec, but I had problems with it falsely classifying my normal traffic as an attack and banning my IPs.
Just be aware that even if your service has a login page, you first need to log into pangolin to be granted access to the service, and although that's fine on the web (especially if you're using an sso), some native apps don't like the extra login. Homeassistant handles it better now, but I haven't gotten jellyfin native android app working yet.