Unless you're planning on virtualizing your router on the server (think OPNsense VM or something) then really only one ethernet port is required. Otherwise the sky is the limit. For example, mine has a 1 Gbps port, a 2.5gbps port, and two 10 Gbps ports.
Depends on what you want/need and whether you want to future proof I guess.
PiHole can't specify specific ports for each cname, which is what you need a reverse proxy for.
Typically, you create all of your cnames in pihole and direct them to your reverse proxy server IP. From your reverse proxy of choice, you specify each url to the specific ip:port of your service.
Thanks for the suggestion. I followed that and it didn't solve the problem sadly.