Self-Host Your Photos with Immich: A Private Google Photos Alternative

Replace Google Photos with Immich on your Proxmox homelab. A beginner guide to installing Immich with Docker Compose, automatic phone backup, AI face and object search — all running on hardware you own.

On this page
  1. Before you start
  2. Install Immich
  3. The part that hooks you: phone auto-backup
  4. Keep your memories safe

Of all the reasons to build a homelab, this might be the most emotionally compelling: your photos are the one irreplaceable thing you own, and right now you’re renting the shelf they sit on. Google Photos, iCloud, whichever — the price creeps up, the free tier shrinks, and one day you’re paying monthly rent on your own memories.

Immich fixes that. It’s a self-hosted photo and video backup that looks and feels like Google Photos — timeline, albums, sharing, face recognition, “show me photos from the beach” search — except it all runs on your homelab, and the photos never leave your house.

Same experience — one of them is yoursGoogle PhotosAuto-backup, search, albums$ / month, foreverScanned for ads & trainingStorage caps & upsellsLock-in by designImmich (self-hosted)Auto-backup, search, albumsfree · your hardwarePrivate — never leaves homeOnly limit is your diskOpen-source, no lock-inbuildahomelab.dev

Before you start

Immich runs with Docker Compose, so you need a Docker host. On Proxmox the two clean options are a dedicated Docker LXC or a small VM — see Docker on Proxmox: LXC vs VM to choose. If you’ve never written a compose file, run through Your First Docker Compose Stack first; this will feel familiar afterward.

Your library belongs on durable storage, not inside the container

The single most important decision here is where the photos physically live. Point Immich’s upload location at a shared storage volume or a dedicated disk — never the container’s own root filesystem. Then, no matter what happens to the Immich container, your originals are safe and independently backup-able.


Install Immich

Immich ships an official compose file and an example environment file. You download both, change two or three values, and start it.

1Grab the official compose and env files

On your Docker host, make a folder and pull Immich’s own release files. Using the official files (rather than hand-writing your own) means you always get the correct, matching set of services.

Download Immich's official files

mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
2Edit the two values that matter

Open .env and set where photos are stored and a database password. The rest of the defaults are fine to start.

.env — the lines to change

# Where your photos and videos will be stored.
# Point this at your shared storage or a dedicated disk:
UPLOAD_LOCATION=/tank/photos

# Set a strong database password (any long random string):
DB_PASSWORD=change-me-to-something-long-and-random

# Keep the version pinned to the release you downloaded:
IMMICH_VERSION=release
3Bring it up

Start the whole stack. The first launch pulls several images (server, machine-learning, PostgreSQL with the VectorChord vector extension, and Redis) so give it a few minutes.

Launch Immich

docker compose up -d
What just started

Immich isn’t a single container — it’s a small stack: the main server, a machine-learning service (faces and smart search), a Redis cache, and a PostgreSQL database using the VectorChord extension for fast similarity search. Recent Immich versions migrated to VectorChord from the older pgvecto.rs extension, which is handled automatically by the official compose file. You don’t have to manage any of this — compose does.

4Open the web UI and create the admin account

Browse to http://DOCKER-HOST-IP:2283. The first account you create is the administrator. Set it up, and you’re looking at an empty (for now) photo timeline.

http://immich.local:2283immichPhotosExploreAlbumsPeoplePlacesPhotosJuly 2026🔍 “beach at sunset”

The part that hooks you: phone auto-backup

Install the Immich app from the App Store or Google Play. Open it, enter your server URL (http://YOUR-SERVER-IP:2283 on your LAN, or a Tailscale address when you’re out), and log in. Turn on backup, pick which albums to include, and that’s it — from now on every photo you take uploads to your server in the background.

Reach it from anywhere without opening ports

Don’t port-forward Immich to the internet. Instead, install Tailscale on your phone and your homelab. Your phone then reaches Immich over an encrypted private tunnel, so background backup works on cellular exactly as it does at home — with none of the exposure of a public port.

Once your library is in, Immich’s AI quietly indexes it: it groups faces so you can name people, recognises objects and scenes so text search actually works, and plots geotagged shots on a map. It runs entirely on your hardware — no cloud, no scanning, no ads.


Keep your memories safe

Immich holds irreplaceable data, so treat it like it. Because your originals live on a separate volume, they’re easy to protect:

  • Snapshot and back up the Docker host with Proxmox Backup Server.
  • Keep an independent copy of the UPLOAD_LOCATION folder — the 3-2-1 rule applies to photos more than anything.
  • Read release notes before a major version jump, and update with a simple docker compose pull && docker compose up -d.

You’ve just replaced a monthly bill with something you own outright, and your photos are finally home. Add it to your Homepage dashboard and admire the growing stack — then head back to the roadmap for the next build.


Related posts:

Comments

Comments are powered by GitHub Discussions — sign in with a GitHub account to join the conversation.