A lot of people recommend Docker, but I will go further and say to specifically use Docker compose.
That way all the configuration is in a file that you can backup/restore. Updating is really easy, and you will never forget one of the random flags you need to set.
- PiHole - you can use the custom DNS to route domain names to you npm
- npm (Nginx proxy manager) - allows easy access to all your services hosted on one box
Yes, another great solution.