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:
- Automatic backup from your iPhone or Android phone
- Facial recognition groups photos of the same person together
- Search by date, location, object, or person
- Shared albums with family members
- Memories — photos from this day in previous years
- Map view of where your photos were taken
- Duplicate detection
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:
- Thumbnail generation — Creates preview images for the web interface
- Facial recognition — Identifies faces and begins grouping them
- Smart search indexing — Makes photos searchable by object, location, and scene
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.
Cactus Commons Media