Which Self-Hosting Platform Is Right for You? Bare Metal, Docker, or Proxmox?

Disclosure: This post contains affiliate links. If you purchase something through these links, we may earn a commission at no extra cost to you. We only recommend products we genuinely use and love.

The First Decision Nobody Tells You About

This guide covers the three self-hosting platforms you will hear about constantly: Bare Metal, Docker, and Proxmox. Before you buy hardware, before you follow any install guide, before you spin up a single container — you need to make this decision. Everything else depends on it.

Most people skip this step. They Google “how to install Nextcloud” and follow the first tutorial they find, which was written for a completely different setup than theirs. Three hours later they have a broken install, no idea why, and a growing sense that self-hosting is too complicated.

It is not too complicated. You just started in the wrong place.

This article is the right place to start. It covers what each platform actually is, who it is for, what it costs you in complexity, and which one to choose based on your situation. Every install guide on this site connects back to this decision.

The Three Platforms — What They Actually Are

Bare Metal: One OS, One Machine, No Layers

Bare metal means installing a Linux distribution — Debian, Ubuntu Server, Raspberry Pi OS — directly onto your hardware, and running your applications on top of that OS. No hypervisor. No containers. Just the OS and your apps.

This is the simplest possible setup. It is also the most limited. Every app shares the same OS, the same filesystem, and the same network stack. There are no snapshots, no easy rollbacks, and no isolation between services. If one app breaks something at the system level, everything else on that machine is affected.

When Bare Metal Makes Sense: You are running a single application on a dedicated low-power device. A Raspberry Pi running only Pi-hole. An old laptop running only Home Assistant. One device, one purpose, no complexity needed.

Docker: Isolated Apps on a Shared Host

Docker packages each application — and everything it needs to run — into a container. Containers share the host OS kernel but are isolated from each other. You can run Nextcloud, Vaultwarden, Jellyfin, and Paperless-ngx on the same machine, each in its own container, without them interfering with each other.

This is how the majority of self-hosted applications are distributed. When a developer releases a new version of their app, they publish a Docker image. You pull that image, start a container, and you are running the latest version. Updates are two commands. Rollbacks are one command.

Docker does not provide full isolation. Containers share the host kernel. A kernel-level vulnerability affects all containers on that host. For a home server running trusted images, this is an acceptable trade-off. For a machine exposed to the public internet running untrusted code, it is not.

Warning — Docker is not magic: Docker makes app deployment easier. It does not make networking, storage, or security easier. You still need to understand volume mounts, port mapping, and reverse proxies. Those concepts are the same whether you are running Docker on bare metal or inside Proxmox.

Proxmox: Full Virtualization with ZFS, VMs, and LXC

Proxmox VE is a Type 1 hypervisor built on Debian Linux. It installs directly onto your hardware and lets you run multiple virtual machines (VMs) and lightweight containers (LXCs) from a single web interface. Each VM gets its own kernel. Each LXC gets its own userspace. Services are isolated at the hardware level.

Proxmox is the platform this entire site is built around. Every guide on SelfHostHero assumes you are running Proxmox, because it is the right choice for anyone running more than a handful of services on dedicated hardware.

The advantages over the other two platforms are substantial: native ZFS support for storage integrity and snapshots, built-in backup scheduling, IOMMU/PCIe passthrough for hardware like Zigbee dongles and SATA controllers, and a web UI that gives you full visibility into every VM and container on your node.

Pro Tip: Proxmox runs Docker inside an LXC container. In most homelab setups you do not choose between Proxmox and Docker — you use both. Proxmox manages your hardware and storage. Docker manages your application deployments. They operate at different layers and complement each other perfectly. Some admins prefer running Docker in a full VM for stricter isolation, at the cost of more RAM overhead. Our guide on building Docker and Portainer on a Proxmox LXC covers the LXC approach, which is our recommended setup.

Platform Comparison: The Honest Table

Feature Bare Metal Docker (on Linux) Proxmox
Isolation between services None Process-level Full (VM or LXC)
Snapshots and rollbacks No Limited (volumes only) Yes — full VM/LXC snapshots
Native ZFS support Manual setup required Manual setup required Built-in, GUI-managed
Hardware passthrough (USB, PCIe) Direct access Possible but manual GUI-managed via IOMMU
Backup scheduling Manual scripts Manual scripts Built-in scheduler
Resource overhead Lowest Very low (daemon ~200MB) Medium (hypervisor layer ~1GB)
Minimum RAM (realistic) 512MB Depends on containers — can run Pi-hole in 50MB 2GB absolute minimum, 8GB for a real homelab
Learning curve Low Medium High
App ecosystem Manual installs Docker Hub, millions of images Docker inside LXC + VMs
Right for homelab Single-purpose devices only Good starting point Best long-term choice

