Upgrading my LAN VPS testing server

Posted on Jan 6, 2026

Way back in June I wrote about building a LAN-only VPS for testing. Today I finished migrating my previous build to a new (to me) mini PC so I can run more virtual machines, containers, and other apps in a testing environment before moving to my homelab.

A recap on what I’m talking about.

As with every homelab, it eventually becomes “homeprod”. You start running services you rely on and then you also get friends and family to start using them. Now you can’t play around and accidentally break something that you and (potentially) many other people count on. The right thing to do is to find (or build) a separate area as a playground.

What I want/need is a playground area that works similar to a VPS. To me, what makes a VPS nice is you can go to a webpage and in a few clicks start up a new virtual machine. In less than 5 minutes you have a shell and an IP address.

So, I set out to build something similar so I don’t have to pay one of the hyperscalers and give me a nice playground.

KISS

All this being said, I also like to keep things simple. I have no need to use Kubernetes or other orchestration utilities. I’m a landscape contractor who likes to play with servers as a hobby. I do not need to learn enterprise tooling. If I ever need to your business has made a terrible, terrible mistake with trusting me to set it up and manage it.

Following homelab folks, you get the impression it is a hobby filled with enterprise hardware using gobs of energy, deployed with Ansible into Kubernetes clusters, across multiple Proxmox instances. Not everyone, though. Some of us like to have fun.

So, what about Proxmox?

I know there are homelab folks thinking what I want is Proxmox. After all, it does have a web GUI for setting up containers and virtual machines, plus other utilities for backups, etc.

So, why don’t I just use Proxmox?

Because I don’t want to. Nana nana boo boo.

Hardware

Previously, I was using an iKoolCore R1 mini PC. It has worked fine for my needs.

Then, after hanging out with legendary codemonkeymike during a Nixbook install-fest, I left with a mini PC parting gift. He gave me a HP EliteDesk 705 G3 Mini. When I got home I looked through my parts bins and I was able to build it out to these specs:

  • CPU: AMD PRO A10-8770E
  • RAM: 16 GB DDR4-2500T
  • Storage: 1 TB PCIe 3.0 NVMe; 1 TB 2.5" HGST 7200 RPM disk

Although the CPU isn’t exactly an upgrade, the EliteDesk has double the RAM and a huge jump in storage. Because the iKoolCore has a 2242 m.2 slot I don’t have any larger SSDs to put in there. The EliteDesk has a full size 2280, plus a slot for a 2.5" drive. The higher RAM and expandable storage is why I decided to switch.

My setup

This is not going to be a step-by-step guide. Rather, it is just a list of what I am running and why I chose it. I am tired of reading folks detailed setup guides. I want to know how and why you use it, not all the commands.

OS choice

I am a pure, no frills, stock Debian slut. That is my OS choice for everything.

Virtual machines

For my LAN VPS I want full virtual machines with their own, dedicated IP address. With the hardware increase, I can comfortably run 5-6 VMs, while still running containers on the host.

For virtual machines I’m using QEMU/KVM built into Linux. Then, I created a VM that I can clone to other VMs without having to set everything up again. From the command line, virt-manager, or in Cockpit (more on that later) I can clone this base VM and then hop in to start a project.

This base VM has all my favorite CLI tools, plus Docker, and is ready to rock.

I then setup Debian with a bridge network so each VM can get an IP address assigned from my router. This is a key feature. I want to be able to quickly setup a functioning VM that has its own IP address. With this setup I clone and start, and it is ready to go.

If I end up building a VM I want to move to “homeprod”, it is as easy as using rsync to send the qcow2 and xml file to the homelab. Then I can make some small tweaks to xml and deploy, even with the same IP address as it was on the testing rig.

Containers

I am all-in on Docker. I install this on the host for quick container testing and in the base VM for deeper testing.

Since I have a web frontend for everything, I am also using Portainer to work with Docker from any browser.

I know about Podman and LXC. Not interested. I like Docker and I’m starting to feel confident using it.

Distrobox

