If there’s one suggestion I can make if you’re thinking about building a custom computer, it’s to use www.pcpartpicker.com. This site makes parts compatibility issues, which in my opinion is the biggest issue when building a custom PC, far less of a concern. Decide what it is you’d like this computer to do, and tailor it accordingly. Storage server? Great, you don’t need a big video card. Gaming PC? Make sure you get plenty of RAM and a good video card. I’ll be going over my 2 main computers in my home: my media server, and my desktop PC.
Table of Contents
Media Server
This server hosts all of my media (videos, files, photos, etc…). A not so glamorous photo of it in action is below.
Software
It, along with every other computer in my house, runs linux, this one specifically is running Ubuntu 19.10. It is redundantly raided using ZFS, RaidZ1 (basically raid5), which means I can have a single disk fail at any time, and I won’t lose any data.
user@computer$ zpool status
NAME STATE READ WRITE CKSUM
zfs_raid ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
A1 ONLINE 0 0 0
A3 ONLINE 0 0 0
A0 ONLINE 0 0 0
A2 ONLINE 0 0 0
user@computer$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zfs_raid 21.8T 10.7T 11.1T - - 7% 49% 1.00x ONLINE -
If you’re interested in creating your own ZFS pool, I’d recommend this website (https://blog.programster.org/zfs-create-disk-pools) which does a good job of detailing how to setup and maintain one.
Most of the software on this server runs under docker containers, which is a really nice way to organize and control various applications. For example, I wanted to bring up a test Jenkins server just to learn a bit more about pipelining. No problem, just add this to your docker-compose.yml file:
jenkins:
image: bitnami/jenkins:latest
container_name: bitnami
restart: always
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
ports:
- 8080:8080
- 443:8443
- 50000:50000
volumes:
- ${USERDIR}/docker/jenkins-data:/bitnami
Anyway, enough of the software talk, lets move on to the main topic, hardware.
Hardware
This server was meant to be a low budget computer that could house several (in my case, 4) HDDs for long term redundant storage, as well as serve as a Plex Server. Both my media server as well as my desktop are Mini-ITX form factor. Basically this means they are smaller than your traditional computer. You lose out on some PCIe slots and potentially suffer an extra cost with your power supply, but have the advantage of a nice compact computer. The hardware is below:
PCPartPicker Part List CPU AMD Ryzen 5 1600X 3.6 GHz 6-Core Processor CPU Cooler Noctua NH-L12S 55.44 CFM CPU Cooler Motherboard MSI B450I GAMING PLUS AC Mini ITX AM4 Motherboard Memory G.Skill Ripjaws V Series 16 GB (2 x 8 GB) DDR4-3200 CL16 Memory Storage Samsung 860 Evo 250 GB M.2-2280 Solid State Drive Storage Seagate 6 TB 3.5" 7200RPM Internal Hard Drive Storage Seagate 6 TB 3.5" 7200RPM Internal Hard Drive Storage Seagate 6 TB 3.5" 7200RPM Internal Hard Drive Storage Seagate 6 TB 3.5" 7200RPM Internal Hard Drive Case Fractal Design Node 304 Mini ITX Tower Case Power Supply Thermaltake Smart 500 W 80+ Certified ATX Power Supply
Overall I’m pretty satisfied with this computer, given the low cost. One thing that may eventually need an upgrade would be more RAM. It seems like when all my docker containers are busy, 16GB of RAM isn’t always enough. I’m very impressed with AMD processors, however. It’s amazing how much horsepower you get for such a low cost. Keep it cool with a decent CPU cooler and you’re off to the races.
Desktop
My desktop was a bit more expensive as I wanted enough compute power to be able to quickly build a linux kernel, synthesize a Vivado design, and/or run multiple VMs simultaneously. I also splurged on a decent video card, though this is by no means high end.
Software
This computer runs Ubuntu 20.04, which is currently Ubuntu’s latest LTS release. There are several development tools that don’t technically support this latest release, however, in those instances I’ve chosen to run them under a VirtualBox VM to isolate that development, which has been working well so far.
Hardware
As you can see the case has a pop up handle, which is rarely used since the computer isn’t transported anywhere, but is very convenient when you want to change where your desk is, and when it recedes back into the case, it’s not even noticeable. Another cool feature about this case is that all the panels (top, 2 sides, and the front) are snap in only, so there are no screws needed. Initially this sounded like a bad idea, but it really is convenient, and they are tight enough where they don’t fall off.
Underneath the top panel, as well as the right side panel is a region of space where you can run and tie down cables to keep the inside of your case looking neat and tidy. I’m not personally one to care what the inside of my case looks like, however, having more options to route cables more efficiently from one side of the case to the other can help with setup at the very least.
Above is an image of the motherboard with the RAM and heatsink installed. Setting this computer up was simple and relatively enjoyable. The full hardware build list is below:
PCPartPicker Part List CPU AMD Ryzen 9 3900X 3.8 GHz 12-Core Processor CPU Cooler Noctua NH-D15S 82.52 CFM CPU Cooler Motherboard Gigabyte X570 I AORUS PRO WIFI Mini ITX AM4 Motherboard Memory G.Skill Ripjaws V 64 GB (2 x 32 GB) DDR4-3200 CL16 Memory Storage Samsung 970 Evo 500 GB M.2-2280 NVME Solid State Drive Video Card MSI GeForce GTX 1650 4 GB VENTUS XS OC Video Card Case Lian Li TU150 Mini ITX Desktop Case Power Supply Corsair SF 600 W 80+ Gold Certified Fully Modular SFX Power Supply
Building computers, when done correctly, should be a rare event, so it’s important to think through what it is you’d like to use it for, and then build around that. Custom builds have come a long way with tools like www.pcpartpicker.com and improved compatibility of parts. Although Linux is a large learning curve, it’s highly customizable and, in my opinion, more stable than Windows. Whatever you choose, hopefully this gives you some ideas of what to look for and tips for where to begin. Good luck!