This post serves as a step-by-step guide of how I configured some hardware I had on hand (and some which I purchased) and software configuration to create a low-power, all-purpose headless linux home server. I used a lot of excellent how-to-guides that exist and wanted to specifically document the hardware-specific issues that I experienced in getting my server set up and running. Let’s begin, as always in recipe form:
Time Required: variable depending on your level of proficiency with command-line tools and running a server mostly headless. Approximately 1 day.
Yields: 1 very capable, multifunctional and very convenient headless Linux server
Important Conclusions: (1) The USB-attached SCSI (UAS) kernel module is sometimes buggy; (2) It is important to have realistic expectations about anticipated server performance.
- Ubuntu 16.04 LTS-server edition with LAMP-stack; currently installed kernel at the time of this writing is 4.4.0-96.
- OpenVPN server for access outside my LAN
- NextCloud service with over 2.5TB of available space
- Automated Secondary drive Backup with rsync (I did not use RAID as explained later in this post
- NAS implemented as a Samba Share
- PLEX Server
- Print Server
- Full encryption of mass storage with LUKS; with automounting at startup, and eCryptFS
(B) Gathering your Materials
B-1 Gather your Hardware!
- Computer: Gigabyte BACE-3000 with 8GB of RAM and 120GB SSD. I chose this to be my main server box primarily because of it’s low power consumption (I’ve calculated it at ~5-7W idle). While it is extremely far from winning any performance awards (see benchmarks) I found the performance very reasonable for my use case. I chose it over the raspberry Pi 3 because I found that it had better USB and networking performance, as well as more versatility with respect to software compatibility due to the BACE’s X86 platform – it does come at a power consumption cost, however.
- Mass Storage and Enclosure: Mediasonic ProRAID HUR3-SU3S3 USB 3.0 2-bay 3.5″ enclosure, outfitted with 2 x 3TB WD-RED drives.
- Linux Installation Media. I used a 2GB USB drive with an image of Ubuntu Server 16.04 LTS. If you want to use your linux server as a HTPC you could either use a Linux server-specific distribution and install a desktop environment and Kodi/whatever your preferred HTPC software is, or install a standard desktop Linux distribution and install server-specific software.
- 1 Linux Sticker. To stick on to your hardware. Mostly for your vanity or sense of self-satisfaction.
- Peripherals. I used a monitor, keyboard (and Ethernet cable as I will explain later) before setting up the server as completely headless. I think it is the most convenient route to set up the server unless you have an existing image with SSH-enabled to install or if you use Network Console
B-2 Put Your Hardware Together
Set up your enclosure: As outlined above, I set up my 2 bay enclosure in “Single Mode.” At first, I intended to use RAID-1 for added redundancy; however after much reflection around both my use case and the notion that “RAID is not a backup”, I opted to use each of the drives each separately (i.e. as two partitions – “single mode”) for separate purposes:
- The first drive is used as the main data storage for NextCloud
- The second drive is used as a back-up for NextCloud (via rsync) as well as for a Samba Share/Media Repository for PLEX. I am not too fussed about losing any particular media – family photos are mostly stored on Google Photos – however would want any sensitive information on NextCloud duplicated as a backup
- Other options I considered were a BTRFS implementation of RAID however my focus was not so much on performance as it was stability and my familiarity of working with EXT4
Set up your computer/CPU: since I was working with the BACE-3000, I installed my RAM/SSD and made sure that the device was able to POST. A few other BIOS-related and boot-related notes about the NUC-based device are:
- If you intend to use the device as an HTPC, there is an option in the BIOS to increase the shared video memory which I very much recommend
- UEFI and secure boot are enabled by default, however I did not have any incompatibility with installing Ubuntu
Think about additional hardware: I had to have an ethernet cable handy as I was not successful at initially getting Ubuntu server to recognize the integrated wireless card during the initial set-up wizard. It was only after setting up wicd and wireless
Other thoughts: this might seem obvious, but have realistic expectations and clear goals about the anticipated I/O performance that you would like to achieve. In my set-up, despite having a USB3.0 hardware enclosure and a gigabit ethernet connection, the main bottleneck here is the 802.11n wireless connection to the home network which connects most of my household computers.