Mobile Processor, M.2, VMs, Containers, oh my!
I needed a server at home. Something with more than my NAS, but still small, because space is a premium in my small office. My NAS is awesome, but the processor and memory are limited, and I wanted to run more containers, and even some game servers.
I first learned of the new generation of mini pcs with the advent of the Intel NUC. A little digging and I found similar designs based around AMD processors, which I tend to prefer in the price/performance category. One company in the fray is Beelink. Their website leaves a lot to be desired, but overall their mini pcs seem to be popular.
I took a chance on the GTR4 model. It comes with a Ryzen 9 4900h, 32GB of DDR4, and a 500GB M.2 NVME drive. The specs are close to what I needed, so I decided to buy it, and do a couple upgrades. 64GB of DDR4, 2TB M.2 NVME, and this little box has what I need to run a bunch of virtual servers.
The next decision was how to design the software layout on the machine. Knowing that I need to run game servers AND some lightweight web services (in containers), I started with a bare metal virtualization foundation (also known as a Type 1 Hypervisor). Originally, I intended to use VMWare ESX, but due to its limited hardware compatibility, it wouldn’t work in this case. In another first, I tried out Proxmox.
Proxmox is a complete Type 1 hypervisor, with a web based GUI available for management. It’s fairly intuitive to get basic functionality, and it doesn’t take too long to get use to the software/configuration.
I started with a linux VM to run several containers (I use docker and docker compose running on Ubuntu Server) – currently running the following:
Portainer – I simple UI for basic management of Docket Containers. Not perfect, but improves admin.
Heimdall – A webpage of links to other pages/apps. I use it to make accessing local stuff easier.
Homebridge – Home automation tool. Let’s me link non homekit devices with homekit.
Uptime Kuma – A simple website availability monitor
Teamspeak – Voice chat server I use when gaming with my kids
TS3 Manager – A web GUI for managing Teamspeak.
….with more to come soon.
The performance on that first Linux VM and the containers was excellent, so I moved onto my next project – A Counter-Strike Source game server. I haven’t built one in a while, and I wanted to try out the Service Creation Tool I saw in the Steam forums. Supposedly, It can simplify creating a number of game servers. The only downside is that it’s a windows utility only. So, my next VM was Windows Server 2022. Windows is a bit more heavy on base resource consumption, especially with ram. Good thing I have plenty 🙂
The Server Creation Tool is fine, but I likely will delete this VM and build a linux machine for this as well. I don’t think it really accomplishes a lot for me. For now, though, its running, so onto the next.
The final VM is back to linux, and It’s a Minecraft Server. Yea, my kids still play Minecraft, and they like having their own dedicated shared world. This is the one I was most nervous about, as even with a few users, it tends to burst CPU utilization at times, and I didn’t know how it would work on a mini pc, sharing resources with a bunch of other virtual computers. So far, even after increasing the render distance in the config, it’s been fast, and no in game lag! I will soon be opening the ports up to allow a few users from outside of my network to access it. Time will tell how it handles the workload, but so far I am pleased.
The final task was where to put this mini server. I have a plywood sheet (painted white) that my main network gear is flush mounted onto, and it had some remaining space. Being a 3d printing nerd, I decided to design and print a basic bracket to hold this mini pc on that board:
Overall, I am happy with the project, so far. I have other virtual server plans to add, and hopefully it continues to run fast and quiet.