Seperation of Concerns is a principle used in Computer Science that helps seperate functionality, making things easier to work with, and avoiding issues that could occur with too much going on in one place
Why seperate concerns for a server?
Simple, once your server has a lot of services, and functionality going on, it gets hard to maintain, and can cause additional issues. For example, if a service dies and requires a reboot, that will end up rebooting all your other services too.
How to seperate concerns
Some people will seperate each service into their own VM, however I don't believe this to be efficient (in all cases).
What I recommend is to take your server needs, and break them down into logical blocks, adding each of these blocks to their own VMs. This will keep certain things contained alone, as you want them seperated as much as possible (NAS, etc).
Concern/VM | Services | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Production Web Server | Nginx | PHP | CertBot | |||||||
Staging Web Server | Nginx | PHP | CertBot | mariaDB | ||||||
NAS | OpenMediaVault | |||||||||
SQL server | mariaDB | |||||||||
Torrent Box | Transmission | VPN (to external) | Sonarr | Radarr | Ombi |
Why not use a dedicated server for each concern?
You can! No-one's going to stop you, but unless each concern requires (i.e. needs the dedicated hardware/isolation) its own dedicated server, it's hugely redundant. Again NAS as an example, would be good for a dedicated machine, as it'll be safer if there's no additional chance it goes down due to failure of an unrelated service.