I need to plan out what hardware I will be using for my main server. The main question I need to ask is what exactly do I plan on running on this server and how will it shape my system requirements? I’m going to go through some types of services I plan to run on my server, list one or two commonly used software in each category, and then look at their system requirements. I may not end up sticking with the software listed, but it’s a good starting point for figuring out my hardware requirements.
Hypervisor
A hypervisor is something that allows me to divide up my server into virtual machines. For example, It would allow me to have a Windows server, Debian server, and Ubuntu server all running simultaneously on the same hardware. A popular open source hypervisor right now is Proxmox. The system requirements for Proxmox are fairly small: 64-bit processor with EMT64/AMD64 and VT/AMD-V (which is probably every Intel or AMD processor made in the last decade) and 2 GB of RAM. What gets installed on top of Proxmox is what really matters for my system requirements.
Containers
Containers are similar to virtual machines. They’re both isolated subdivisions of the physical machine they run on. The big difference is that containers share a kernel. A big advantage of this is it allows the containers themselves to be more lightweight than a virtual machine. If you have an app to run and you’re already running an OS with the kernel required for that app, you can get your app running very quickly in an isolated environment by creating a new container for it. However, if you are not already running the kernel required for your app, you’re going to need to spin up a new host machine, virtual or otherwise, with the proper OS.
I’ll most likely be setting up Docker at first for my containers, and probably explore Kubernetes as well to manage those containers. Docker’s system requirements are a 64-bit processor with KVM support and 4 GB of RAM. Anything running in a container is going to require slightly more RAM than it would if it was running directly on the host machine.
VPN
A virtual private network (VPN) is a connection between a device or network and a remote network. This connection is encrypted so even though the connection travels over the internet, other people on the internet cannot see the data traversing that connection. The primary way I would like to utilize a VPN is when I am away from home, I would like to be able to connect my phone and laptop to my home network to access my resources remotely.
Two VPN softwares that I’ll likely check out are OpenVPN and Wireguard. For both, RAM and storage requirements are relatively minimal. However, CPU usage on a VPN can be fairly high since it is having to encrypt all outbound traffic and decrypt all inbound traffic. A big difference between the two softwares is CPU utilization. OpenVPN is single-threaded for a single user. That means it can, at best, completely utilize a single core of my CPU. According to OpenVPN’s documentation, a single core at 3GHz will allow for approximately 250Mbps of data transfer. However, I have read about some tweaks that could get that up to 1000Mbps on a 3GHz CPU. I’d be interested to test that. Wireguard, on the other hand, is multithreaded so it won’t be so limited by a single core’s speed. Regardless, I think a 3GHz CPU is a good minimum requirement to set for myself for this, as I think 250Mbps is probably an acceptable data transfer limit when I’m remote. I also need to make sure I have a CPU with AES-NI support, which is practically every CPU these days.
DNS
Domain Name System (DNS) is a phone book for the internet. The common use case is when someone wants to go to alanwoodall.com, their system may need to ask a DNS server what the IP address of alanwoodall.com is, and then use that IP address to connect. There are a few reasons why I’d like to host my own private DNS server:
- To easily access resources on my LAN via URL instead of IP address
- Have a DNS sinkhole so my systems don’t route to some nefarious (read: ad) servers
- Marginally faster DNS queries while my DNS server has lookups cached
- The privacy of external DNS servers not knowing what I’m trying to connect to
There are quite a few DNS softwares to choose from; Pi-Hole, Adguard Home, Unbound, Technitium, etc. They all have fairly minimal system requirements. The least requirements of anything on this list. However, uptime is a big deal for a DNS server. I fully intend on breaking this initial server occasionally, and so I don’t want to rely on it as my sole DNS server. I may set up a secondary DNS server on this machine, and set up a primary DNS server on my router/firewall device.
Network Monitoring
This is a fairly broad concept and how it is implemented depends entirely on what I’m looking to do monitoring and alerting on. I intend on setting up something to alert me if any of my servers/website goes down, if system resources are low, or if temperature is getting too high. I’d also like a dashboard where I can at-a-glance see usage/resources for my servers. I’d also like an easy way to manually review logs/stats if I have to do some troubleshooting.
LibreNMS, Zabbix, Uptime Kuma or Prometheus are some popular options. In general, these don’t need much CPU usage, but they can require larger chunks of storage and RAM as the number of devices and metrics being monitored goes up. With my small homelab, I don’t foresee that being a concern.
Game Server
It won’t be all the time, but there will 100% come a time when I would like to host a game server for me and my friends. A Valheim and Satisfactory server will happen in the future whether I self host it or not. For Valheim, we’re looking at potentially very high RAM usage normally and high CPU usage during world generation and exploring ungenerated areas. For Satisfactory, we’re looking at 16GB RAM minimum. Both are primarily single-threaded, so a CPU with good single core performance is a must.
Miscellaneous
There are a number of other softwares I’m considering for this server, but they’re either lower on my priority list or I haven’t decided how or if I’d like to implement them on this initial homelab build. Some things on the list are:
- Intrusion detection and prevention system (IDPS). I may get a standalone machine just for this and either make it my firewall or put it right behind a firewall.
- Reverse proxy for self-hosting
- Certificate management
- Some productivity apps like note-taking, task list, or calendar applications that I can reach through my VPN
The IDPS is the only thing on this list that would use significant system resources, but there’s a good chance I won’t implement that on this server.
Shopping Time
So the main takeaways I got for my hardware needs are:
- A CPU with good single-core performance and probably around 6-8 cores minimum.
- 64GB of RAM is probably a safe bet for a minimum to cover everything.
- Need a good NVMe drive for fast read/writes. RAID is probably not needed. 1TB is probably enough.
- It needs potential expandability for extra NICs or NVMe slots.
- Rack mounted servers are out since I won’t have a rack.
- Something small form factor as long as the motherboard has 1 or 2 PCIe slots for either an extra NIC or NVMe drives.
I could put together the hardware for this server from scratch, but I want something small and I don’t really like working with small form factor or micro motherboards. Making sure everything fits together nicely can be a headache when working inside small cases. I’d rather just buy something already built and simply replace/upgrade some of the parts as needed.
I’ll look for something prebuilt that has the processor that I want, and swap out the RAM and drives if needed. The CPUs I’m looking at are probably in the Intel i5 gen 12/13/14 range.
I have heard good things about the Optiplex line of Dell computers, and I like the size of their small form factor versions. I found a refurbished one with a i5-12500 CPU for $550. It only has 256 GB of storage and 8 GB of RAM, but I was expecting to need to replace that anyways. I’ll purchase the RAM and storage upgrades once I get the device and verify it’ll work for me.
Adding that $550 to my tab for this project brings my total tab up to $903. I’ll likely be spending at least $100 on RAM and storage upgrades. Keeping this project around $1000 so far is much better than I expected.
Networking Equipment Update
My new router, switch, and wireless access point have been delivered. I have verified that they’re functional but I haven’t had the chance to dive deep into testing and configuration. My next post(s) will likely be all about configuring them.
Cheers
~Alan
Leave a Reply