Proxmox - VMs and containers for your homelab

Project Licence, Red., Internet Article, 2026.

LLMs were asked while researching this topic.

Setting up a Proxmox Virtual Environment (VE) homelab is like building your own private cloud right inside your house. Instead of using one physical computer for just one purpose, Proxmox allows you to chop up that hardware to run dozens of Virtual Machines (VMs) and Containers (LXCs) simultaneously.

This guide will help to install and set up Proxmox. All you need is an old network-capable (mini)PC and probably some external case with extra HDDs for additional storage. In addition you might want to connect the box to your digital TV-box for more convenience. 

Part 1: The Bare Metal Setup

Proxmox is a Type-1 Hypervisor. This means it doesn't run inside Windows or macOS. It is the operating system, meaning it completely replaces whatever is on the target machine.

1. Preparation

  • The Machine: A spare PC, mini-PC (like an Intel NUC), or an old laptop. It needs a 64-bit CPU, at least 8GB of RAM (16GB+ recommended), and an SSD.

  • A USB Flash Drive: 8GB or larger (it will be entirely wiped).

  • Download the Tools:

    • Go to proxmox.com and download the latest Proxmox VE ISO Installer.

    • Download Rufus (Windows) or BalenaEtcher (Mac/Linux) to flash the ISO onto your USB.

2. Flashing the Installer USB

  1. Plug in your USB and open Rufus or BalenaEtcher.

  2. Select your USB drive under "Device."

  3. Click SELECT and choose the downloaded Proxmox ISO.

  4. Click START. If you are asked to choose between ISO or DD image mode, select DD Image mode (this is critical for Proxmox to flash correctly).

