My Home Server Setup
In the beginning of the 2021 under the influence of my friend and /r/Homelab I decided to build a homeserver. I didn’t had any particular goal in mind other than excitment to tinker with some hardware and software, and also get more experience with some software infrastructure things that I usually don’t get to interact with. So in this post I will describe the hardware and the software that I run on my homelab server.
Before we start this is by no means the most optimal hardware/software configuration. All of this can be achieved on any hardware, or even something like Raspberry Pi.
Hardware #
Here is the list of hardware I went with, apart from the ECC RAM everythings is pretty standard.
Motherboard: Asus Prime B550-Plus
CPU: AMD Ryzen 7 3800X
RAM: Samsung 32 GB ECC DDR4 2666 MHz (M391A4G43MB1-CTD)
SSD: Samsung 970 Evo series 500GB M.2 PCIe 3.0
HDD: Western Digital Red Pro 2TB 7200rpm 64MB
Case: Fractal Design Define R5 (I was also considering Silverstone GD07)
Cooler: Noctua NH-U12A
Power Supply: Corsair RM650
For the CPU one of the main things I was looking for are the number of cores/threads, but also something that was available localy and something I could transfer to my gaming PC if things didn’t work out. As it turned out for the workloads that I run CPU load is pretty low, so lower end processor would have worked just as well.
One of the main reasons I went with AMD is ECC support. While it’s not something AMD advertises it’s supported on all their modern processors. As long as motherboard also supports it you should be good to go. I checked motherboard specs in order to make sure it supports RAM frequency and ECC. It is only unbuffered ECC that is supported for registered ECC you need to get Threadripper or EPYC.
For Intel you probably need to get Xenon for the EEC support you will have to check for yourself.
And or course the CPU should support virtualization, which all modern processors should have. For Intel it’s VT-x, for AMD AMD-V.
For the case I was looking for reletively simple design and space for multiple hard drives in case I want to expand later. Define R5 can hold 2 SSDs and eight 3.5" HDDs which should be enough for me for a long time.
Software #
The server runs Proxmox an open-source software server for virtualization management. It has a very nice web interface to manage VMs. The setup was pretty straightforward and I didn’t encounter any problems in the long run with system updates and maintenance.
There are 4 VMs running:
- TrueNAS
- Nomad
- PostgreSQL
- Dev VM
(there is also a pihole running on raspberry pi 3)
TrueNAS #
VM has 2 TB HDD passed through to it from ProxMox which it uses for storage. On top of it I have two plugins running.
Transmission - torrent client that downloads torrents to TrueNAS.
PLEX - A media server that lets you host your own media, it also streams from TrueNAS.
Nomad #
Nomad is a workload orchestrator used to deploy and manage applications. I use it to deploy docker applications but it supports Podman, Java applicatinos, or even an arbitrary commands for tasks (docs). It is a simple single node setup without redundancy (don’t use it like this in production obviously).
Some things that I run in Nomad:
Heimdal - a nice dashboard to quickly access all services within my network.
Wireguard - VPN server I can connect to from outside my network. I got a static IP from my ISP to do it.
NextCloud - a self-host cloud, I mostly use it for file storage and calendar. All data is stored on a NFS mount from TrueNAS that I mount to the nomad VM, and then add a docker volume.
I also want to mention that before arriving on Nomad I tried both Kubernetes and Rancher. Kubernetes required too much management for me and Rancher broke during updates (and made me appreciate DevOps people even more), which obiously was my error but this is why I moved to Nomad. For my needs Nomad was perfect as it required minimal setup/maintenance, after all right now the server is a hobby project so I want to have a good balance between time I invest in it and results that I get back.
PostgrSQL #
Just a Debian VM with PostgreSQL running on it. I usually use it for side projects that run on Nomad.
Dev VM #
This is something I’ve been testing, a vm with dev environment setup that I can access through Wireguard by SSH or RDP. I mostly do Java development with some Go on the side so all the software on it is pretty standard: jdk, go, git, Idea, Goland, nvim, jq.
Plans for the future #
Some things that I want to do in the future with my homelab:
- Adding monitoring and alerts to all services.
- Automating some repetative tasks with Ansible.
- RAID or ZFS mirrors.
- Getting domain name and hosting some services publicly.
- Generally improve security.
- Backups with rsync.
- Running Nomad cluster on Raspberry Pis, I’m planning to buy at least 3 Pis and move most services to them.