My Homelab Setup My Homelab Setup

My Homelab Setup

How I Run My Homelab with Proxmox: My Setup, Services, and Workflow

One of my favorite projects is running a homelab using Proxmox as the foundation. Here’s a walkthrough of how I actually do things day-to-day: from spinning up services, managing networks, to automating media and more. If you want to see how all these pieces fit together in practice, here’s my workflow and some tips I’ve picked up along the way.


Getting Started: Proxmox Installation and Configuration

I started by downloading the Proxmox ISO and writing it to a USB stick. I booted my server from the USB, ran through the graphical installer, chose my main SSD as the install target, and set up a static IP for reliable access. After installation, I logged into the web GUI at https://<my-server-ip>:8006 to manage everything.

First steps after install:

  • Switched to the no-subscription repo for updates.
  • Updated the system and set up SSH keys for easy access.
  • Created a ZFS pool on my data drives for redundancy and snapshots.
  • Pulled down LXC container templates and VM ISOs for quick deployment.

How I Organize and Deploy Services

I use a mix of VMs and containers, depending on the resource needs and isolation required.

  • Containers (LXC): For lightweight services like Pi-hole, the Arr stack, and file sharing tools.
  • VMs: For heavier apps, network appliances (like OpenWrt), and anything needing custom kernels or PCI passthrough.

I keep things organized by grouping related services on their own virtual networks or VLANs, which I configure in Proxmox’s network settings.


Media Automation: Jellyfin, Jellyseerr, and the Arr Stack

  • Jellyfin runs in a container, with a dedicated storage mount for my media library.
  • Jellyseerr and the Arr stack (Sonarr, Radarr, Prowlarr, Bazarr) are each in their own containers. They share a downloads folder via a bind mount, and I use Docker Compose inside the LXC for easier updates.
  • Everything is tied together with hardlinks and scripts to organize media as soon as it’s downloaded.

Game Server Hosting: Pelican Wings & Panel

I have been setting up game servers for me and my friends to play on. I have created two containers for this purpose: Pelican Panel on my i5 6th Gen Mini PC and Pelican Wings on my Xeon E5-2680 v4 server.


Self-Hosted Database Servers

I run PostgreSQL and MongoDB in their own containers. I created a scheduled backup task for them using Proxmox’s built-in backup feature. I access the PostgreSQL database using Adminer and MongoDB using MongoDB Compass.


Kubernetes Clusters for Testing and Experimentation

In addition to my container and VM setup, I run Kubernetes clusters on two mini PCs and a Xeon server. Each of these machines runs Proxmox as the base hypervisor, with the Kubernetes cluster deployed inside a dedicated VM on each host. This gives me a small but flexible cluster for testing and development.

I primarily use this Kubernetes setup to test my deployments before pushing them to production. It lets me validate Helm charts, manifests, and custom resources in a safe environment that closely mirrors my production infrastructure. This has been invaluable for catching issues early and refining my automation workflows.

Beyond testing, running Kubernetes at home opens up a lot of possibilities:

  • Learning and experimenting with Kubernetes features, operators, and networking.
  • Running CI/CD pipelines and ephemeral environments for development.
  • Hosting microservices or distributed workloads that benefit from orchestration.
  • Trying out new open-source tools and cloud-native patterns without risk.

Having a home Kubernetes cluster, even on modest hardware, is a great way to stay sharp and experiment with modern infrastructure concepts in a hands-on way.


File Sharing: SMB and Pingvin

  • SMB Shares: I use Proxmox’s storage management to create ZFS datasets, then export them as SMB shares using a lightweight container running Samba. This lets every device on my network access shared files easily.
  • Web File Sharing: Pingvin runs in its own container, with a bind mount for the files and a web interface for easy access. This is being tunneled through Cloudflare Tunnels to be accessed from the internet.

Web-Based Tools and Automation

  • Self-Hosted GitHub Actions Runner: I deploy this in a container, bind-mounting a workspace directory and connecting it to my Tailscale network for secure access to private repos.
  • Cloudflare Tunnels: I use a container to run cloudflared, exposing select services to the web without opening ports on my router.

Virtual Networking: OpenWrt, Pi-hole, and Tailscale

  • OpenWrt VM: I use this as a virtual router/firewall, creating isolated networks for different service groups. Proxmox’s bridge and VLAN support makes this straightforward.
  • Pi-hole: Runs in a container on its own VLAN, acting as the DNS resolver for my network.
  • Tailscale: Installed on key containers and VMs, giving me secure remote access to everything from anywhere.

Immich

I have been using Immich to back up me and my family’s photos and videos. I have created a container for it and a cron job to back up my photos and videos every 12 hours, which is then backed up to the cloud as an encrypted archive.


Experimentation and Snapshots

Whenever I want to try something new, I clone an existing VM or container, experiment, and either keep it or destroy it. Proxmox’s snapshot feature is a lifesaver here—if I break something, I can roll back in seconds.


Final Thoughts

This setup lets me experiment, learn, and automate almost anything at home. Proxmox makes it easy to keep things organized and resilient, and with containers, VMs, and virtual networking, I can run just about any service I want—all on my own hardware.


← Back to blog