Which Platform Matches Your Situation?

Scenario 1: One Device, One App

You have a Raspberry Pi and you want to run Pi-hole. Or an old laptop that will run only Home Assistant. You are not planning to add more services to this machine.

→ Go Bare Metal. The simplicity is the point. No containers, no hypervisor, no overhead. Install the OS, install the app, done.

Warning: The moment you want to add a second service to that device, bare metal starts fighting you. Two apps that both want to own port 80. Two apps with conflicting Python dependencies. This is when people switch to Docker and wish they had started there.

Scenario 2: Multiple Apps, Entry-Level Hardware

You have a mini PC, an old desktop, or a low-end NAS with 4 to 8GB of RAM. You want to run Nextcloud, Vaultwarden, and maybe Jellyfin. You are not ready for a full hypervisor.

→ Start with Docker on a clean Debian install. You get app isolation, easy updates, and access to the entire Docker Hub ecosystem. When you outgrow this setup — and you will — migrating to Proxmox is straightforward because your apps are already containerized.

Scenario 3: Dedicated Homelab Hardware, Multiple Services

You have a NAS, a mini PC, or a purpose-built server with 8GB of RAM or more. You plan to run Home Assistant, Nextcloud, Jellyfin, Paperless-ngx, and a handful of other services. You want snapshots, backups, and proper storage management.

→ Install Proxmox. This is the setup this entire site documents. Every guide on SelfHostHero starts from a running Proxmox node.

If you are evaluating hardware for a Proxmox build, our review of the TerraMaster F4-424 Pro as a Proxmox host covers a purpose-built machine that handles this workload well at 7.7 watts idle.

The Honest Trade-offs Nobody Tells You

Proxmox Has Real Overhead — But Less Than You Might Think

Proxmox officially requires a minimum of 2GB of RAM to install and run. The hypervisor itself uses around 1GB at idle. The real question is not whether Proxmox fits on your hardware — it is whether you have enough RAM left for the services you want to run on top of it.

A typical homelab setup with four or five LXC containers running Docker services will use 6 to 10GB of RAM at idle. On a machine with 16GB, this is comfortable. On a machine with 8GB, it works but leaves little headroom. On a machine with 4GB, you can run Proxmox with one or two light LXC containers, but you will hit the ceiling quickly if you try to run Nextcloud, Immich, and Jellyfin simultaneously.

Important: With less than 8GB of RAM, you will run into memory pressure the moment you try to run more than two or three meaningful services. If your hardware is 4GB or less, use Docker on bare metal until you can upgrade. Also: install Proxmox on an SSD or NVMe drive — never on a spinning HDD. The write patterns will destroy a mechanical disk within months.

Docker on Bare Metal is a Valid Long-Term Choice

Not everyone needs Proxmox. If you are running a single machine with 10 to 15 Docker containers and you have no need for VMs, hardware passthrough, or ZFS snapshots, Docker on a clean Debian install is a perfectly stable and maintainable setup. Thousands of people run exactly this configuration in production.

The reason this site focuses on Proxmox is that it scales. When you want to add a TrueNAS VM for your drive bays, or pass a Zigbee dongle directly to your Home Assistant VM, or take a snapshot before a major upgrade, Proxmox handles all of it from a single web interface.

LXC is Not a VM

Proxmox supports both full virtual machines (VMs) and lightweight containers (LXC). They are not the same thing. A VM has its own kernel — it is completely isolated from the host and from other VMs. An LXC shares the Proxmox host kernel but isolates its userspace.

For running Docker, LXC is the right choice. Lower overhead, direct access to ZFS datasets via bind mounts, and near-native performance. For running Windows, TrueNAS, or any OS that needs its own kernel, use a VM.

The Unprivileged LXC Gotcha: By default, Proxmox creates unprivileged LXC containers for security. These containers remap user IDs — root inside the container is actually UID 100000 on the host. This causes permission errors when bind-mounting host directories into the container. You will hit this the first time you try to edit a config file over SMB, and the fix is not obvious. We cover the exact solution (chown -R 100000:100000 from the Proxmox host) in our Homepage Dashboard guide.
Pro Tip: The standard SelfHostHero architecture is one unprivileged LXC container running Docker and Portainer, with ZFS datasets bind-mounted directly into the container for storage. This gives you Docker’s app ecosystem with Proxmox’s storage integrity and snapshot capabilities. Our ZFS NAS guide covers the storage layer, and the Docker + Portainer guide covers the application layer.

Common Mistakes by Platform

