So, you want to build a home server… In this series, I will detail the steps I took to develop a custom home server for my home, and the benefits I have gained.
NOTE: Devices can be purchased that would provide some of these features, but most of us also have a limited budget and would like more control and flexibility of such a device. Most of my use cases would not be available using such a device. These are the reasons why I have begun a personal home server project.
Before designing anything, it is critical that you determine exactly WHAT you will be using this home server for. Once you have an idea of what you want this server to do, you can choose the core architecture of the server, which is the most difficult part to change in the future.
My Use Cases
- Regular Backups
- Many of us have an enormous amount of irreplaceable (or difficult to replace) data at home, be it home videos of the kids, photos, music, documents, etc. Unexpected loss of this data can easily happen, due to virus infection, disk failure, laptop theft, etc. Regular backups are a great way to mitigate much of this risk.
- Shared Workspaces
- Some of my computer related projects involve HUGE files, such as home video editing and Virtual Computer Images. My laptop utilizes an SSD disk drive which has limited storage space. I’m never working on all of these projects at the same time, so I need a place to store projects that are not currently in use.
- Shared Media
- I need a common place to hold all of our music, movies and shows so they can be accessed from any device in our home. I would like to be able to stream and trans-code content on the fly, so would not want to choose a low power architecture, such as Intel Atom or ARM.
- Home Management / Automation
- In the future, I would like to monitor components of our home, such as power usage, heating/cooling, and more. I want a central (and secure) place where this data can be collected and monitored. I would also like to add a security camera to our driveway that would feed to this central location.
- Web Based Management
- I need to be able to SECURELY access and manage all of these items from anywhere. I want to be able to quickly see if there are any problems with the server or home, remotely.
- Web Development
- As a web developer, I sometimes develop website solutions in my spare time for clients. I want to be able to host client websites on my server during the development process. My websites require backend code and complete database hosting. This server must have the capacity to host such sites (though with a small number of users) without impacting my requirements mentioned previously.
There are many different architectures to choose from that address specific requirements, such as power efficiency, quietness, speed, etc. Desktop computers typically use an architecture that is built for performance, while your table computer would be designed for efficiency and battery life.
For example, an Intel Atom based architecture will be extremely efficient and use very little power. However, it may not have the power to encode video for streaming on the fly, or hosting a game server for multi-player gaming. If the server is too weak, you may loose some functionality that you really want/need. By the time you would realize this, you would need to purchase, design, and build almost a completely different home server from scratch.
On the other hand, if you build a server that has much more power than ultimately needed, it will end up costing you more money in parts and power usage! While sitting fairly idle, your server may draw more than 3x the power of a low power architecture.
A home server provides services for your connected devices to consume, so it does not need the high performance level of your desktop computer that is actively used. Since it is usually running 24 hours a day, 7 days a week, power usage is an important part of the design.
The use cases have detailed some specific actions that I would like to execute on the server. The next step is to determine all of the requirements that would be necessary for these use cases. My general requirements below can be daunting for a person with limited computer experience, but following guides on the internet (or future parts in this blog) will be of great help.
- Minimal Power Usage: The home server needs to be available at any time to support media sharing, home monitoring, and backups, so I want it to use minimal electricity while still satisfying performance requirements.
- Security: Since I want to be able to access my data from outside of my home, I need to make sure that the data on the server is protected from malicious people. I also want to make sure that when I upload/download files from outside my home, that others cannot “sniff” the data as it passes through the networks leading to my home.
- Data Protection: Disks often fail without warning. I want to keep a copy of my important files on a separate disk. Except for disaster, such as house fire, the chance of both disks failing at once are nearly 0. Disasters DO happen, but I’ll save this mitigation project for a future post.
- Minimal Maintenance: I want the server to automatically make backups of my data, protect against common attacks/threats, and perform updates without me having to log in every day.
- Disk Space: I need enough disk capacity to store video, music, virtual machines, and more. I also need to have enough storage to backup this data in case of disk failure.
- Performance: This disk, processor, and network need to be fast enough to support streaming of video without pause. I also need to be able to copy large files back and forth without waiting for hours.
- Cost: I want to either try to use existing hardware in my home for this project, or spend as little money as possible on new hardware.
- Alerts: I want to be notified if anything goes wrong, such as disk failure or intrusion. The earlier I discover the problem, the easier it is to fix (in most cases).
Most of my above use cases and requirements would be satisfied by a low power architecture, but not all. If I went with the low power option, I would not be able to fully support media trans-coding with streaming for BlueRay quality video. I will proceed with a modest performance desktop architecture and reduce the processor speed and voltage to reduce power usage somewhat. I already have much of this hardware in my parts bin, so the cost is greatly reduced.
In the next part of this series, I will determine the hardware and software necessary to fulfill these requirements.