I don’t trust big corporations to protect my data, especially if I am getting their service for “free”. There are entirely too many horror stories of individuals and businesses that rely on services like Google and Microsoft to hold all of their personal or company data where accounts and data have been locked out or even deleted with no warning. While these stories make up only a very tiny fraction of their user base, I don’t feel I can trust them. After all, what incentive do they have to keep my data safe? These are companies that measure income in the billions. At most, I toss about $100 a year at them.
Nope, the only real choice here to ensure that I always have control of my data is to have my own server in a location I have control and access to whenever I want. This does not mean I won’t use their services as secondary storage and service providers. Why wouldn’t I? I can get those services for free or nearly free and only a fool has a single point of failure in any system being relied upon.
With that, I decided I had to run my own server. Okay, I also like tinkering with tech stuff and this is a great excuse to do so. We just need a good plan and a modest budget. The first part of that is determining the hardware to use. This is where serverbuilds.net comes in. JDM_WAAAT has put together a number of parts lists for servers that range in the amazingly cheap to the wallet-screaming expensive. I went with the NAS Killer v2.0 build for my system:
|Xeon E5645 x2
|EVGA 850 BQ (refurb)
|Arctic Freezer 12 x2
|AZZA CSAZ-GT 1
|HP SAS Expander
|StarTech Power Splitter
|Mini SAS to SATA
|Arctic F12 x5
|WDC_WD80EFAX x2 (shucked)
These prices reflect what I paid at the time of me ordering. They will vary slightly with market conditions. The most difficult piece to acquire is typically the motherboard as it keeps selling out in the various outlets that still have them around.
The Xeons are hexa-core CPUs with hyperthreading giving my server a full 24 threads of playground. One of the 8TB hard drives is set as my parity drive and all of the others are holding data. My OS is stored on a 16GB flash drive. I still want more memory but DDR3 ECC sticks are expensive at any size. On the bright side, I am only showing about 26% RAM in use on average right now. This will surely only go up as I add more services.
For software, I started with Unraid for the OS. This OS is Linux underneath but is managed via web interface. Lime Technology has built an impressive system for managing an array (pun intended) of different sized storage devices as a single unit while still providing data protection. It also doesn’t hurt that the system also handles Docker images natively as well as virtual machines (VMs).
I also connected this server up to an APC BR1500MS Sine Wave UPS to protect my digital bits from power outages or voltage spikes. I did actually have an outage while waiting for this to arrive and it took about a full day for the parity check to finish. No bueno. And according to my APC, this server with all 9 fans running as well as six hard drives only pulls about 117 watts on average (see the power usage update below in UPDATE3). It sometimes drops as low as 107 or spikes up to ~135 when doing a couple of Plex transcodes. Overall, not bad for 8-9 year old technology.
As for services, I have quite a few. Many of these I found by using this Github repo. Unraid runs Docker images natively so I use that for several services:
- Plex: Media server. I have about 5TB of movies and TV shows and music that I watch throughout my house on various players (Roku, AppleTV, etc)
- Tautulli: Various reports for Plex logs. Basically this tells me who is streaming what, how often any given title is played, who my most active users are, what my most active devices are and so much more. It’s not just fun to look at, it helps me to see when I need to put more horsepower under Plex.
- Radarr: Movie management. Useful for some of those rarer titles.
- Sonarr: Like Radarr but for TV shows. Also useful for some of those rarer titles.
- Sabnzbd: Back end for Radarr and Sonarr.
- Mariadb: Database server. MySQL fork. Much easier to maintain in Docker.
- Collabora: Browser based office suite. I use this to allow editing of Office files from within Nextcloud.
- Poste.io: Full web based mail system with admin interface
- McMyAdmin2: Minecraft server manager with web based admin interface. This runs a single private world for family and friends.
- Firefly III: Personal budgeting application. Written in PHP, source available on Github. Uses a MariaDB back end.
- Unifi Controller: Software to manage Ubiquiti Unifi networking equipment. Software is free where the Cloud Key is about $200 and does the same thing but with a less powerful CPU and far less storage.
- Airsonic: Music streaming. It’s sort of a self-hosted Spotify. It lacks a recommendation engine but can stream anything from lossy mp3 to flac.
- Headphones: Music management. This pulls metadata and can be useful for locating rarer titles.
- Beets: Music library manager and MusicBrainz tagger
- MusicBrainz: Music database. It’s like IMDB for music…and open source.
- Openeats: Recipe site. Something like Allrecipes.com but self-hosted.
I also run an Ubuntu 18.04 LTS virtual machine. This is used to host several more services:
- Apache: Web server. Serves all sites directly on the Ubuntu server and acts as a reverse proxy for most everything in the list above.
- Nextcloud: File sharing. Think Dropbox, Google Drive, or Onedrive but you host and control it.
- Bitwarden: Password manager. It is like LastPass but can be self-hosted. It boasts almost all the same features, apps, and convenience of LastPass. This was by far the easiest transition I had going from 3rd party hosted to self hosted.
- Known: The software running this site. Part of the Indieweb project, it is somewhat a cross between core WordPress blogging and Tumblr and Twitter.
- Rainloop: Email web client. Emphasis on the “client” part. This is only a web interface for IMAP calls. Rainloop does not actually download and store your email from the accounts it connects to. It does, however, allow me to easily switch between multiple inboxes from several accounts across multiple domains with a single login.
- Webtrees: Genealogy software. The interface is a little rough but there aren’t really a lot of options for this kind of thing. This allows you to create and edit family trees or import GEDCOM files from other systems.
- Roundcube: I used this before installing Rainloop. It is still on there for now but only connects to one email server which is the one for my personal domain. It does store email locally that it fetches via IMAP.
- Financier: I finally found a YNAB4 like budget system that is self-hosted and browser based. The setup isn’t as easy as I would like but it has everything that I use in YNAB4 except for recurring transactions…and I can manage without those.
With all of this I have a server with approximately 19TB of storage currently installed and another 3TB about to be added. Just under 6TB of this is currently in use but the growth is already showing. Everyone in my immediate family has access to their own Nextcloud storage, Bitwarden password vault, email via Roundcube or Rainloop, and access to my media on Plex.
Next on my list is to find a suitable replacement for classic YNAB. While my financial and budget data are not hosted on YNAB’s servers as it would be with their new version (which is web-only), I do have to store those files in Dropbox currently to share the family budget with my wife. There are a number of options out there for self-hosting but most follow the new trend of “you can spend XX today” style of budgeting. I am against this because it positions your money as something to be spent rather than saved.
I prefer the zero based budget, sometimes referred to as envelope budgeting. This is where you assign every single penny to a budget category as you get paid. When you run out of money in that budget line, tough. You are done spending on that for the month. I find this to better restrict useless spending and encourage saving more. I will probably toy with Silverstrike for a bit. It is somewhat of a fork of Firefly III but written in Python/Django and seems to be the closest thing I can currently find to a browser based budgeting app that works like YNAB.
UPDATE1: I have Silverstrike running but it lacks a few key items that I use. Of concern is the “budgets” section does not actually let you know how much of your income is budgeted. So without just breaking out a calculator, there’s no easy way to tell if you have actually budgeted to zero. Sigh. The search continues.
UPDATE2: I have added Poste to my list of Docker images. This is a full stack mail service with everything you need to host your own email server with very little setup. I like that it handles multiple domains and lets me add all the accounts I want with just a click or two. Spam filtering seems to be working fairly well so far and the built in dashboard is nice.
UPDATE3: I added McMyAdmin2 and created a new Minecraft world at my daughter’s request. I’m also working on swapping the low voltage RAM for normal 1.5v RAM as I have run into issues with getting it to recognize more than 48GB even when I have more than 64GB worth of sticks installed. In addition, I have installed the last of my 3TB drives so now I have the full 22TB of data storage with the 8TB parity drive. This has upped my power consumption to about 150 watts idle with burst usage up to about 190 watts. Still no luck on a self-hosted zero based budget app, though. sigh….
UPDATE4: So I broke down and set up Firefly III. While I still don’t like the “You can spend X dollars a day” approach, it is by far the best self hosted personal budgeting system that I have found. Also there is a decent early access Android client by a third party dev. There is certainly a gap between YNAB and Firefly III in terms of features but most of the ones that I have encountered are fairly minor if you can overcome that X dollars per day approach.
UPDATE5: I couldn’t manage with Firefly III. The concepts on money handling were too drastically different from my approach. But thanks to a fork of Finiancier.io, I have my web based YNAB4 replacement.
I’ve also added streaming music to my home server with a “simple” stack of 4 docker apps. I use Headphones to manage the library and a combination of Beets and MusicBrainz to supply the album metadata. All of that is then handed over to Airsonic to stream to whatever device I want to listen on.