Immich: Your Own Google Photos

← Self-Hosting · Files & Photos · Replaces: Google Photos, iCloud Photos, Amazon Photos

What You'll Build

Immich is the closest thing to Google Photos you can run yourself: the phone app backs up every photo and video automatically, and the web app has a timeline, map, face recognition, memories ("on this day"), shared albums, and AI search that understands "sunset at the beach".

Port: 2283 · RAM: 6 GB+ recommended (4 GB minimum) · Time: 30 minutes + upload time · Difficulty: Medium

Keep your originals elsewhere too. Immich is developed quickly and occasionally has breaking changes between versions. Read the release notes before updating, and make sure your backups include the photo library.

What You Need

Step 1: Download the Official Files

Immich changes often, so always start from their current compose file rather than one copied from a blog:

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

Step 2: Edit the Settings (.env)

nano .env

Change these lines:

# Where photos and videos are stored (lots of space needed)
UPLOAD_LOCATION=/mnt/data/immich/library

# Where the database lives — keep this on your fast SSD, NOT a network share
DB_DATA_LOCATION=./postgres

# Uncomment and set your time zone
TZ=America/New_York

# Change this! Letters and numbers only (no symbols)
DB_PASSWORD=MakeThisALongRandomString123
# Create the library folder and start Immich
sudo mkdir -p /mnt/data/immich/library
docker compose up -d
docker compose ps       # all containers should be "running"/"healthy" after a minute

Step 3: First Login and Settings

  1. Open http://192.168.1.50:2283 → Getting Started → create the admin account.
  2. Administration → Users: create an account for each family member (each gets a private library).
  3. Administration → Settings → Backup Settings: confirm automatic database backups are on. They're written into your upload location.
  4. Add the proxy host photos.home.example.com → port 2283 (see the bottom of this page) — the phone app works best with HTTPS.

Step 4: Set Up Phone Backup

  1. Install Immich from the App Store / Google Play (or F-Droid).
  2. Server URL: https://photos.home.example.com → log in.
  3. Tap the cloud icon → choose which albums to back up (e.g. Camera/Recents).
  4. Turn on foreground and background backup. Give the app permission to run in the background (Android: disable battery optimisation for Immich).
  5. The first backup can take hours for a big library. Leave the phone on Wi-Fi and charging overnight.

With Tailscale running on the phone, backups continue even when you're away from home.

Step 5: Import From Google Photos (Optional)

  1. Request your library at takeout.google.com → deselect all → select Google Photos → export as .zip files.
  2. Use the community tool immich-go (from GitHub) to upload the Takeout zips. It reads Google's separate JSON files so dates, albums, and locations are kept.
  3. In Immich, create an API key (Account Settings → API Keys) for immich-go to use.

Features to Try

Add It to Your Proxy, Dashboard, and Backups

Updating Immich

cd ~/stacks/immich
# 1. Read the release notes on GitHub for breaking changes FIRST
# 2. Then:
docker compose pull && docker compose up -d

Troubleshooting

What's Next?

Jellyfin: Your Own Netflix →