I recently started a homelab build for 3 main reasons:

  • cloud vendor resources were getting too expensive for the services I wanted to host
  • practical learning, having the resources at my disposal to learn (almost) anything
  • recycling old hardware and reducing e-waste.

In this series I will walk through my journey into my homelab build - from an initial hacked-together testing phase to a modestly functional high availability multi-node cluster setup, covering everything from essential networking fundamentals I learnt through the process to concepts I am still learning - like Kubernetes and Ansible. This part will go over my first test run with Proxmox installation on an old laptop.

Hardware

Let’s start from the beginning, at the lowest level - hardware. I had a standard ISP-issued home router and an old Acer Aspire laptop. The laptop essentially had no internal storage - it was missing its NVMe SSD, and had no other PCIe slots for HDD/SDDs. The only option was to connect a spare SSD I had lying around via a SATA to USB adapter. It had a 10th gen 8 core Intel i5 CPU, 8GB RAM, and an ethernet network interface. Plenty to get started with.

Proxmox installation

Note: official installation docs here

I was considering simply installing Docker over a bare metal installation of Debian, but after researching what the most suitable OS to run for a homelab was, I landed on Proxmox - a great open source type 1 hypervisor for running VMs and containers directly on the host.

A brief guide to installation via USB stick:

  1. Download the iso from the Proxmox website
  2. Flash it to a USB drive. Several ways to do this depending on OS, on Windows you can use Rufus, on Linux the simplest way is:
     # as root or sudo
     cat path/to/iso > /dev/disk/by-id/usb-my-flash-drive
    
  3. Insert the USB into your machine before powering on
  4. Power on and enter the BIOS (usually F2, F12, or Del)
  5. Select the USB as boot option and restart.

The next steps are quite straightforward - you’ll want to select the disk to install to, set the timezone and keyboard layout, configure root user password, enter an email for server notifications such as backup jobs, and finally configure networking.

For a test setup,

  • Management interface should be over the ethernet interface.
  • FQDN does not matter as long as you can connect over LAN. If you do have an FQDN and plan on setting up multiple nodes, a naming scheme like pvenode1.example.com will be good.
  • IP address of the server should be something in the subnet of your home network that isn’t already taken - usually 192.168.0.x or 192.168.1.x. The IP address field may already be set if the machine was connected to a DHCP-enabled router during boot - if so, leave it as is.
  • Netmask can vary depending on your subnet, but in most cases it is 255.255.255.0 or a /24 CIDR range.
  • Gateway is your router (essentially where all traffic will go through) - in my case 192.168.0.1, but can vary depending on what your router’s private IP address is.
  • For DNS server I went with Cloudflare (1.1.1.1). You can also setup your own local DNS server, but that’s a topic for another post.

Next the installer will install and we remove the USB and reboot the system to Proxmox. On another PC in the LAN, login to the web GUI via the IP address and port of the server displayed on the Proxmox machine.

Post install

On the post install we will go over:

  • configuring updates
  • enabling SSL via LetsEncrypt.

I use the post install script from Proxmox VE Helper-Scripts to automate things a bit here - but it basically sets the update repository to non-prod, which is what we need without a subscription.

Enabling TLS for the FQDN

There are many ways to do this, but the easiest way I have come across is using the Cloudflare challenge plugin. Instead of rewriting the many tutorials on how to do this, I’ll link a good tutorial here.

Next up

In the next part, before we dive into setting up services, I’ll go over my (current) home network configuration for security, including additional hardware.