Aside from using containers found on the interwebs, I also like to use them as occasional server tests. I can easily start an Alpine or Debian container, exec in and build something. To make this easier, I also installed and configured distrobox.

I know Distrobox is commonly used on immutable desktops. But, I like having it on this testing server so I can start a container and easily hop into it. I can even create it with a custom home directory.

I have Docker and Distrobox setup the same way on the base VM, too.

Webtop

I have been recently diving into Webtop from the Linuxserver.io folks. Using Webtop I can create an emphemeral Linux desktop that is accessible in any browser, which is hella neat (I’m from NorCal if you can’t tell already).

I love this concept and is a no-brainer for the testing rig. Using Webtop I can create a Debian XFCE desktop and access it on my phone, chromebook, or even that shitstain iPad. They are emphemeral, so it is only for testing or demonstrations. There is a way to perma-install some apps. But, that is not what I would use it for. Sometimes I want a temporary full Linux desktop, but without going through all the steps of a VM.

Working with the testing server

I want to be able to use this testing rig from any of the other devices I use. Some of these devices aren’t Linux machines.

My phone, chromebook, and desktop I can ssh into the host and get busy. Obviously my desktop runs Debian. On the chromebook I use the Linux container and on my phone I use Termux.

I like to use virt-manager to work with VMs instead of using virsh on the command line. This way I can make adjustments to the VM xml, clone to a new, take snapshots, and have access to the console for each. Easy to install on the desktop and possible on the chromebook with the Linux Container.

Cockpit

Using the terminal is nice and all, but the most important feature of my LAN VPS is the ability to open a web browser and make a new VM. This is why I am using Cockpit.

Not every device I use may have a terminal and have my ssh keys. Not every device can have virt-manager installed. Sometimes I am doing web-heavy projects and it is nice to simply change tabs instead of having multiple apps open.

I’ll say it. I like webapps. Deal with it.

Cockpit, plus a couple addons, is a web GUI for managing a server. From Cockpit I can access the host machines console, plus interact with VMs (in addition to other tools), including cloning and starting a new VM. Then, from the same tab, I can access the console for that VM.

Tada! LAN VPS.

UpSnap

I don’t like to leave this testing server on 24/7. To save energy, I want to be able to turn it on when I need it. Initially I thought I would just use wakeonlan.

However, not all devices can send the magic packets. The Linux Container on ChromeOS for example. Another is the iPad. I was playing around with a 9th gen iPad over the holidays and you can’t count on the various terminal apps to send magic packets from that POS.

This is why I setup UpSnap, which is a webapp for managing wakeonlan devices. This runs in a Docker container on my homelab so I can wake various devices across the network, more than just the testing rig.

When I’m on my chromebook, phone, or testing one of those POS iPads, I like having the ability to access a more powerful machine when needed. So, I have my desktop setup with xrdp so I can use UpSnap to wake it and then view with a RDP app. I also us UpSnap to wake my HTPC at 10AM everyday rather than letting sit idle all night.

Now when I want to do some testing I go to my UpSnap instance, start the testing rig, and then open up Cockpit in another tab.

Final words

So far, so good. It is definitely an upgrade since I have so much more storage.

With the additional storage I want a full desktop VM that is a clone of my desktop. This way I can do more desktop app testing and have a full desktop on any machine without starting my 200-watt at idle PC. Then I can make any machine into a thin client, such as my Microsoft Surface RT tablet running PostmarketOS.

- - - - -

Did you like this post? Give it an upvote by clicking on the arrows below! Sending me an upvote is like you and I giving each other a high five.

🙏 😎

Thank you for reading! If you would like to comment on this post you can start a conversation on the Fediverse. Message me on Mastodon at @cinimodev@masto.ctms.me. Or, you may email me at blog.discourse904@8alias.com. This is an intentionally masked email address that will be forwarded to the correct inbox.

If you enjoy the random stuff I write here, post to Mastodon, or watch on YouTube, and are feeling generous, I am open to tips of Ko-fi.