If you’re running Proxmox VE as your home server hypervisor, you’re already in an excellent position to self-host Immich — the open-source Google Photos alternative that has become one of the most popular self-hosted applications of recent years. Proxmox supports both LXC containers and full KVM virtual machines, and it integrates cleanly with ZFS storage, making it a natural fit for an application that needs to store and manage thousands of photos and videos. This tutorial walks through the full process of deploying Immich inside a Proxmox LXC container, from choosing your setup to accessing the web interface from another machine on your network.
Why Proxmox Is a Good Platform for Immich
Proxmox VE is a Type 1 hypervisor, meaning it runs directly on the hardware rather than on top of a general-purpose operating system. This gives it full control over CPU scheduling, memory allocation, and storage — all of which matter for an application like Immich that handles large media files and runs background machine learning tasks for face recognition and object detection.
Beyond raw performance, Proxmox’s native ZFS support is a significant advantage. If your photo library lives on a ZFS dataset, you can pass that storage directly into an LXC container with no intermediate formatting or mounting steps. Proxmox also makes it straightforward to snapshot the container before upgrades, giving you a reliable rollback point.
LXC Container vs Full VM: Which Should You Use?
For most Proxmox users, an LXC container is the better choice for Immich. LXC containers share the host kernel, which means they have significantly lower overhead than a full virtual machine — you avoid the memory and CPU cost of running an entire guest OS. They also support direct ZFS dataset passthrough, which keeps your photo storage on the host and simply mounts it into the container.
The main trade-off is that running Docker inside an LXC container requires a small amount of extra configuration (covered below), and GPU passthrough is more complex in LXC than in a VM. If you specifically need full hardware virtualisation — for example, if you’re running a Windows guest alongside Immich — a VM is the right choice. In that case, create an Ubuntu 22.04 or 24.04 VM, install Docker, and follow the standard Docker Compose installation method using the docker-compose.yml from the Immich GitHub releases page.
For the majority of home server users, though, LXC is the right call.
Installing Immich Using the Community Helper Script
The easiest way to get Immich running on Proxmox is via the Proxmox VE Helper Scripts project at community-scripts.github.io/ProxmoxVE. This community-maintained collection of scripts automates the creation of LXC containers and the installation of popular self-hosted applications. The Immich script handles container creation, Docker installation, and Immich deployment in a single command.
Open a shell session on your Proxmox host — either through the web UI or via SSH — and run the following:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/immich.sh)"
The script will walk you through a series of prompts: container ID, hostname, resource allocation, storage location, and whether to enable hardware acceleration features such as Intel OpenVINO for machine learning inference. Once complete, it creates the LXC container, installs Docker inside it, and deploys Immich automatically.
Recommended Resource Allocation
At minimum, allocate 6 GB of RAM and 2 CPU cores to the container. In practice, background ML tasks — face detection, CLIP embeddings, object recognition — are memory and CPU hungry, so the recommended allocation is 8 GB RAM and 4 CPU cores. If your server is constrained, you can start with the minimum and increase later via the Proxmox web UI under the container’s Resources tab.
Enabling Docker Inside LXC: nesting and keyctl
Docker requires two LXC features to function correctly inside a container: nesting and keyctl. The helper script usually enables these automatically, but it’s worth verifying manually. The LXC configuration file for your container lives at:
/etc/pve/lxc/[CTID].conf
Replace [CTID] with your container ID (for example, 100). Open the file and confirm it contains the following line:
features: nesting=1,keyctl=1
If the line is missing, add it, save the file, and restart the container from the Proxmox web UI or with:
pct restart [CTID]
Passing Through Storage from the Proxmox Host
If your photo library is stored on the Proxmox host — for example, on a ZFS dataset mounted at /mnt/photos — you can pass that directory directly into the LXC container. This avoids duplicating data and keeps the library accessible at the host level for backups and snapshots.
Edit the container’s config file and add a mount point entry:
mp0: /mnt/photos,mp=/mnt/photos
This maps the host path /mnt/photos to the same path inside the container. After saving the file, restart the container:
pct restart [CTID]
Inside Immich’s configuration, point the upload and library paths to /mnt/photos so that imported media lands on your main storage rather than inside the container’s root filesystem.
Setting the Correct Timezone
Getting the timezone right matters for Immich because it affects photo timestamps, scheduled background tasks, and log readability. Enter the container shell from the Proxmox web UI, or use:
pct enter [CTID]
Then set the timezone:
timedatectl set-timezone Europe/London
Adjust the timezone string to match your location. Confirm it has applied correctly with:
timedatectl
Checking Immich Is Running
Once the installer has finished and the container is up, enter the container shell and verify that all Immich services are running:
docker ps
You should see several containers listed — typically immich_server, immich_microservices, immich_machine_learning, immich_redis, and immich_postgres. If any are missing or show a status of Exiting, check the logs with:
docker logs immich_server
Common issues at this stage are incorrect permissions on the mounted storage directory or a missing .env file. The Immich data directory is typically at /opt/immich inside the container.
Accessing the Web UI from Another Machine
Immich’s web interface is served on port 2283. To access it from another machine on your local network, you need the IP address of the LXC container. From the Proxmox host, run:
pct exec [CTID] -- ip addr show eth0
Note the container’s IP address, then open a browser on any device on the same network and navigate to:
http://[container-IP]:2283
On first load, Immich will prompt you to create an admin account. This is the account you’ll use to manage users, set up external libraries, and configure sharing. Once signed in, you can begin importing your photo library either by uploading directly through the browser, using the Immich mobile app, or configuring an external library path that points to your mounted storage.
Hardware Acceleration (Optional)
If your Proxmox host has an Intel CPU with QuickSync, the Immich installer script will prompt whether to enable Intel OpenVINO for machine learning acceleration. Accepting this option speeds up face recognition and CLIP embedding generation considerably on supported hardware. Full GPU passthrough into an LXC container — for example, passing through a discrete GPU for transcoding — is possible but requires additional configuration of the container’s device mappings and is generally more straightforward to achieve in a full VM if that level of acceleration is a priority.
For most home users, the default CPU-based setup handles a library of tens of thousands of photos without issue, with the initial machine learning indexing completing overnight on first run.
Related Immich Guides
- Immich: The Complete Self-Hosted Google Photos Alternative
- What Is Immich? The Self-Hosted Google Photos Alternative
- How to Install Immich with Docker Compose
- Immich vs Google Photos: Is Self-Hosting Worth It?
- How to Set Up Immich Mobile Backup on iPhone and Android
- How to Put Immich Behind a Reverse Proxy with SSL
- Immich Hardware Requirements: Raspberry Pi, NUC, or NAS?
- Immich Face Recognition and Smart Search: How to Enable It
- How to Back Up Immich: Protecting Your Photo Library
- Immich vs PhotoPrism vs Piwigo: Best Self-Hosted Photo App?