Platform Most Common Mistake How to Avoid It
Bare Metal Starting with bare metal and then trying to migrate to Docker without breaking everything Start with Docker from day one if you plan to run more than one app
Docker Using localhost in container URLs instead of the host’s LAN IP Always use the host machine’s actual IP address when configuring inter-container communication
Proxmox Installing Proxmox on a spinning HDD, or running a full homelab on less than 8GB RAM SSD or NVMe only for the Proxmox system disk. 8GB RAM for any real multi-service setup, 16GB recommended
Proxmox + Docker Running Docker directly on the Proxmox host instead of inside an LXC or VM Always run Docker inside a dedicated LXC container (recommended) or a VM (stricter isolation), never on the Proxmox host itself
All platforms Using DHCP for a server that other services need to reach by IP address Set a static IP or a DHCP reservation in your router for every server on your network

The SelfHostHero Architecture: What This Site Builds

Every guide on this site assumes the following setup:

  • A dedicated machine running Proxmox VE as the hypervisor
  • One or more ZFS storage pools managed by Proxmox — NVMe for databases and app data, HDD or NAS for media and bulk storage
  • An unprivileged Ubuntu LXC container running Docker and Portainer, with ZFS datasets bind-mounted for storage
  • A Home Assistant OS VM for smart home automation, isolated from the Docker stack
  • Individual services deployed as Docker Compose stacks via Portainer

This architecture gives you the app ecosystem of Docker, the storage integrity of ZFS, the isolation of a hypervisor, and the management convenience of a web UI — all on a single machine that idles at under 15 watts.

The guides that build this stack, in order:

  1. Build Your Privacy Machine Room: Docker + Portainer on Proxmox LXC — the foundation layer
  2. Ultra-Efficient DIY NAS on Proxmox: Native ZFS + Ubuntu LXC FileServer — the storage layer
  3. Install Home Assistant OS on Proxmox VM — the smart home layer
  4. Nextcloud on Docker + Proxmox — replace Google Drive
  5. Immich on Proxmox with ZFS and Docker — replace Google Photos
  6. Jellyfin on Proxmox with Intel QuickSync — replace Netflix
  7. Paperless-ngx on Portainer — replace cloud document scanning

Frequently Asked Questions

Can I run Docker directly on the Proxmox host?

Technically yes, practically no. Proxmox is built on Debian, so the Docker daemon will install and run. But you lose the main reason you installed Proxmox in the first place: isolation. A misbehaving container can now affect your hypervisor, your other VMs, and your storage layer. Always run Docker inside a dedicated LXC container or a VM — never on the Proxmox host itself.

Do I need ZFS for Proxmox?

No, but you probably want it. Proxmox supports ext4, XFS, LVM, and BTRFS alongside ZFS. ZFS adds checksums, snapshots, compression, and easy pool management. For a homelab where data integrity matters — family photos, documents, paperwork — ZFS is the right choice. If you are running a single SSD and just need Proxmox to boot, ext4 works fine.

What is the minimum hardware for Proxmox in 2026?

Officially: a 64-bit CPU with virtualization extensions (VT-x or AMD-V), 2GB of RAM, and an SSD. Realistically, for anything beyond testing, you want 8GB of RAM, 250GB of SSD storage for the system disk, and separate drives for your data pools. Do not run Proxmox on a Raspberry Pi — it requires an x86_64 CPU.

Should I choose Docker in a VM or Docker in an LXC?

LXC is lighter, faster, and has direct access to host ZFS datasets via bind mounts — ideal for most homelab workloads. A VM gives you full kernel isolation and is the right choice if you are running untrusted code or want maximum security. For a home setup with trusted containers, LXC wins on every practical metric.

Can I migrate from Docker on bare metal to Proxmox later?

Yes, and this is why Docker is a good starting point. Your Docker Compose files and volume data are portable. You install Proxmox on new (or wiped) hardware, create an LXC, install Docker inside it, copy over your compose files and volumes, and you are back up. Allow a weekend for the migration.

Conclusion: Make the Decision Once, Build on It Forever

The platform decision is not reversible without effort. Migrating from bare metal to Docker is manageable. Migrating from Docker to Proxmox takes a weekend. Make the right choice now based on your actual hardware and your actual goals, and you will not have to redo this work later.

The short version:

  • Single device, single app → Bare Metal
  • Multiple apps, limited hardware → Docker on Debian
  • Dedicated homelab hardware, serious about self-hosting → Proxmox

If you already have Proxmox running, or you are ready to install it, the next step is building the Docker and Portainer layer that every application guide on this site depends on.

Start Here: Build Your Privacy Machine Room: Docker + Portainer on Proxmox LXC — this is the foundation that every other guide on SelfHostHero builds on top of.