Work

Home Server Build

I designed and built a home server for both storage, self hosting and automation purposes.

Soft pink and baby blue water ripples together in a subtle texture.

One project that I’ve worked on that has been consistently useful is my home server. I built this server to be a backup for all of my files and to host my own services. It gets use almost every day and has been a great learning experience for me. I’ve learned a lot about networking, server management, and automation.

The Build

I built the server using a mini-ITX motherboard and a Ryzen 3 1200 with 16GB of ram. The server components were chosen to be low power and quiet. For the main backup storage I used a 2 3TB hard drives in a RAID 1 configuration. This means that the data is mirrored across both drives so if one fails, I can replace it and the data will be rebuilt. I also have a 500GB SSD for the operating system and a few other services that I run on the server. Later on I added a 6TB hard drive for additional storage that I don’t need to be double redundant. Later on I added a Nvidia Tesla P4 as this GPU is awesome, you can get them for under $100 and they are great for machine learning and transcoding. It is almost as powerful as a GTX 1080 and uses a fraction of the power.

The Software Side

The server runs using Linux with a distribution called OpenMediaVault. If I was to rebuild the server I would probably choose a different OS such as Proxmox as now my server is running a lot of VMs and containers. The server runs a few services that are hosted using Docker. I have Portainer running to manage the Docker containers, Cloudflared so I can remotely access the server, Jellyfin so I can watch my movies and TV shows, and PiHole which serves as my DNS and blocks ads and malware on my network. I also run Syncthing so that I can sync my work on my laptop to the server.

GPU Acceleration

One of the later additions to the server was a Nvidia Tesla P4. I mainly use this for transcoding movies and TV shows for Jellyfin. As I like to store my media in H265 format and some of my devices don’t support this format. The Tesla P4 is great for this as it actually has 2 built in video encoders and can handle almost 20 streams at once. The one problem with the Tesla P4 is that when I first installed it, it got so hot it turned off to protect itself. This was because it was designed to be used in a server with a blower fan. While my server is designed to be quiet and cool. I was able to fix this by removing the cover of the Tesla P4 and adding an old fan I found to the heatsink. Now the Tesla P4 never goes above 50C.

Storage Issues

One of the biggest issues I have with the server is that the case I chose only has 2 3.5” drive bays. This means that when I wanted to add my 3rd drive I had to get creative. I ended up using a 3D printer to print a bracket that would hold 4 more 3.5” drives. I used PETG as it is strong and I was concerned about PLA warping and softening in the server. This was very important to me as Hard Drives do not like vibration and I wanted to make sure that the drives were isolated from the rest of the server.

What I would do differently

Since I’ve been working with the server for ages I know a lot about what works and what doesn’t. Here’s a few things I would do differently if I was to rebuild the server:

  • Different Case: I would choose a case that has more drive bays. I mostly chose the case I did because it was small and quiet. It also looks cool. But I would choose a case that has more drive bays. Perhaps even a hot swap bay. This would make it easier to add more storage in the future.

  • Different OS: I would choose a different OS. OpenMediaVault is great for a NAS, but I would choose a different OS that is more suited for running VMs and containers. I would probably choose Proxmox as it is a hypervisor that is based on Debian and has a nice web interface. I actually use Proxmox for another server that I helped build for UBCO.

  • Different CPU: I would choose a different CPU. The Ryzen 3 1200 is great for a NAS, but I would love to choose an Intel CPU with QuickSync. This would allow me to transcode movies and TV shows without needing a GPU. This would save a lot of power and heat.

  • ECC Memory: I would choose ECC memory. ECC memory is great for a server as it can detect and correct errors. This is important for a server as it is running 24/7 and I don’t want any data corruption.

  • ZFS Filesystem: I would choose a different filesystem. I would choose ZFS as it is great for a server. It has built in data integrity checks and can detect and correct errors. It also has built in compression and deduplication. This would save a lot of space and make the server more reliable. This would go hand in hand with the ECC memory.

Software Utilized

Linux Docker Nvidia OpenMediaVault Syncthing Jellyfin PiHole Portainer Cloudflare Nginx