Immich is an open-source photo manager you host yourself, with auto-upload from your phone, face recognition and a map view. Your photos live on your server, in a location you choose. Immich has no licence fee; you only pay for the server. See matching offers in the VPS comparison.
This guide shows you step by step how to install Immich on your own server.
Prerequisites
What you need:
- A VPS with enough RAM: according to the Immich docs, at least 6 GB, 8 GB recommended; 4 GB without machine learning. CPU: at least 2 cores, 4 recommended (as of Nov 7, 2026, Immich requirements). Don't have one? Find servers with 8+ GB RAM here →
- Enough storage for your photos (see calculator below)
- Ubuntu 22.04 or 24.04
- Docker & Docker Compose
- Optional: Domain for HTTPS
Storage Calculator
| Photos | Estimated Storage | Recommended VPS Storage |
|---|---|---|
| 5,000 | ~25-50 GB | 100 GB |
| 20,000 | ~100-200 GB | 300 GB |
| 50,000 | ~250-500 GB | 500 GB |
| 100,000+ | ~500 GB - 1 TB | Dedicated or NAS |
The Immich docs recommend local SSD storage for the database, never a network share. Storage per plan is shown in the VPS comparison.
Looking for a server for Immich?
For Immich with machine learning, the Immich docs recommend 8 GB RAM. Find suitable servers here.
Show servers with 8+ GB RAMStep 1: Install Docker
If Docker isn't installed yet:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Log out and back in, or: newgrp docker
Check Docker Compose:
docker compose version
# Should show v2.x
Step 2: Install Immich
Immich provides an official installation script:
mkdir -p ~/immich && cd ~/immich
curl -fsSL https://get.immich.app | bash
What the script does:
- Downloads docker-compose.yml
- Creates .env with secure passwords
- Creates upload/ directory for photos
Start Immich:
docker compose up -d
The first start takes a few minutes – several containers are being downloaded (Web, Server, ML, Redis, PostgreSQL).
Important: Note the automatically generated password from the
.envfile!
Step 3: Initial Setup
Open http://YOUR-SERVER-IP:2283 in your browser:
- Click 'Getting Started'
- Create the admin account (email + password)
- Optional: Create additional users for family
- Done! You can now upload photos
Tip: The admin can later invite more users and set storage quotas.
Step 4: Add External Library (Optional)
If you already have photos on the server, modify docker-compose.yml:
services:
immich-server:
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /path/to/your/photos:/usr/src/app/external:ro # Read-only
Then:
- Restart containers:
docker compose up -d - In Immich: Administration → External Libraries → Add Library
- Enter path
/usr/src/app/external - Start scan – Immich indexes all photos
Step 5: Set Up Mobile App
The Immich app is available in the App Store and Play Store:
- Install the app (search: 'Immich')
- Enter server URL:
http://YOUR-IP:2283 - Log in with your account
- Enable backup: Settings → Backup → Enable Background Backup
Tip: For backup only over WiFi: Disable 'Use cellular data'
Warning: Without HTTPS, photos are transmitted unencrypted! For use outside your home network: Set up HTTPS (next step).
Step 6: Set Up HTTPS with Caddy
For secure access from anywhere, we'll set up a reverse proxy. Caddy is simpler than Nginx/Traefik:
Add Caddy to docker-compose.yml:
services:
# ... existing Immich services ...
caddy:
image: caddy:latest
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
depends_on:
- immich-server
volumes:
caddy_data:
Create Caddyfile:
photos.yourdomain.com {
reverse_proxy immich-server:2283
}
Restart:
docker compose up -d
Caddy automatically obtains an SSL certificate from Let's Encrypt. Make sure your domain points to the server IP.
How do I import Google Photos into Immich?
You import Google Photos into Immich in two main steps: export your library via Google Takeout as ZIP archives, then upload them with immich-go, the community tool the Immich documentation recommends for this. immich-go reads the ZIPs directly, takes capture date, GPS data and descriptions from the Takeout JSON files and recreates your albums in Immich.
As of Nov 7, 2026, checked against the Immich CLI documentation, the immich-go README (version v0.32.0) and Google's Takeout help page.
1. Create the Takeout export
- Open Google Takeout and select only "Google Photos".
- File type ZIP, archive size 50 GB: Google splits larger exports into several archives, and 50 GB gives you the fewest parts.
- Create the export and download all parts (
takeout-…-001.zip,-002.zip…) completely. According to Google, the archives expire after about 7 days.
2. Create an API key in Immich
immich-go talks to your server through the API. Create the key in the Immich web interface under account settings → "API Keys". The immich-go installation guide lists the permissions it needs and links the ready-made binaries for Linux, macOS and Windows.
3. Upload with immich-go
immich-go runs on the machine where the ZIPs are and uploads to your server over the network. Use the HTTPS address from step 6, otherwise photos and the API key travel unencrypted. Pass all parts in one command; ZIPs don't need to be extracted (TGZ archives do):
immich-go upload from-google-photos --server=https://photos.yourdomain.com --api-key=YOUR-API-KEY /path/to/takeout-*.zip
What happens to albums and metadata?
Defaults according to the immich-go command reference:
- Albums:
--sync-albumsis on and recreates your Takeout albums in Immich. Untitled albums are skipped unless you add--include-untitled-albums. - Metadata: Capture date, GPS coordinates and descriptions come from the JSON files. Files without a matching JSON file are left out;
--include-unmatchedadds them with less metadata. - Archive, partner, trash: Archived photos and photos from a partner account are imported, photos in the trash are not (
--include-trashed). - Tags: People names from Takeout and a Takeout timestamp become tags in Immich.
- Duplicates: Files already on the server are not uploaded again, so you can simply restart an interrupted import.
Note: The official Immich CLI (
immich upload) uploads files but, according to its documentation, does not read Takeout JSON files. For Takeout, the Immich documentation recommends immich-go.
Configure Machine Learning
Immich uses ML for face recognition and object search. For large libraries, tuning is worthwhile:
Disable ML
Turn machine learning off under Administration → Settings → Machine Learning Settings. To keep the service from starting at all, comment out the immich-machine-learning section in docker-compose.yml (as of Nov 7, 2026, Immich FAQ).
Change ML Model
Set the Smart Search model under Administration → Settings → Machine Learning Settings → Smart Search → Model Name (Immich search docs).
Note: The first ML run can take a long time for large libraries; check progress under Administration → Job Queues.
Backup Strategy
Your photos are important – definitely set up backups:
Daily: PostgreSQL database
docker exec immich_postgres pg_dumpall > backup.sql
Weekly: Upload directory (photos) with rsync to backup server or storage box
Example cronjob:
# Daily DB backup
0 3 * * * docker exec immich_postgres pg_dumpall > /backup/immich-db-$(date +\%Y\%m\%d).sql
# Weekly photo backup (incremental)
0 4 * * 0 rsync -avz ~/immich/upload/ [email protected]:/immich-backup/
Common Issues
ML Container Won't Start (OOM)
Not enough RAM. Either upgrade VPS or disable ML.
Photos Appear Twice
Enable 'Detect duplicate assets' in Administration → Jobs before the next import.
Mobile App Can't Find Server
Check:
- Is firewall port 2283 open?
- URL correct (don't forget http://)?
- Is server on the same network?
Thumbnails Load Slowly
NVMe storage helps. Or: Reduce thumbnail size in Administration → Settings.
Faces Not Recognized
Start ML job manually: Administration → Jobs → Face Detection → Run
Conclusion
Your photos live on your server, in a location you choose. If you manage other people's photos, you remain responsible for GDPR compliance, usually with a data processing agreement with your host. You can also run Paperless for documents or Vaultwarden as a password manager on the same server.
Frequently Asked Questions
How long does the Google Photos migration take?
Can I use Immich without a domain?
How much storage do the thumbnails need?
Is Immich stable enough for production use?
More Self-Hosting Guides
Ready for your own photo cloud?
For Immich with machine learning, the Immich docs recommend 8 GB RAM. Find suitable servers here.
Servers with 8+ GB RAM



