Immich Google Photos Alternative Self Hosted
Immich – Self-Hosted Google Photos Alternative installieren
Was ist Immich?
Immich ist ein modernes, selbst gehostetes Foto- und Videoverwaltungssystem als Open-Source Alternative zu Google Photos. Mit Immich können Sie Ihre Mediendateien vollständig kontrollieren und von überall aus darauf zugreifen.
Hauptfunktionen:
- Foto-/Video-Verwaltung: Hochladen, Organisieren und Anzeigen von Tausenden von Medien
- Automatisches Backup: Mobile App für automatisches Backup (Android/iOS)
- Gesichtserkennung: AI-basierte Gesichtserkennung mit Clustering
- Intelligente Suche: Suche nach Objekten, Orten, Personen, Text (OCR)
- Alben und Kollektionen: Organisieren Sie Fotos in Alben und teilen Sie diese
- Video-Transkodierung: Automatische Videokonvertierung
- Statuskarte: Zeigt Fotoorte auf einer Karte an (wenn EXIF vorhanden)
- Timeline: Zeitgesteuerte Ansicht aller Medien
Systemanforderungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| CPU | 2 Kerne | 4+ Kerne |
| RAM | 4 GB | 8-16 GB |
| Speicher | Abhängig von Fotomenge | 100+ GB (SSD empfohlen) |
| GPU | Keine (optional) | NVIDIA GPU (CUDA) für schnelle ML |
| Docker | 20.10+ | 24.0+ |
Installation mit Docker Compose
Schritt 1: Docker und Docker Compose installieren
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Docker Compose installieren sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Schritt 2: Verzeichnisse erstellen
mkdir -p /opt/immich cd /opt/immich mkdir -p upload pgdata
Schritt 3: .env Datei erstellen
Erstellen Sie /opt/immich/.env:
# Immich Environment Variables IMMICH_VERSION=v1.100.0 # PostgreSQL Database DB_HOSTNAME=immich-db DB_PORT=5432 DB_USERNAME=immich DB_PASSWORD=secure_password_here_change_this DB_DATABASE_NAME=immich # Redis REDIS_HOSTNAME=immich-redis REDIS_PORT=6379 # Immich Server IMMICH_SERVER_URL=http://immich-server:3001 IMMICH_PORT=3001 # Machine Learning (optional) IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003 IMMICH_WORKERS=4 # File Upload UPLOAD_LOCATION=/usr/src/app/upload # Timezone TZ=Europe/Berlin # NVIDIA GPU Support (optional) NVIDIA_VISIBLE_DEVICES=all NVIDIA_DRIVER_CAPABILITIES=compute,utility
Schritt 4: docker-compose.yml erstellen
version: '3.8'
services:
immich-server:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
container_name: immich-server
ports:
- "3001:3001"
depends_on:
- immich-db
- immich-redis
environment:
DB_HOSTNAME: ${DB_HOSTNAME}
DB_PORT: ${DB_PORT}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE_NAME: ${DB_DATABASE_NAME}
REDIS_HOSTNAME: ${REDIS_HOSTNAME}
IMMICH_MACHINE_LEARNING_URL: http://immich-machine-learning:3003
IMMICH_WORKERS: ${IMMICH_WORKERS:-4}
TZ: ${TZ}
volumes:
- /opt/immich/upload:/usr/src/app/upload
restart: unless-stopped
networks:
- immich-network
immich-microservices:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
container_name: immich-microservices
command: start.sh microservices
depends_on:
- immich-db
- immich-redis
environment:
DB_HOSTNAME: ${DB_HOSTNAME}
DB_PORT: ${DB_PORT}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
DB_DATABASE_NAME: ${DB_DATABASE_NAME}
REDIS_HOSTNAME: ${REDIS_HOSTNAME}
IMMICH_MACHINE_LEARNING_URL: http://immich-machine-learning:3003
TZ: ${TZ}
volumes:
- /opt/immich/upload:/usr/src/app/upload
restart: unless-stopped
networks:
- immich-network
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
container_name: immich-machine-learning
environment:
IMMICH_WORKERS: ${IMMICH_WORKERS:-4}
TZ: ${TZ}
volumes:
- /opt/immich/model-cache:/cache
restart: unless-stopped
# Für NVIDIA GPU Unterstützung: uncomment
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [compute, utility]
networks:
- immich-network
immich-db:
image: postgres:15-alpine
container_name: immich-db
environment:
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_DATABASE_NAME}
TZ: ${TZ}
volumes:
- /opt/immich/pgdata:/var/lib/postgresql/data
restart: unless-stopped
networks:
- immich-network
immich-redis:
image: redis:7-alpine
container_name: immich-redis
restart: unless-stopped
networks:
- immich-network
immich-typesense:
image: typesense/typesense:0.24.0
container_name: immich-typesense
environment:
TYPESENSE_API_KEY: ${TYPESENSE_API_KEY:-changeme}
TYPESENSE_ENABLE_CORS: "true"
volumes:
- /opt/immich/tsdata:/data
restart: unless-stopped
networks:
- immich-network
networks:
immich-network:
driver: bridge
volumes:
pgdata:
model-cache:
tsdata:
Schritt 5: Immich starten
cd /opt/immich docker-compose up -d # Logs anschauen docker-compose logs -f immich-server
Immich ist jetzt verfügbar unter: http://localhost:3001
Erste Anmeldung und Setup
- Öffnen Sie http://localhost:3001 im Browser
- Registrieren Sie den Admin-Account (erster Benutzer wird Admin)
- Nach dem Login gelangen Sie zum Dashboard
- Erstellen Sie Alben oder Bibliotheken (optional)
Fotos hochladen
Via Web-Interface
- Klicken Sie auf
Uploadin der Sidebar - Wählen Sie Fotos/Videos zum Hochladen
- Warten Sie auf Abschluss des Uploads
Via Mobile App (Automatisches Backup)
Android:
- Installieren Sie "Immich" aus dem Google Play Store
- Geben Sie Server-URL und Anmeldedaten ein
- Aktivieren Sie "Auto Backup" in den Einstellungen
- Wählen Sie Backup-Ordner (DCIM, Screenshots, etc.)
iOS:
- Installieren Sie "Immich" aus dem App Store
- Konfigurieren Sie gleich wie Android
- Auto Backup funktioniert auch im Hintergrund
Gesichtserkennung aktivieren
Voraussetzungen
Die Machine Learning Container muss laufen (in docker-compose.yml enthalten).
Gesichtserkennung konfigurieren
- Gehen Sie zu
Settings → Administration → Facial Recognition - Aktivieren Sie
Enable Facial Recognition - Setzen Sie
Min Recognized Facesauf 1-5 (je höher, desto sicherer aber weniger Ergebnisse) - Speichern
Scan auslösen
- Gehen Sie zu
Administration → Facial Recognition - Klicken Sie
Trigger Face Detection - Der Scan läuft im Hintergrund (kann mehrere Stunden dauern)
- Fortschritt wird in den Logs angezeigt
Nach dem Scan können Sie in der Web-UI Gesichter erkennen und Personen-Alben erstellen.
Hardware Transcoding (NVIDIA GPU)
Wenn Sie eine NVIDIA GPU haben, aktivieren Sie Hardware-Transcoding:
NVIDIA Docker Runtime installieren
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-docker2 sudo systemctl restart docker
docker-compose.yml anpassen
# In immich-server Service:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [compute, utility]
# In immich-machine-learning Service:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [compute, utility]
Nach Änderung:
docker-compose up -d
Reverse Proxy mit Nginx
# /etc/nginx/sites-available/immich
server {
listen 80;
server_name photos.example.com;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl http2;
server_name photos.example.com;
ssl_certificate /etc/letsencrypt/live/photos.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/photos.example.com/privkey.pem;
client_max_body_size 100M;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Aktivieren und SSL einrichten:
ln -s /etc/nginx/sites-available/immich /etc/nginx/sites-enabled/ nginx -t systemctl restart nginx certbot certonly --nginx -d photos.example.com
client_max_body_size in Nginx auf mindestens 100M, um große Videodateien hochzuladen zu können.Backup-Strategie
Datenbank Backup
#!/bin/bash
# /usr/local/bin/immich-backup.sh
BACKUP_DIR="/backup/immich"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# PostgreSQL Dump
docker exec immich-db pg_dump -U immich immich | \
gzip > $BACKUP_DIR/immich-db-$DATE.sql.gz
# Upload Ordner kopieren (bei Bedarf)
# tar -czf $BACKUP_DIR/immich-upload-$DATE.tar.gz /opt/immich/upload
echo "Backup completed: $BACKUP_DIR/immich-db-$DATE.sql.gz"
In Crontab einbinden:
# Täglich um 2 Uhr 0 2 * * * /usr/local/bin/immich-backup.sh
Speicherverwaltung
| Dateityp | Speicherort | Notizen |
|---|---|---|
| Fotos/Videos | /opt/immich/upload | Original Mediendateien |
| Datenbank | /opt/immich/pgdata | PostgreSQL Daten |
| ML-Modelle | /opt/immich/model-cache | Cached ML-Modelle (neu heruntergeladen wenn gelöscht) |
Update Prozedur
cd /opt/immich # Image updaten docker-compose pull # Container neu starten docker-compose up -d # Datenbank-Migrations werden automatisch durchgeführt docker-compose logs -f immich-server
Speicherverwaltung und Optimierung
Upload-Speicher optimieren:
# Duplikate finden (optional) fdupes -r /opt/immich/upload # Cache der Machine Learning Modelle leeren docker exec immich-machine-learning rm -rf /cache/* # Datenbank Speicher optimieren docker exec immich-db vacuumdb -U immich -d immich