I generally agree, I have a cheap AWS Lightsail VPS (mainly for email hosting since my ISP blocks port 25 because I'm a "consumer" and they want to protect the world for consumer spammers) but also for flexibility. I like that the Internet is not at my doorstep (no open ports at home). So, cheap VPS, Wireguard and my home machines to serve whatever I want. I don't pay extra if I use a ton of CPU or disk IO, for example.
Here is my Wireguard server (cheap VPS) and client (my home servers) config:
#
# Client (the actual self-host local server)
#
[Interface]
## This Desktop/client's private key ##
PrivateKey = redacted
## Client ip address ##
Address = 10.10.123.2/24
[Peer]
## Ubuntu 20.04 server public key ##
PublicKey = redacted
## set ACL ##
AllowedIPs = 0.0.0.0/0
## Your Ubuntu 20.04 LTS server's public IPv4/IPv6 address and port ##
Endpoint = redacted:12345
## Key connection alive ##
PersistentKeepalive = 15
#
# Server (in the Wireguard context, exposed to the Internet)
#
[Interface]
## My VPN server private IP address ##
Address = 10.10.123.1/24
## My VPN server port ##
ListenPort = 12345
## VPN server's private key i.e. /etc/wireguard/privatekey ##
PrivateKey = redacted
PostUp = iptables -i eth0 -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.123.2
# Add lines for more ports if desired
PostDown = iptables -i eth0 -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.123.2
# Add lines for more ports if desired
[Peer]
## Desktop/client VPN public key ##
PublicKey = redacted
## client VPN IP address (note the /32 subnet) ##
AllowedIPs = 10.10.123.2/32