My homelab is a two node setup connected via a WireGuard tunnel. A VPS handles public facing traffic while a repurposed workstation at home runs heavier workloads such as media management, gaming server and home automation via zigbee. All services are containerized with docker compose and managed through self hosted gitea repositories. Deployment is automated with gitea actions runners on both nodes.

VPS repos: https://git.sirian.me/vepsi

Home server repos: https://git.sirian.me/z420

Network diagram

Homelab network diagram

CI/CD

Deployments are handled by Gitea Actions. It’s a self hosted CI/CD pipeline very similar to GitHub Actions. Except it’s open source.

Each service repository contains a workflow (.gitea/workflows/deploy.yml) that triggers manually or when code is pushed to main. Each time the workflow pulls the latest changes, pulls updated container images or builds them and finally restarts the stack with docker compose.

Runners on both nodes are labeled by hostname. runs-on: vepsi or runs-on: z420 so each workflow automatically targets the correct machine.

Hardware

Vepsi (VPS)

Public facing gateway. Handles reverse proxying, git hosting, CI/CD and website hosting.

A virtual private server rented from tietokettu.net. Tietokettu is a local hosting provider based in Lempäälä.

  • 1x vCPU
  • 2GB RAM
  • 20GB storage

Z420 (Home server)

Private backend. Runs heavier workloads behind NAT.

E-waste repurposed as a home server. An HP Z420 workstation. Solid performance and very cost effective.

  • Intel Xeon E5-1620 v2 CPU
  • 8GB RAM
  • Nvidia GeForce GTX 1650 GPU
  • 4 TB HDD
  • 160 GB SSD

Planned upgrades:

  • GPU to Nvidia RTX 2070. (ML training and LLM inference, pending on PSU upgrade)
  • RAM to 64 GB. (AI offloading)