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:
- 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)
- 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)
- 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!