VM/Server Seperation of Concerns



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/VMServices
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.

Virtual Machines are wonderful, as they allow you to make use of more powerful/high spec machines while minimising the wasted usage...