Part 1: Setting up a Proxmox Cluster

A cartoon illustration of four happy servers linked together as a Proxmox Cluster.

After acquiring four HP EliteDesk 800 G3 PCs from eBay, the first phase of my home data center project was getting them from bare metal to a fully functioning, clustered virtualisation platform.

Each server came with:

  • Intel Core i5-7500 CPU
  • 8GB DDR4-2400 SDRAM (up to 64GB)
  • 256GB SSD

All four cost me £84 (local collection only). An absolute bargain.

For networking, I grabbed a TP-Link TL-SG1016D 16-port unmanaged gigabit switch. Yes, it's unmanaged, but it was cheap and does the job.

Update the BIOS First

Before installing any operating system, I updated the BIOS on all four machines. It's easy to overlook, but crucial for security and stability.

Running the latest BIOS patches hardware vulnerabilities and ensures the best compatibility for everything that follows.

Installing Proxmox VE

With the hardware sorted, I installed Proxmox Virtual Environment (VE) on each server's 256GB SSD.

Proxmox is a powerful, open-source hypervisor that manages both full virtual machines and lightweight Linux Containers (LXC). This flexibility makes it perfect for running diverse services. You can find the installer and documentation at the Proxmox website.

Post-Installation Scripts

A fresh Proxmox install is aimed at commercial users - it uses enterprise repositories that require a subscription and displays a nag screen every time you log in.

For a home setup, I used the excellent Proxmox VE Helper-Scripts. One script automates switching to the public, non-subscription repositories and disables the nag screen, and enabling cost-free updates.

Always inspect scripts from third-party sources before running them!

➡️Proxmox VE Post Install

On your Proxmox server terminal:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"

Update Processor Microcode

Using another helper script, I updated the Intel processor microcode on each server. Microcode updates fix hardware bugs, improve performance, and enhance security.

➡️Proxmox VE Processor Microcode

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/microcode.sh)"

Setting Up Email Notifications

I configured an SMTP relay on each server using a dedicated Gmail account. This lets each server send email notifications for system events - backup completions, hardware failures, and other alerts.

Generate Gmail App Password

  1. In your Google Account, go to Security -> 2-Step Verification and ensure it's enabled
  2. In the Security section, go to App passwords
  3. For ‘App’, select Mail. For ‘Device’, select Other, name it (e.g., “Proxmox“)
  4. Click Generate and copy the 16-character password

Install Required Packages

apt update
apt install -y libsasl2-modules mailutils

Create Credential File

Create and edit the password file:

nano /etc/postfix/sasl_passwd

Add the following line, replacing the placeholders with your details:

[smtp.gmail.com]:587 [email protected]:your-16-character-app-password

Secure the file and create the Postfix database:

chmod 600 /etc/postfix/sasl_passwd
postmap hash:/etc/postfix/sasl_passwd

Configure Postfix

Edit the main configuration file:

nano /etc/postfix/main.cf

Add these lines to the very end of the file

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Apply and Test

Reload the Postfix:

 systemctl reload postfix

Send a test email, replacing the placeholder with your destination email address

echo "This is a test email from Proxmox" | mail -s "Proxmox Test" [email protected]

Check your inbox to confirm it has arrived.

Installing Tailscale for Remote Access

To manage the data center remotely, I installed Tailscale on each server. Tailscale builds a secure, private network over the internet using WireGuard, letting me access the Proxmox control panel from anywhere as if I were on the local network.

Run the Installation Script

Execute the official Tailscale installation script:

curl -fsSL https://tailscale.com/install.sh | sh

Start Tailscale and connect to your account.

tailscale up

After running the command, a login URL will appear. Copy it, paste it into a browser, and authenticate with your Tailscale account to add the server to your network (tailnet).

Verify Installation

Check that Tailscale is active:

tailscale status

Your Proxmox server is now securely connected to your tailnet.

Creating the Proxmox Cluster

With the individual servers ready, it was time to unite them. I configured them into a Proxmox cluster, which allows all machines to be managed as a single entity from one web interface.

I decided not to enable high-availability storage at this point due to a network bottleneck - each server currently has only a single 1GbE network interface. A redundant, high-speed storage network is a planned future upgrade.

Prerequisites

  • All servers installed and running on the same network
  • Nodes can ping each other by IP address
  • Each node has a unique hostname
  • You're logged into the Proxmox web interface

On the Main Node (Node 1)

Create the Cluster

In the terminal of your chosen main server, run:

pvecm create YourClusterName

Give your cluster a unique name without spaces.

Copy Join Information

In the Proxmox web interface, navigate to DatacenterCluster. Click "Join Information", then click "Copy Information". This copies the connection details to your clipboard.

On Each Joining Node (Node 2, Node 3, etc.)

Join the Cluster

In the web interface of the node you want to add, navigate to DatacenterCluster.

Paste Join Information

  • Click "Join Cluster"
  • Paste the information from the main node into the "Information" text box. The IP address and fingerprint fields will fill automatically
  • Enter the root password for the main server (Node 1)
  • Click "Join Your Cluster Name"

The server's web interface will refresh as it joins. Repeat for any other servers.

Verify the Cluster

On any server, refresh the web interface. You should now see all connected servers listed under the data center view.

Alternatively, run this command in any server terminal:

pvecm nodes

Quick Cheat Sheet 📄

Proxmox Post-Install & Microcode

# Run post-install script (non-subscription repos, disable nag)
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/post-pve-install.sh)"

# Update processor microcode
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/microcode.sh)"

Gmail SMTP Relay Setup

# Install packages
apt update
apt install -y libsasl2-modules mailutils

# Create/edit password file
nano /etc/postfix/sasl_passwd
# Add this line to the file:
[smtp.gmail.com]:587 [email protected]:your-16-character-app-password

# Secure file and create Postfix DB
chmod 600 /etc/postfix/sasl_passwd
postmap hash:/etc/postfix/sasl_passwd

# Edit main Postfix config
nano /etc/postfix/main.cf
# Add the following lines to the end of the file:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

# Reload Postfix
systemctl reload postfix

# Send test email
echo "This is a test email from Proxmox" | mail -s "Proxmox Test" [email protected]

Tailscale Remote Access

# Install Tailscale
curl -fsSL https://tailscale.com/install.sh | sh

# Start Tailscale and connect
tailscale up

# Check status
tailscale status

Proxmox Cluster Creation

# On Main Node (Node 1) - Create the cluster
pvecm create YourClusterName

# On Any Node - Verify cluster status
pvecm nodes

Applications and Packages

Virtualization & Management

Networking (VPN)

System Services (Email)