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