3. The Installation Process

  1. Plug the flashed USB into your target homelab computer, connect keyboard, mouse and monitor and boot it up.

  2. Mash your computer's BIOS trigger key (F2, F12, or Del) to open the boot menu and select your USB Drive.

  3. Choose Install Proxmox VE (Graphical).

  4. Target Hard Disk: Pick the primary SSD where Proxmox will live.

    ⚠️ Warning: This will wipe everything on that chosen drive!

  5. Location & Time Zone: Set your country and timezone.

  6. Password & Email: Create a strong root password (do not lose this) and type in your email address.

  7. Management Network Configuration:

    • Management Interface: Select your network card (use an Ethernet cable connection, not Wi-Fi).

    • Hostname: Give it a local name like pve.homelab.local.

    • IP Address: Proxmox will auto-fill one. Make sure it doesn't clash with something else on your network. It's highly recommended to write this down. ⚠️ Warning: It helps to closely note down the steps, users and passwords as well as the IP of you machine! Normally you will connect directly through a browser and not at the machine and therefore need to find it first. The IP normally looks something like https://192.168.1.100:8006/.

    • Gateway / DNS: Leave these as the auto-detected defaults (usually your home router's IP).

  8. Click Install. Once finished, remove the USB drive and click Reboot.

Part 2: First-Time Login & Post-Install Tweak

Once your computer reboots, the physical screen will display a text URL that looks something like this:

https://192.168.1.100:8006/

  1. Go to a different computer on the same home network, open a web browser, and type in that exact address (including the https and the :8006).

  2. Your browser will show a scary-looking "Your connection is not private" warning. This is normal because Proxmox uses a self-signed security certificate. Click Advanced -> Proceed Anyway.

  3. Login credentials:

    • Username: root

    • Password: The administrator password you created during installation.

Quick Tweak: Remove the "No Subscription" Warning

Because your homelab is free, Proxmox will show a nag screen every time you log in saying you don't have a enterprise subscription. Let's fix your software updates repository so things work cleanly:

  1. Click on your main node on the left side menu (usually named pve).

  2. Go to Updates -> Repositories.

  3. Select the entry that says pve-enterprise and click Disable.

  4. Click Add, select No-Subscription from the dropdown menu, and click Add.

  5. Go back to the Updates tab at the top and click Refresh, then click Upgrade to make sure your host is fully up to date.

Part 3: Running Your First Virtual Machine (VM)

A Virtual Machine emulates an entire physical computer system. It has its own dedicated kernel, making it perfect for operating systems like Windows or complete Linux distributions (like Ubuntu).

Step 1: Upload an ISO

To build a VM, you need an installation disc image (ISO).

  1. On the left tree, expand your node and click on the storage named local.

  2. Click ISO Images, then click Download from URL (or upload an ISO from your desktop).

  3. Paste an ISO URL (for example, the download link for Ubuntu Server) and click Query URL, then click Download.

Step 2: Run the Wizard

  1. Look at the top right corner of the web UI and click Create VM.

  2. General: Give it a name (e.g., ubuntu-test).

  3. OS: Select your local storage and choose the ISO you just downloaded.

  4. System: Leave defaults.

  5. Disks: Set the size you want (e.g., 32 GB).

  6. CPU: Give it 2 or more cores depending on your hardware capacity.

  7. Memory: Allocate the RAM (e.g., 2048 MB for 2GB).

  8. Network: Leave it on vmbr0 (this bridges the VM directly into your home router's network).

  9. Confirm and click Finish.

Step 3: Launch it!

Click on your newly created VM on the left menu (it will have an ID like 100). Click Start at the top, then click Console to look inside the virtual screen and run through the standard OS installation.

Part 4: Running Your First Linux Container (LXC)

Containers share the host operating system's kernel. They are incredibly lightweight, use almost zero idle resources, boot instantly, and are perfect for isolated microservices (like Pi-hole, Plex, or Docker hosts). 

 

Step 1: Download a Template

Instead of massive ISOs, containers use pre-built templates.

  1. Click on your local storage on the left sidebar.

  2. Click CT Templates, then click the Templates button.

  3. Select a lightweight Linux base (like debian-12-standard or ubuntu-24.04-standard) and click Download.

Step 2: Create the Container

  1. Click Create CT at the very top right of your screen (right next to Create VM).

  2. General: Give it a hostname and type in a root password for the container.

  3. Template: Choose the template you downloaded in the step before.

  4. Disks / CPU / Memory: Since containers are tiny, you can easily get away with giving them 1 Core, 512MB or 1GB of RAM, and 8GB of disk space.

  5. Network: For simplicity as a beginner, change the IPv4 setting to DHCP so your home router automatically hands it a working IP address. Leave IPv6 on Static or blank.

  6. Click Finish.

Once the task finishes, select your new Container ID (e.g., 101) on the left, click Start, and open the Console. You instantly have a fully isolated Linux environment running smoothly on a fraction of the system resources a VM would take!

Proxmox VE Community Scripts

The easiest way to install anything are Community-driven scripts for Proxmox VE — You can browse, install, and manage containers and VMs with a single command.

The Proxmox VE Community Scripts Website offers the largest collection for VE and LXC for all purposes in a large collection of automation scripts designed to simplify the setup and management of Proxmox environments: Proxmox VE Community Scripts Website.

⚠️ Warning: Verify the source. Copycat or lookalike websites may exist. Always verify you are on the official site and check all script sources thoroughly before running anything on your systems.

Setting and filling up additional Storage Devices

Adding an external hard drive to Proxmox and sharing it with an LXC (Linux Container) is a fantastic way to expand your storage for media servers, backups, or network shares.

Because LXC containers share the host's kernel, the best and most efficient way to do this is via a Directory Storage Mount Point.

Here is the complete, beginner-friendly guide to getting it done.

Step 1: Connect and Identify Your External Drive

First, plug your external USB hard drive into your Proxmox hardware.

  1. Open your Proxmox Web UI.

  2. Click on your main Proxmox Node (the server name) on the left menu.

  3. Go to Disks.

  4. Look for your external drive in the list (it will usually be something like /dev/sdb or /dev/sdc and will match your drive's size). Note down this device name.

Step 2: Format and Mount the Drive on the Proxmox Host

If your drive already has data on it, skip the formatting part. If it's a fresh drive, we need to format it to ext4 (the standard Linux file system).

  1. Click on the Shell in your Proxmox Web UI to open the command line.

  2. Format the drive (Skip this if you have data! Replace sdX with your drive letter from Step 1):

    Bash
     
    mkfs.ext4 /dev/sdX
    
  3. Create a mount point (a folder where the drive's contents will live on the host):

    Bash
     
    mkdir -p /mnt/external-hdd
    
  4. Find the drive's UUID (a unique ID that doesn't change even if you unplug the USB):

    Bash
     
    blkid /dev/sdX
    

    Copy the long string inside the quotes after UUID="..."".

  5. Make the mount permanent so it survives a reboot:

    Bash
     
    nano /etc/fstab
    

    Scroll to the bottom of the file and add this line (replace YOUR-UUID-HERE with the actual UUID you copied):

    Plaintext
     
    UUID=YOUR-UUID-HERE /mnt/external-hdd ext4 defaults,nofail 0 2
    

    Note: nofail ensures your Proxmox server still boots up normally even if the external drive is unplugged.

  6. Save and exit (Ctrl+O, Enter, then Ctrl+X).

  7. Mount the drive right now:

    Bash
     
    mount -a
    

Step 3: Pass the Storage into Your LXC Container

Now that the host can see the drive at /mnt/external-hdd, we will "bind mount" it into your container.

  1. Make sure your LXC container is turned off (Stopped).

  2. In the Proxmox Shell, open your specific container's configuration file. Replace 100 with your actual LXC ID:

    Bash
     
    nano /etc/pve/lxc/100.conf
    
  3. Add a new line at the bottom of the file to map the host folder to a folder inside the container:

    Plaintext
     
    mp0: /mnt/external-hdd,mp=/mnt/container-storage
    
    • mp0 stands for Mount Point 0. If you add more later, you would use mp1, mp2, etc.

    • /mnt/external-hdd is the folder on your Proxmox host.

    • ,mp=/mnt/container-storage is where you want it to appear inside the container.

  4. Save and exit (Ctrl+O, Enter, then Ctrl+X).

Step 4: Fix Permissions (Crucial Step)

By default, Unprivileged LXC containers (the safe, standard type) won't have permission to write to this new drive. Let's fix that easily.

  1. In the Proxmox Shell, give everyone read/write access to the host mount folder so the container can use it:

    Bash
     
    chmod -R 777 /mnt/external-hdd
    

Step 5: Verify Everything Works

  1. Start your LXC container from the Proxmox Web UI.

  2. Go to the container's Console.

  3. Type the following command to see if your drive is there:

    Bash
     
    df -h
    

You should see /mnt/container-storage listed at the bottom with the full size of your external hard drive! You can now read and write files to this folder, and they will be saved directly onto your external HDD.