My first home server

My first home server

A month ago, my interns were sharing about their applications running on their home servers which got me really interested and decided to get one from an online marketplace. At first, I thought having in the cloud would be more convenient, but who knew that self-hosting is much more customisable and less costly for personal use!

It's a Lenovo ThinkCentre M710q with Intel i7-8700 CPU, 64GB RAM, 512GB NVMe SSD and comes with a PCIe x16 slot. Suitable for running virtual machines. 😎

I then installed Ubuntu Server and started thinking about what applications should I host. Here are some core applications I have decided to run on, with some justifications below:

  • OpenVPN
  • KVM (virtual machine)
  • Rclone (backup my centralised file storage)
  • Docker Compose
    • File Browser (file manager via HTTP)
    • Samba (file sharing via SMB)
    • Ghost (blogging)
    • ddclient (update DNS A record as my network uses dynamic IP)

I've also published my installation scripts, app configuration files and Docker Compose file on my Github if anyone needs a reference!


OpenVPN

Alternative: Wireguard
Having a VPN is my top priority in the list, as I would want to access other apps remotely within a private network. This reduces the attack surface that attackers may target since they have to start from public-facing apps, and if there is a reported vulnerability on an app, I am still somewhat safe when hosted over the private network. 😌

A tutorial on setting up OpenVPN can be found on the official Ubuntu website.

KVM

Alternative: Proxmox, VMware ESXi hosted using KVM
In my case, I always travel with my laptop and prefer to work with my desktop when at home. KVM (Kernel-based virtual machine) supports VNC protocol in order to connect to my virtual machine instances, but I prefer using RDP protocol (Linux: xfreerdp, Windows: built-in) so I instantly switched it over after setting up. 😂

I would say the tutorial from phoenixNAP would be the best to follow!

Rclone

My home server is also used as a file server, where I have a centralised storage to store all my photos and app configuration files. Remember the 3-2-1 backup rule? For the 1, I've chosen Google Drive as my offsite backup, costing S$27.99 a year for 100 GB. To transfer my local files to the cloud periodically, I setup a cron script to run rclone at every week (for app files) or month (for photos).

As for the other type of storage (3-2-1), I'm still thinking of investing a NAS but for now I'm using a external hard drive.🥲

Rclone also supports many other cloud storage hosting providers!

Docker Compose

Had a hard time understanding why I should use a Docker, but after hearing from my friends, I finally understand why:

  1. Easy to install/teardown (THIS. Especially for apps like WordPress that takes 10minutes to setup and you have to reinstall from scratch because of screwing up some app files)
  2. Applications that may have different dependency versions (can't really give an example, but imagine one app requiring Java 19 and another app requiring Java 21)
  3. Storage Isolation (Restrict your application to only a directory of your filesystem)

I also recommend using Docker Compose instead of Docker. Here's a comparison when running multiple containers (each application runs under a single container, hence the term container) between Docker and Compose, where the latter is much more organised.

Hope this gives you a better idea if you are planning to get a home server!