Proxmox at home
Proxmox is really popular with both people having some kind of home server, but also with companies renting bare metal servers. It's a viable alternative to XCP-ng and VMware, for instance. I'm going to use mine for some minor services, but mainly as a testing rig to learn more about both Proxmox itself as well as projects I'm curious about.
As a freelancer it's important to have some kind of environment to test things on, as it's not so common that the companies I work for can provide that. I
splurged and got myself a new ZBOX-CI337NANO N100. I usually prefer trying to stick to used hardware, but having a reasonably strong little server
that consumes little energy and has passive cooling felt important. I put in 32 GB of RAM and 512 GB of storage.
Installation
Installing Proxmox is very simple, they have ready ISOs for it and a nice manual. I'm a happy Debian user so I decided to go via Debian. A reason for doing so is also that it's rare to have a bare metal provider offering Proxmox. I started with installing Debian testing/unstable as that's what I tend to use at home; that's a mistake. Save some time and go for stable (Trixie now).
Debian
If you're on Linux already it's really easy. Just download the "netinst CD image", insert a USB stick, copy the ISO to the actual device (i.e. /dev/sdc),
insert it into your server and follow the instructions.
Disk
One thing to keep in mind is that you most likely want a fairly different file system. I would recommend a smallish root partition and leaving the rest blank so you can use that for Proxmox. Don't go for the whole drive, then you won't be able to use LVM, etc. for your VMs.
Proxmox
They have great instructions in their wiki.
NOTE: Really weird things can happen if you don't edit /etc/hosts before installing (like they write in their instructions):
May 23 23:45:27 lab pmxcfs[22611]: [main] crit: Unable to resolve node name 'lab' to a non-loopback IP address - missing entry in '/etc/hosts' or DNS?
May 23 23:45:27 lab pmxcfs[22611]: [main] crit: Unable to resolve node name 'lab' to a non-loopback IP address - missing entry in '/etc/hosts' or DNS?
May 23 23:45:27 lab systemd[1]: pve-cluster.service: Control process exited, code=exited, status=255/EXCEPTION
May 23 23:45:27 lab systemd[1]: pve-cluster.service: Failed with result 'exit-code'.
May 23 23:45:27 lab systemd[1]: Failed to start pve-cluster.service - The Proxmox VE cluster filesystem.
May 23 23:45:28 lab systemd[1]: pve-cluster.service: Scheduled restart job, restart counter is at 1.
May 23 23:45:28 lab systemd[1]: Starting pve-cluster.service - The Proxmox VE cluster filesystem...No network for your VMs
When you install via Debian, rather than their ISO, you don't get a network bridge added. That means your VMs will not have network access.
What I did was edit /etc/network/interfaces. In my case I have a static IP on it for now and it's like this:
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.1.208/24
gateway 192.168.1.1
bridge-ports enp1s0
bridge-stp off
bridge-fd 0So that means I have 192.168.1.208 for my server and my VMs will be able to use my home DHCP server as if they were any other device at home. I'm not planning to have a lot of servers running there so using the same network as my phone is using is no problem, and a wee bit less headache for my home network.
Done?
Yup, you can now go to the web interface (in my case https://192.168.1.208:8006) and log in as the root user with the normal root password. In a real environment you'll not expose that port to the internet, nor use root. But this is at home and I feel bold enough to keep things like this for now.
What now?
We all know disaster recovery is really important. I'd argue it's not in my home, but this is a lab server so I'll give IaC a go. I'm not really into any system; in my opinion they all suck in different ways, but I'm planning to give Terraform (Tofu) a shot for handling Proxmox and VM creation. I'll also try Ansible for configuring the VMs once they've booted.
But that's a post for another day!