Escape Big Tech in a Weekend

Set Up Your Photo Cloud

Set Up Your Photo Cloud

Sunday morning. Time to start launching apps.

We’re starting with photos because for most people, photos are the most personal and irreplaceable data they have. Getting your photos off Google’s servers and onto your own hardware is the moment the weekend becomes real.

Immich is remarkable software. It has facial recognition, automatic organization by date and location, album sharing, a beautiful mobile app, and a web interface that feels polished and fast. It’s updated constantly by an active open-source community. And it’s free.


What Immich Does

Immich gives you everything Google Photos does, running on your own hardware:

The mobile app for iOS and Android handles background backup automatically — just like Google Photos did, except the photos go to your server, not Google’s.


Install Immich

cd ~/docker/immich

Create the environment file that Immich uses for configuration:

nano .env

Paste this content, changing the values marked with arrows:

# Database password - choose something strong
DB_PASSWORD=change_this_to_something_strong   # ← change this

# Where your photos will be stored
UPLOAD_LOCATION=/data/photos   # ← must exist on your data drive

# Your timezone
TZ=America/Phoenix   # ← change to your timezone

Save and exit. Now create the Docker Compose file:

nano docker-compose.yml
name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:release
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    ports:
      - "2283:3001"
    depends_on:
      - redis
      - database
    networks:
      - proxy
      - internal
    restart: unless-stopped

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:release
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    networks:
      - internal
    restart: unless-stopped

  redis:
    container_name: immich_redis
    image: docker.io/redis:6.2-alpine
    networks:
      - internal
    restart: unless-stopped

  database:
    container_name: immich_postgres
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: postgres
      POSTGRES_DB: immich
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - internal
    restart: unless-stopped

volumes:
  model-cache:
  pgdata:

networks:
  proxy:
    external: true
  internal:
    driver: bridge

Before starting, create the photo storage directory on your data drive:

sudo mkdir -p /data/photos
sudo chown -R $USER:$USER /data/photos

Now start Immich:

docker compose up -d

The first startup downloads several large images and may take 5–10 minutes. Watch progress with:

docker compose logs -f immich-server

When you see the server is ready, open your browser and go to http://photos.home or http://your-server-ip:2283.


First Login

The first time you open Immich, you’ll be prompted to create an admin account. Use a real email address (even though this is local-only) and a strong password. This is the master account for your photo server.

After logging in, explore the Settings panel. A few things worth configuring right away:

Storage template — Controls how Immich organizes photos on disk. The default is fine to start.

Machine learning — Facial recognition and smart search are enabled by default. The first time Immich processes your photos, it will use significant CPU for a few hours. This is normal — it’s building its facial recognition database.


Install the Mobile App

Search for Immich in the App Store or Google Play Store. It’s free.

Open the app and enter your server URL: http://photos.home or http://192.168.1.100:2283.

Log in with the admin credentials you just created.

Go to the app settings and enable Background Backup. From this point forward, every photo you take will automatically back up to your Immich server — just like Google Photos used to do.


Import Your Existing Library

If you exported your photos from Google or iCloud as described in the previous chapter, here’s how to import them.

Immich has a command-line import tool that’s perfect for bulk imports. SSH into your server and use the Immich CLI:

# Install the CLI
curl -fsSL https://github.com/immich-app/immich/releases/latest/download/immich-cli-linux-x64 -o /usr/local/bin/immich
chmod +x /usr/local/bin/immich

# Log into your Immich server
immich login http://localhost:2283 your@email.com yourpassword

# Import your photos
immich upload --recursive ~/staging/photos

The import processes files in the background. For a large library (tens of thousands of photos), this can take several hours. You can close your SSH session and it will continue running.

Check import progress in the Immich web interface under Administration → Jobs.


What to Expect After Import

Once your photos are imported, Immich begins processing them:

These jobs run in the background and can take hours for a large library. The interface is usable immediately — processing just improves search and recognition over time.

When facial recognition is complete, go to the Explore tab. You’ll see faces grouped together automatically. Click on a face cluster and assign a name — from then on, Immich knows who that person is across your entire library.


Sharing With Family

Create additional accounts for family members under Administration → Users. Each person gets their own library and their own app login. You can share albums between accounts — great for sharing vacation photos without giving everyone access to your entire library.


Next: Set Up Your Private Cloud →

DEBUG pager playbook_id = escape-big-tech

← Take Ownership of Your Data Set Up Your Private Cloud →