Privacy Tools #Immich#self-hosted#photo storage

Immich: Self-Hosted Google Photos Alternative Setup Guide

Set up Immich, the open-source self-hosted photo library, as a private Google Photos replacement with AI face recognition.

7 min read

Immich is an open-source, self-hosted photo and video backup solution that rivals Google Photos in features: AI-powered face recognition, object detection, automatic albums, timeline view, and mobile backup apps for Android and iOS. Running it yourself means your photos never leave your hardware — no training AI models on your family photos, no privacy policy changes, no storage tier limits.

What Immich Offers

  • Automatic mobile backup via official iOS and Android apps
  • AI features: Face clustering, object/scene recognition, smart search (“beach”, “birthday”, “dogs”)
  • Timeline view and album organization
  • Map view using EXIF GPS data
  • Video support with transcoding
  • Multi-user support with sharing
  • Web and mobile interfaces

Requirements

Immich requires Docker and Docker Compose. Recommended hardware:

  • Minimum: 4GB RAM, 2 CPU cores, fast storage
  • Recommended: 8GB+ RAM for machine learning features, NVMe SSD or NAS
  • Storage: Size depends on your photo library (allow 2-3x your current library size for transcoded versions)

Installation

Step 1: Install Docker

# On Ubuntu/Debian
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker

Step 2: Download Immich Config Files

mkdir ~/immich-app && cd ~/immich-app
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget https://github.com/immich-app/immich/releases/latest/download/example.env
cp example.env .env

Step 3: Configure .env

Edit .env:

nano .env

Key settings to change:

# Upload storage location — point to your NAS or large drive
UPLOAD_LOCATION=/mnt/photos/immich

# Machine learning cache
MACHINE_LEARNING_CACHE_FOLDER=/mnt/photos/immich_ml

# Database password (change from default!)
DB_PASSWORD=change_me_to_strong_password

# Timezone
TZ=America/New_York

Step 4: Start Immich

docker compose up -d

First startup downloads ~5GB of Docker images including the machine learning model. Wait 2-3 minutes, then access:

http://YOUR_SERVER_IP:2283

Step 5: Create Admin Account

On first access, create your admin account. This becomes the primary user with access to server administration.

Mobile App Setup

Android

  1. Install Immich from Google Play Store (or F-Droid)
  2. Open app → Enter your server URL: http://YOUR_IP:2283 (or https:// if using reverse proxy)
  3. Log in with your credentials
  4. Settings → Background backup → Enable

iOS

  1. Install Immich from the App Store
  2. Same setup process as Android
  3. Authorize photo library access when prompted

The mobile app automatically backs up new photos in the background. Configure WiFi-only backup for large libraries.

Setting Up HTTPS with Nginx Proxy Manager

For remote access and proper HTTPS, use a reverse proxy:

# Add to your docker-compose.yml or separate compose file
nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    ports:
      - '80:80'
      - '443:443'
      - '81:81'  # Admin panel

In Nginx Proxy Manager admin panel:

  1. Add Proxy Host → Domain: photos.yourdomain.com
  2. Forward to immich-server:3001 (internal Docker network)
  3. SSL → Request Let’s Encrypt certificate

GPU Acceleration for Machine Learning

If your server has a dedicated GPU, enable hardware acceleration for face detection and CLIP (image search):

For NVIDIA (add to docker-compose.yml under immich-machine-learning):

deploy:
    resources:
        reservations:
            devices:
                - driver: nvidia
                  count: 1
                  capabilities: [gpu]

GPU acceleration reduces face detection from ~30 minutes to ~3 minutes for a 50,000 photo library.

Managing Your Library

Import Existing Photos

# Place existing photos in the upload directory
cp -r /old/photos/ $UPLOAD_LOCATION/

# Then run the import job in Immich web UI:
# Administration → Jobs → Library → Run

External Libraries (Non-destructive)

Immich can scan external library directories without moving files:

Administration → External Libraries → Add Library → point to your existing photo directory.

Photos are indexed and become searchable/viewable but remain in their original location.

Storage Templates

Configure how Immich organizes uploaded files:

Administration → Storage Template:

{{y}}/{{MM}}/{{filename}}

Creates 2026/04/photo.jpg structure.

Updating Immich

Immich updates frequently:

cd ~/immich-app
docker compose pull
docker compose up -d

Check the GitHub releases page for breaking changes before major updates.

Resource Usage

Typical idle resource usage:

  • RAM: 2-4GB (including machine learning model)
  • CPU: Minimal when idle; spikes during indexing or transcoding
  • Storage I/O: Depends on concurrent users and backup activity

For a home server, Immich comfortably runs alongside other services on a 4-core machine with 8GB RAM.

Immich has become the de facto open-source Google Photos replacement. Its combination of mobile-first backup, AI-powered organization, and active development makes it an excellent centerpiece of a self-hosted privacy stack alongside Nextcloud and Vaultwarden.

#Google Photos #Docker #privacy #photo storage #self-hosted #Immich