Illustration for How Immich replaced Google Photos for my family

How Immich replaced Google Photos for my family

Written by

in

,

For years every photo my family took went straight to Google Photos. It worked, but it meant paying for storage and handing over every memory to someone else’s servers. These days everything goes to Immich, running on a small server in my house.

Why I moved

  • Privacy: our photos live on hardware I own, not in an ad company’s data centre.
  • No storage subscription: the only limit is the size of my disks.
  • It’s genuinely as good: automatic phone backup, a timeline, face recognition, map view, shared albums and smart search (“dog on a beach” actually works).

My setup

Nothing exotic. Immich runs in Docker alongside the rest of my self-hosted services:

  • Hardware: a small-form-factor PC with an Intel Core i5-6500T and 16 GB of RAM. Face recognition and smart search run on the CPU. It’s slow on the first big import, but fine afterwards.
  • Library: about 25,800 photos and 1,500 videos, roughly 200 GB, shared between 5 family accounts.
  • Remote access: Nginx Proxy Manager with a Let’s Encrypt certificate, so the phone apps back up from anywhere.
  • Updates: Watchtower keeps most of my containers updated, but I exclude Immich’s database and Redis. Immich moves fast and occasionally has breaking changes, so I read the release notes before updating.
Diagram: family phones connect over the internet to Nginx Proxy Manager, which forwards to the Immich server; Immich uses machine learning, PostgreSQL and Redis, stores photos on disk, and the library is copied to backups.
How the pieces of my Immich setup connect.

Quick guide: setting up Immich

You’ll need a Linux machine with Docker and Docker Compose installed, and plenty of disk space. Always check the official install guide too, as details change between releases.

1. Download the compose file

mkdir ~/immich-app && cd ~/immich-app
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

2. Edit the .env file

The important lines are where your photos and database are stored, and the database password (letters and numbers only):

UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
TZ=Europe/Dublin
IMMICH_VERSION=release
DB_PASSWORD=change-me-to-something-long

Tip Point UPLOAD_LOCATION at your biggest disk. Keep the database on a local SSD, not a network share.

3. Start it

docker compose up -d

Browse to http://<your-server-ip>:2283. The first account you create becomes the admin. Add accounts for the rest of the family from the admin settings.

4. Install the phone app

Install Immich from the App Store or Google Play, enter your server address, log in, and turn on backup for the albums you want. New photos then upload automatically, just like Google Photos.

5. Bring your Google Photos library across

Export everything with Google Takeout (select only Google Photos, and choose large archive sizes). Then use immich-go, a community tool that understands Takeout’s quirks. It restores the dates, locations and albums that Google stores in separate JSON files:

Diagram: Google Photos is exported with Google Takeout as zip archives, processed by immich-go to restore dates, GPS and albums, then uploaded to Immich.
The migration path from Google Photos.
immich-go upload from-google-photos \
  --server=http://<your-server-ip>:2283 \
  --api-key=YOUR_API_KEY \
  /path/to/takeout-*.zip

Create the API key in Immich under Account Settings → API Keys. Once everything has imported, give the machine-learning jobs time to finish (Administration → Jobs) before judging face recognition and search.

6. Access it from outside your home (optional)

I use Nginx Proxy Manager: a proxy host pointing at port 2283, a Let’s Encrypt certificate, and Websockets Support turned on. Large video uploads also need the upload size limit lifted, so add this under the proxy host’s Advanced tab:

client_max_body_size 50000M;

If you’d rather not expose anything to the internet, a VPN such as Tailscale or WireGuard works just as well.

7. Back it up!

Back it up Self-hosting means you are now the one responsible for your photos. Immich automatically dumps its database into UPLOAD_LOCATION/backups, so back up the whole UPLOAD_LOCATION folder to another disk, and ideally keep one copy offsite. A single drive failure shouldn’t cost you a decade of memories.

Was it worth it?

Absolutely. Day to day, the family barely noticed the switch: photos still back up from their phones, and they can still search and share them. The difference is that it’s all ours. If you have a spare PC and some disk space, Immich is one of the best self-hosted projects to start with.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *