Server Specs - HP Elitedesk 800 G3 Mini
Intel Quad Core i5-6500T
16GB DDR4
256GB SSD Boot & Applications
5GB HHD Storage
I chose to start with a low-power, cheap home server. These mini computers were intended for business use and draw very little power, 5-10W idling and around 25-30W under load. I picked this up for ~$200 peak COVID but prices have stabilized to $100-$120. I'm running Ubuntu on bare metal, no hypervisor.
I've thrown a decent number of docker containers at this small thing and have had zero issues. Streaming from Jellyfin or Plex, CPU capacity jumps up to ~70% but no heating or other issues.
Self-Hosted Applications
Homer
Function: Helps manage and organize self-hosted applications
The screenshot you see as the main image of this article is my Homer application. Homer acts as a hub for links, pages and other web assets. It's extremely customizable and is my go-to page when navigating to other areas on my home server but also other applications I host such as a microcontroller temperature server.
Home Assistant
Function: home automation platform
Home Assistant is a hub for all things home automation. Lights, WiFi, motion sensors, security cameras. HA is meant to be a central control hub, without the need to rely on a third party like Google Home or Amazon's Alexa Hubs.
My Dashboard is not nearly as cool as this one. Credit: https://jorisroovers.com/posts/my-smart-home-2021/
Nginx
Function: web server that can act as a reverse proxy, load balancer, and HTTP cache
I don't expose any of my servers outside of my LAN. I use Nginx with PiHole to route traffic over my local network. Instead of having to type in http://192.100.10.100/ each time I want to go to my Homer application, I can instead do homer.mydomain.com
. PiHole has a local DNS feature that allows for this routing, however with Nginx sitting in the middle, I can point PiHole to my Nginx server to grab SSL certificates.
NetData
Function: provides real-time system monitoring and visualization
When I spin up new containers or have multiple streams of media content going, I like to monitor my server to ensure adequate temperatures, storage read/write speeds and CPU load.
This application is probably overkill for most but having all of your systems' real-time metadata at your disposable is very convenient, even if you only end up utilizing half of it.
Plex/Jellyfin
Function: Media server for organizing and streaming media content
Home media servers may be one of the oldest uses of a home server. I have recently switched over to Plex but I speak for both Plex and Jellyfin - A self-hosted media server is incredible.
A home media server allows you to act as your own Netflix, store your own content, stream straight to your TV without relying on any WAN internet connection.
The features of Plex and the like are fantastic too. After uploading content, Plex will scan it, append subtitles, grab metadata on the film and categorize the media content for you - and that's just the free version of Plex.
Portainer
Function: Docker container management UI Tool
UI interface for managing docker containers, images and volumes. I prefer deploying docker on the command line but having a visual interface to manage active containers is super helpful when managing your server from afar.
check health, restart, kill containers
deploy common containers (MySQL, Nginx, RabbitMQ)
NextCloud
Function: file hosting and sharing platform with collaboration features
I backup all of my Pixel phone's pictures to NextCloud using a WebDAV connection via NextCloud's android application and the self-hosted application. It's worked seamlessly for more than a year.
In addition to simple automation like photo back-up, I utilize NextCloud for quick shares between my devices over my LAN. I end up using SMB shares more but for simultaneously editing a document, NextCloud is great for syncing between devices.
Prefect
Function: workflow management software, job automation
I am a software engineer in the data space by profession. I thoroughly enjoy building applications, automations and anything else that involves data, software and automation.
Prefect is written in Python. It's function and purpose is very similar to Airflow, scheduling and monitoring Python jobs with directed acyclic graphs. Decorators allow for the easiest implementation. Below is a simple script taken from Prefect's documentation. Defining a task within a flow is as simple as adding decorators before functions.
import requests
from prefect import flow, task
@task
def call_api(url):
response = requests.get(url)
print(response.status_code)
return response.json()
@flow
def api_flow(url):
fact_json = call_api(url)
return fact_json
print(api_flow("https://catfact.ninja/fact"))
Prefect's open-source server also comes out of the box with a UI component that allows you to schedule, monitor and manually run workflows.
PiHole
Function: network-level ad and tracker blocker
I host PiHole on another device, an old Raspberry Pi, but I'm including it in this list because it's a vital piece in my LAN. The two biggest benefits for me are enhanced domain blocking and local DNS which I touched on earlier.
Here it is in all it's glory -- Datatribute's Home Server ...and messy cabling and dusty Raspberry Pi running PiHole)
Thanks for touring my home server. In future articles I'd like to dive into some of these applications and explain further the full functionality and usages. I'd also like to investigate other self-hosted applications that I've been looking to check out.