Server Foundation: Picking Between Bare-Metal Ubuntu, Proxmox & Docker, Proxmox & LXC
The path: 1. Foundation → 2. Tailscale → 3. Docker → 4. Immich
So you want your photos off Google's servers. Good. But before you install anything, you have one decision to make: what the server actually is. There are three sane ways to build one, and they all end at the same place — this guide is the fork in the road.
Pick a path, follow it, then move on to Tailscale.
What you're choosing between
| Path | What it is | Overhead | Best for |
|---|---|---|---|
| A: Bare metal Ubuntu | One OS owns the whole machine | None | One box, one job |
| B: Proxmox + Debian VM | A hypervisor runs a full Linux VM | Small | An app server that grows forever — the sane default |
| C: Proxmox + LXC | Lightweight containers sharing the host kernel | Tiny | Single quiet services, not Docker stacks |
For a first Immich box, take Path B. It's what my lab runs. Path A is simpler but rigid — every new app means a reinstall or a repartition. Path C is elegant but has sharp edges for beginners.
Before you start: my Buying Server Hardware Tips (any 2015+ mini PC with a 500GB+ drive works) and Router Setup Tips (your server wants a wire and a static IP). Get comfortable in the terminal and with nano first — everything below is typing.
Path A: Bare metal Ubuntu
One machine, one operating system, no layers. This is how dedicated Bitcoin and Monero nodes are built — and I have a full walkthrough for it: Ubuntu 24.04 LTS Server Setup. It covers the download, the verification ritual (never skip it), writing the USB, the static IP, and first boot.
Follow it end to end, then jump straight to Tailscale.
Path B: Proxmox + a Debian VM
Proxmox VE is a hypervisor: a minimal OS whose only job is running virtual machines and containers. Install it once, and after that you spawn, snapshot, and delete guests without ever touching a USB stick again.
Install Proxmox:
- Download the Proxmox VE ISO from proxmox.com and verify it.
- Write it to USB and boot the machine from it.
- Installer choices that matter:
- Target disk: your SSD/NVMe.
- Management network: give it a static IP on your LAN. This IP is how you reach the web interface forever. (Why static.)
- Password: strong. Real email for alerts.
- Reboot, then from your main computer browse to
https://PROXMOX-IP:8006. Accept the self-signed certificate warning.
The no-subscription repo fix. Proxmox nags about a paid repository on every update. If you're not buying support (you're not), switch to the free repo:
# on the Proxmox host, as root
nano /etc/apt/sources.list.d/pve-enterprise.list
# comment out the enterprise line, then add the no-subscription repo
# matching YOUR Debian codename (check the Proxmox docs, never a blog):
# deb http://download.proxmox.com/debian/pve CODENAME pve-no-subscription
apt update && apt full-upgrade -y
Create the Debian VM. Download the current Debian netinst ISO, upload it in the Proxmox UI (local → ISO Images → Upload), then Create VM:
| Setting | Value | Why |
|---|---|---|
| ISO | Debian netinst | Minimal start, no desktop |
| CPU | 2 cores (4 is nicer) | Immich's machine-learning indexing eats CPU |
| Memory | 4 GB (8 is comfortable) | App + database + you |
| Disk | 120 GB on the fast disk | OS + apps. Photos go on a second disk |
| Network | VirtIO, default bridge | Fast virtual NIC |
Install Debian with only "SSH server" and standard utilities selected — no desktop environment. This VM is your new server; everything from here on happens over SSH, and tmux will save you from sad disconnects mid-install.
Where do photos actually go? If you have a second, bigger disk: in Proxmox, attach it to the VM as a second virtual disk, then inside Debian format and mount it (for example at /mnt/photos). Your library and your OS should not share a disk. Trust me on this one.
Path C: Proxmox + LXC
LXC containers share the host's kernel — they boot in seconds and sip RAM. Proxmox ships Debian templates: Create CT, pick one, 2 GB RAM, 8 GB disk, done in about a minute.
What LXC is genuinely great for: single, quiet services. My family's password vault is an LXC running one binary, no Docker inside it, and it has survived everything I've done to that machine.
What LXC is bad for: your first Docker app server. Docker inside LXC needs nesting enabled, and half the tutorials online are wrong about it. Fine advanced project. Bad first step.
You're done with this guide when
You have a machine you can SSH into — bare Ubuntu, a Debian VM, or an LXC — with a static IP and an empty disk waiting. Now go build the only network layer you'll ever need: Tailscale.
← Previous: Buying Server Hardware Tips | Next: Tailscale, the Front Door →