Immich zelf hosten op een VPS met Docker Compose

14 min leestijd·Matthieu·photo-managementself-hostingimmichdocker-composegoogle-photos-alternative|

Installeer Immich op een VPS als zelfgehost alternatief voor Google Photos. Docker Compose-setup, mobiele backup, opslagplanning met echte cijfers, machine learning op CPU, database-backup en -herstel, en een veilig updateproces.

Immich is een opensource, zelfgehost platform voor het beheren van foto's en video's. Het biedt automatische mobiele backup, gezichtsherkenning, slim zoeken en het delen van albums. Als je wilt stoppen met het sturen van je foto's naar Google, is Immich het meest complete zelfgehoste alternatief.

Immich draaien op een Europese VPS betekent dat je foto's op infrastructuur blijven die jij beheert. Geen scans door derden, geen trainingsdatasets, geen verrassende beleidswijzigingen. Voor AVG-doeleinden ben je zowel verwerkingsverantwoordelijke als verwerker, wat compliance vereenvoudigt wanneer de data je server nooit verlaten.

Deze handleiding installeert Immich op een externe VPS met Docker Compose. Het gaat ervan uit dat Docker Engine met de Compose-plugin al geïnstalleerd is en dat er een reverse proxy draait. Als je die eerst nodig hebt, zie Docker in productie op een VPS: wat er misgaat en hoe je het oplost en Traefik vs Caddy vs Nginx: Docker reverse proxy vergeleken.

Wat heb je nodig om Immich op een VPS te draaien?

Immich heeft minimaal 6 GB RAM en 2 CPU-cores nodig voor een volledige installatie met machine learning ingeschakeld. Zonder ML is 4 GB voldoende. De opslagbehoefte hangt af van je fotobibliotheek: reken op de ruwe grootte van je bibliotheek plus 10-20% overhead voor thumbnails en getranscodeerde video, plus 1-3 GB voor de PostgreSQL-database. Docker Engine met de Compose-plugin is vereist. Immich draait alleen op Linux.

Component Minimum Aanbevolen
RAM 4 GB (ML uitgeschakeld) 8 GB
CPU 2 cores 4 cores
Opslag 50 GB (kleine bibliotheek) 250 GB+
Software Docker Engine + Compose-plugin Gelijk
OS Elke Linux met Docker Ubuntu 22.04/24.04, Debian 12

PostgreSQL heeft lokale SSD-opslag nodig. Zet de database nooit op een netwerkshare. Op een Virtua VPS is NVMe de standaard, dus dit is al geregeld.

Hoe installeer je Immich met Docker Compose?

Download het officiële Docker Compose-bestand en het voorbeeld-omgevingsbestand van de Immich-releasepagina, configureer je opslagpaden en databasewachtwoord, en start de stack.

Projectdirectory aanmaken

mkdir -p /opt/immich && cd /opt/immich

Officiële bestanden downloaden

Download deze altijd van de laatste release. Kopieer niet uit blogposts (deze inbegrepen) omdat Immich zijn Compose-bestand regelmatig bijwerkt om wijzigingen in database-images bij te houden.

wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Omgeving configureren

Open het .env-bestand:

nano .env

Stel deze waarden in:

UPLOAD_LOCATION=/opt/immich/data
DB_DATA_LOCATION=/opt/immich/postgres
IMMICH_VERSION=v2.6.1
DB_PASSWORD=<je-sterke-wachtwoord>
TZ=Europe/Berlin

Genereer een sterk databasewachtwoord met alleen alfanumerieke tekens (A-Za-z0-9). Speciale tekens veroorzaken parsingproblemen bij Docker Compose in .env-bestanden:

openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c 32; echo

Kopieer de uitvoer en plak deze als DB_PASSWORD-waarde.

Pin IMMICH_VERSION op een specifieke release-tag zoals v2.6.1 in plaats van de v2-metatag. Dit voorkomt verrassende upgrades wanneer je docker compose pull uitvoert voor andere services. Jij bepaalt wanneer Immich wordt bijgewerkt.

Datadirectory's aanmaken

mkdir -p /opt/immich/data /opt/immich/postgres

Blootgestelde poort verwijderen

Het standaard Compose-bestand stelt poort 2283 direct bloot. Omdat je een reverse proxy gebruikt, verwijder of becommentarieer de ports-sectie in docker-compose.yml zodat Immich alleen via de proxy bereikbaar is:

sed -i "s/- '2283:2283'/# - '2283:2283'/" docker-compose.yml

Verbind Immich in plaats daarvan met het Docker-netwerk van je reverse proxy. Als je proxynetwerk proxy heet:

cat >> docker-compose.yml << 'EOF'

networks:
  default:
  proxy:
    external: true
EOF

Voeg vervolgens het proxy-netwerk toe aan de immich-server-service. Bewerk docker-compose.yml en voeg toe onder de immich-server-service:

    networks:
      - default
      - proxy

Dit houdt de database en Redis op het interne netwerk terwijl alleen de server aan de reverse proxy wordt blootgesteld.

Stack starten

docker compose up -d

Bekijk de logs om te bevestigen dat alle services schoon opstarten:

docker compose logs -f --tail=50

De serverlogs tonen Immich Server is listening on http://[::1]:2283 zodra deze gereed is. De machine-learning-service laadt daarna zijn modellen. Druk op Ctrl+C om de logstream te verlaten.

Controleer of alle vier de containers draaien:

docker compose ps
NAME                    STATUS
immich_server           Up (healthy)
immich_machine_learning Up (healthy)
immich_redis            Up (healthy)
immich_postgres         Up (healthy)

Alle vier moeten binnen een paar minuten Up (healthy) tonen. De ML-container duurt het langst omdat deze bij de eerste start modellen downloadt.

Bestandsrechten beperken

Het .env-bestand bevat je databasewachtwoord. Vergrendel het:

chmod 600 .env
ls -la .env
-rw------- 1 root root 245 Mar 20 10:00 .env

Hoe stel je een reverse proxy in voor Immich?

Immich heeft een reverse proxy nodig voor HTTPS en om grote bestandsuploads van mobiele apparaten te verwerken. Je moet de limiet voor de request body-grootte hoog genoeg instellen voor video-uploads. Zonder dit falen uploads boven de standaardlimiet (doorgaans 1 MB in Nginx) stilzwijgend.

Voor een volledige reverse proxy-configuratie, zie Traefik vs Caddy vs Nginx: Docker reverse proxy vergeleken. Hier zijn de Immich-specifieke fragmenten.

Caddy

In je Caddyfile:

photos.example.com {
    reverse_proxy immich_server:2283
}

Caddy regelt TLS automatisch en heeft geen standaard body-groottelimiet, dus video-uploads werken direct.

Traefik

Voeg labels toe aan de immich-server-service in docker-compose.yml:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.immich.rule=Host(`photos.example.com`)"
      - "traefik.http.routers.immich.entrypoints=websecure"
      - "traefik.http.routers.immich.tls.certresolver=letsencrypt"
      - "traefik.http.services.immich.loadbalancer.server.port=2283"

Voor grote uploads met Traefik, voeg een middleware toe om de bufferinglimiet te verhogen of stel maxRequestBodyBytes in je statische Traefik-configuratie in.

Nginx

Als je Nginx als reverse proxy gebruikt, is de sleutelinstelling client_max_body_size. Zonder deze falen video-uploads:

server {
    server_name photos.example.com;

    client_max_body_size 50000M;

    location / {
        proxy_pass http://immich_server:2283;
        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;

        # WebSocket support for real-time updates
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Wijs je DNS A-record (en AAAA als je IPv6 hebt) naar het IP-adres van je VPS. Na DNS-propagatie bereik je Immich op https://photos.example.com.

Hoe beveilig je Immich na de eerste login?

Open https://photos.example.com in je browser. Immich toont een registratiepagina. Maak je beheerdersaccount aan met een sterk wachtwoord.

Schakel na het aanmaken van je admin-account onmiddellijk de publieke registratie uit. Ga naar Administration > Settings > Server en zet Allow New Users uit. Anders kan iedereen die je URL ontdekt een account aanmaken en bestanden naar je opslag uploaden.

Beheerdersinstellingen om te controleren

  • Administration > Settings > Storage Template: schakel dit in om bestanden op datum te organiseren ({{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}) in plaats van willekeurige UUID's. Dit maakt handmatig bladeren en selectief herstellen mogelijk.
  • Administration > Settings > Backup: automatische databasebackups zijn standaard ingeschakeld, dagelijks om 2:00 uur met 14 dagen retentie. Bevestig dat dit actief is.
  • Administration > Settings > Server: stel de externe URL in op je domein (https://photos.example.com). De mobiele app en gedeelde links gebruiken deze.

Beveiliging op containerniveau

Voeg beveiligingsopties toe aan de immich-server-service in docker-compose.yml:

    security_opt:
      - no-new-privileges:true

Dit voorkomt privilege-escalatie binnen de container. De no-new-privileges-vlag blokkeert setuid-binaries van het verkrijgen van verhoogde rechten.

Voor resourcelimieten, voeg geheugenbeperkingen toe om te voorkomen dat een enkele container al het VPS-RAM verbruikt en de OOM killer activeert. Zie Docker Compose resourcelimieten, healthchecks en herstartbeleid voor de volledige syntax. Een praktisch startpunt voor een 8 GB VPS:

    deploy:
      resources:
        limits:
          memory: 2G

Stel dit in voor immich-server en immich-machine-learning. PostgreSQL en Redis hebben zelden expliciete limieten nodig op een 8 GB VPS, maar profiteren ervan op een 4 GB instance.

Versie-informatie verbergen

Immich toont standaard zijn versie in API-responses. Dit is geen directe kwetsbaarheid, maar versie-informatie helpt aanvallers bekende problemen te targeten. Er is geen ingebouwde schakelaar om het te verbergen, maar je reverse proxy kan response-headers verwijderen. In Nginx:

proxy_hide_header X-Powered-By;

Hoe verbind je de Immich mobiele app voor automatische backup?

Installeer de Immich-app vanuit de App Store (iOS) of Google Play (Android). Bij de eerste start voer je je server-URL in (https://photos.example.com) en log je in met je admin-inloggegevens. De app vraagt je om automatische backup in te schakelen.

Automatische backup configureren

  1. Open de app, tik op je avatar rechtsboven en vervolgens Backup Settings.
  2. Schakel Background Backup in. Op iOS schakel je ook Background App Refresh in via de systeeminstellingen. Op Android schakel je batterijoptimalisatie uit voor Immich zodat het systeem de app niet beëindigt.
  3. Kies welke albums je wilt back-uppen. Standaard back-upt Immich je camerarol. Je kunt andere albums toevoegen (screenshots, WhatsApp-afbeeldingen) vanaf het albumselectiescherm.
  4. Schakel Cellular Backup alleen in als je mobiele abonnement het toestaat. Grote video-uploads kunnen meerdere GB verbruiken.

Eerste backuptest

Neem een foto, open de Immich-app en trek naar beneden om te vernieuwen. De foto zou binnen seconden in de tijdlijn moeten verschijnen op Wi-Fi. De backup-statusindicator in de app toont een groen vinkje wanneer alle foto's gesynchroniseerd zijn.

Vanaf je VPS kun je bevestigen dat uploads aankomen:

ls /opt/immich/data/upload/

Je ziet een directory met je gebruikers-ID als naam die de geüploade bestanden bevat.

Hoeveel opslag heeft Immich nodig per foto?

Opslagplanning op een VPS is belangrijker dan op een NAS omdat je niet zomaar een extra schijf kunt toevoegen. Hier zijn echte cijfers gebaseerd op typische smartphone-fotobibliotheken.

Opslag per fototype

Formaat Gemiddelde grootte Opmerkingen
Smartphone JPEG 3-5 MB Meest voorkomend formaat
HEIC (iPhone) 2-3 MB Apple-standaard sinds iPhone 7
RAW (spiegelreflex) 25-50 MB Professionele camera's
Smartphone-video (1080p) ~150 MB/min Varieert per codec
Smartphone-video (4K) ~400 MB/min H.265 bespaart ~40%

Totale opslag per bibliotheekgrootte

Deze tabel gebruikt smartphone-JPEG's van gemiddeld 4 MB, plus Immich-overhead (thumbnails, transcodes, database).

Bibliotheekgrootte Ruwe foto's Thumbnails (~15%) DB Totaal
10.000 foto's 40 GB 6 GB 1 GB ~47 GB
25.000 foto's 100 GB 15 GB 1,5 GB ~117 GB
50.000 foto's 200 GB 30 GB 2 GB ~232 GB
100.000 foto's 400 GB 60 GB 3 GB ~463 GB
200.000 foto's 800 GB 120 GB 4 GB ~924 GB

Als je bibliotheek video bevat, vermenigvuldig de opslagbehoefte dienovereenkomstig. Een bibliotheek met 10% video-inhoud (naar bestandsaantal) kan de opslagbehoefte verdubbelen omdat video's 30-100 keer groter zijn per bestand dan foto's.

Wanneer meer opslag toevoegen

Op een Virtua VPS kun je extra block storage-volumes aansluiten wanneer je hoofdschijf vol raakt. Mount het volume en wijs UPLOAD_LOCATION ernaar. Voor bibliotheken boven 500 GB kun je S3-compatibele externe opslag overwegen. Immich ondersteunt dit via zijn opslagconfiguratie, waarbij media naar objectopslag worden verplaatst terwijl de database en thumbnails lokaal blijven.

Monitor schijfgebruik met een eenvoudige cron-controle:

df -h /opt/immich/data

Stel een waarschuwing in wanneer het gebruik 80% overschrijdt. Een volle schijf beschadigt de PostgreSQL-database en kan je Immich-instance onherstelbaar maken zonder backup.

De «Free Up Space»-functie vanaf v2.5

Immich v2.5+ bevat een «Free Up Space»-knop in de mobiele app. Nadat foto's naar je server zijn geback-upt, kan de app lokale kopieën van je telefoon verwijderen om opslagruimte vrij te maken. Alleen bestanden waarvan de upload is bevestigd en die niet in de Immich-prullenbak staan worden verwijderd. Het werkt op zowel iOS als Android.

Hoe werkt Immich machine learning zonder GPU?

De ML-functies van Immich (gezichtsherkenning, slim zoeken via CLIP en objectdetectie) draaien standaard op de CPU. Geen GPU nodig. De immich-machine-learning-container laadt modellen in RAM en verwerkt foto's op de achtergrond zonder uploads of browsen te blokkeren.

Op een 4-core VPS met 8 GB RAM kun je deze geschatte verwerkingstijden verwachten voor de initiële scan:

Bibliotheekgrootte Gezichtsdetectie CLIP-indexering Totaal (sequentieel)
1.000 foto's ~15 min ~20 min ~35 min
10.000 foto's ~2,5 uur ~3,5 uur ~6 uur
50.000 foto's ~12 uur ~17 uur ~29 uur

Dit zijn eenmalige kosten. Na de initiële scan worden nieuwe uploads in seconden verwerkt. De ML-container draait op lage prioriteit en blokkeert geen uploads of browsen terwijl het de wachtrij verwerkt.

Modelselectie

Immich gebruikt twee hoofd-ML-modellen:

  • Gezichtsherkenning: detecteert en groepeert gezichten in je bibliotheek. Draait automatisch bij elke upload.
  • CLIP (slim zoeken): indexeert foto's op inhoud zodat je kunt zoeken op «zonsondergang» of «hond op het strand» zonder tags. Gebruikt meer RAM dan gezichtsherkenning.

Beide modellen worden in RAM geladen wanneer ze voor het eerst nodig zijn en na 5 minuten inactiviteit weer vrijgegeven (MACHINE_LEARNING_MODEL_TTL=300 standaard). Op een VPS met beperkt geheugen kun je deze waarde verlagen om RAM sneller vrij te geven:

# In .env
MACHINE_LEARNING_MODEL_TTL=60

Maak de container opnieuw aan na het wijzigen van omgevingsvariabelen (herstarten is niet voldoende):

docker compose up -d --force-recreate immich-machine-learning

RAM-verdeling per component

Component RAM-gebruik (8 GB VPS) RAM-gebruik (4 GB VPS)
immich-server ~500 MB ~500 MB
immich-machine-learning ~1,5-2 GB uitgeschakeld
PostgreSQL ~500 MB-1 GB ~500 MB
Redis (Valkey) ~50 MB ~50 MB
OS + Docker-overhead ~1 GB ~1 GB
Beschikbare ruimte ~3-4 GB ~2 GB

Hoe schakel je ML uit om resources te besparen op een kleine VPS?

Als je een 4 GB VPS draait of resources wilt besparen, verwijder of becommentarieer de immich-machine-learning-service in docker-compose.yml:

cd /opt/immich

Bewerk docker-compose.yml en becommentarieer (of verwijder) het hele immich-machine-learning-serviceblok. Herstart dan:

docker compose up -d

Je verliest gezichtsherkenning, slim zoeken en objectdetectie. Foto-uploads, browsen, delen en albumbeheer werken normaal. Je kunt ML later weer inschakelen door de service te ontcommentariëren en te herstarten.

Hoe maak je een backup van Immich's database en foto's?

Maak een backup van twee dingen: de PostgreSQL-database met pg_dump en de uploaddirectory met rsync. Plan beide via cron. Gebruik geen rsync --delete op het backupdoel omdat corruptie op de bron zich naar je backup zou verspreiden. Sla minstens één kopie op buiten de server. Test je herstelprocedure regelmatig.

Database-backup

docker exec -t immich_postgres pg_dump \
  --clean --if-exists \
  --dbname=immich \
  --username=postgres | gzip > /opt/immich/backups/db-$(date +%Y%m%d-%H%M%S).sql.gz

Uploaddirectory-backup

rsync -a --info=progress2 \
  /opt/immich/data/ \
  /mnt/backup/immich-data/

Sla thumbnails en getranscodeerde video over om ruimte te besparen. Deze worden automatisch opnieuw gegenereerd:

rsync -a --info=progress2 \
  --exclude='thumbs/' \
  --exclude='encoded-video/' \
  /opt/immich/data/ \
  /mnt/backup/immich-data/

Automatiseren met cron

Maak een backupscript:

cat > /opt/immich/backup.sh << 'SCRIPT'
#!/bin/bash
set -euo pipefail

BACKUP_DIR="/mnt/backup/immich"
mkdir -p "$BACKUP_DIR/db"

# Database dump
docker exec -t immich_postgres pg_dump \
  --clean --if-exists \
  --dbname=immich \
  --username=postgres | gzip > "$BACKUP_DIR/db/immich-db-$(date +%Y%m%d).sql.gz"

# Keep last 14 database dumps
find "$BACKUP_DIR/db" -name "immich-db-*.sql.gz" -mtime +14 -delete

# Media sync (excludes regeneratable data)
rsync -a \
  --exclude='thumbs/' \
  --exclude='encoded-video/' \
  /opt/immich/data/ \
  "$BACKUP_DIR/media/"

echo "Backup completed: $(date)"
SCRIPT

chmod 700 /opt/immich/backup.sh

Plan het elke nacht om 3:00 uur (na Immich's eigen interne backup om 2:00 uur):

(crontab -l 2>/dev/null; echo "0 3 * * * /opt/immich/backup.sh >> /var/log/immich-backup.log 2>&1") | crontab -

Off-site backup

Voor een echte 3-2-1 backupstrategie kopieer je backups van de server met rclone naar een S3-compatibele opslagprovider:

rclone sync /mnt/backup/immich remote:immich-backup --transfers 4

Raadpleeg de documentatie van je opslagprovider voor de rclone-configuratie.

Herstel testen

Een backup die je niet hebt getest is geen backup. Hier is de herstelprocedure:

cd /opt/immich
docker compose down -v
rm -rf /opt/immich/postgres/*

docker compose pull
docker compose create
docker start immich_postgres
sleep 10

gunzip --stdout /mnt/backup/immich/db/immich-db-20260320.sql.gz | \
  sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | \
  docker exec -i immich_postgres psql \
    --dbname=immich \
    --username=postgres \
    --single-transaction \
    --set ON_ERROR_STOP=on

docker compose up -d

Log na het herstel in op de webinterface. Blader door je tijdlijn en bevestig dat foto's laden. Als thumbnails ontbreken (omdat je ze van de backup hebt uitgesloten), ga naar Administration > Job Queues en start Generate Thumbnails.

Hoe werk je Immich veilig bij?

Immich volgt semantisch versiebeheer en brengt regelmatig releases uit. Sommige releases bevatten databasemigraties. Downgraden na een upgrade wordt niet ondersteund. Je hebt dus een gedisciplineerd updateproces nodig.

Stapsgewijs updateproces

  1. Lees de changelog. Controleer de releasepagina op breaking changes voordat je iets pullt.

  2. Maak een backup van de database. Voer het backupscript uit of een handmatige pg_dump zoals hierboven getoond. Sla dit niet over.

  3. Werk de versiepinning bij. Bewerk /opt/immich/.env en wijzig IMMICH_VERSION naar de nieuwe versie:

# Example: updating from v2.6.1 to v2.7.0
sed -i 's/IMMICH_VERSION=v2.6.1/IMMICH_VERSION=v2.7.0/' /opt/immich/.env
  1. Pull en herstart.
cd /opt/immich
docker compose pull
docker compose up -d
  1. Controleer de logs.
docker compose logs -f --tail=100

Zoek naar migratieberichten en bevestig dat de server zonder fouten opstart. Databasemigraties worden automatisch bij het opstarten uitgevoerd.

  1. Ruim oude images op.
docker image prune -f

Rollback

Als iets misgaat, kun je niet zomaar de versie terugzetten omdat de database mogelijk is gemigreerd. Herstel in plaats daarvan vanuit je pre-update databasebackup:

  1. Stop de stack: docker compose down -v
  2. Herstel de database vanuit je backup (zie de herstelsectie hierboven)
  3. Zet IMMICH_VERSION terug naar de vorige versie in .env
  4. Start de stack: docker compose up -d

Daarom maak je voor elke update een backup.

Hoe importeer je foto's van Google Takeout in Immich?

De makkelijkste manier om een Google Photos-export te importeren is immich-go, een community-tool dat Google Takeout ZIP-bestanden direct leest. Het behoudt albumstructuur, datums en GPS-metadata uit de JSON-sidecarbestanden.

Download immich-go op je lokale machine (niet de VPS). Genereer een API-sleutel in Immich: klik op je avatar > Account Settings > API Keys > New API Key.

immich-go upload from-google-photos \
  --server=https://photos.example.com \
  --api-key=your-api-key \
  /path/to/takeout-*.zip

Voer eerst een dry run uit om te zien wat er geïmporteerd wordt:

immich-go upload from-google-photos \
  --server=https://photos.example.com \
  --api-key=your-api-key \
  --dry-run \
  /path/to/takeout-*.zip

De tool dedupliceert op checksum. Als je de import twee keer uitvoert, wordt er niets een tweede keer geüpload.

Voor kleinere imports (minder dan een paar duizend foto's) gebruik je de Immich-webinterface. Sleep bestanden naar de tijdlijnweergave of klik op de uploadknop. De webuploader verwerkt batches maar is trager dan immich-go voor grote bibliotheken.

Externe bibliotheek mounten

Als je foto's al op het VPS-bestandssysteem staan (van een eerdere backup of migratie), kun je ze als externe bibliotheek mounten in plaats van opnieuw te uploaden. Voeg het pad als volume toe in docker-compose.yml onder immich-server:

    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /mnt/photos:/mnt/photos:ro

Ga vervolgens in de Immich-webinterface naar Administration > External Libraries en voeg /mnt/photos toe als bibliotheekpad. Immich indexeert de bestanden ter plaatse zonder ze te kopiëren. De :ro-vlag houdt de mount alleen-lezen zodat Immich je originelen niet kan wijzigen.

Probleemoplossing

Container herstart continu

Controleer de logs van de specifieke container:

docker compose logs immich-server --tail=50
docker compose logs database --tail=50

Veelvoorkomende oorzaken: verkeerd DB_PASSWORD in .env (container en database komen niet overeen), onvoldoende RAM (OOM killer), of volle schijf.

Uploads falen stilzwijgend

Bijna altijd een body-groottelimiet van de reverse proxy. Controleer je proxyconfiguratie voor client_max_body_size (Nginx) of equivalent. Caddy heeft geen standaardlimiet. Traefik-standaardwaarden variëren per versie.

ML-modellen laden niet

De ML-container downloadt modellen bij de eerste start. Als je VPS beperkte bandbreedte heeft of de download werd onderbroken, kunnen de modellen beschadigd zijn. Verwijder de container, wis het model-cachevolume en maak hem opnieuw aan:

docker compose rm -sf immich-machine-learning
docker volume rm immich_model-cache
docker compose up -d immich-machine-learning

Foto's verschijnen maar thumbnails zijn kapot

Genereer thumbnails opnieuw vanuit het adminpaneel: Administration > Job Queues > Generate Thumbnails > Start.

Databaseverbindingsfouten na herstel

Als je relation already exists of foreign key constraint violated fouten ziet tijdens een herstel, was de database niet volledig schoon voor de import. Stop alle containers, verwijder de DB_DATA_LOCATION-directory, maak de postgres-container opnieuw aan, wacht 10 seconden op initialisatie en voer het herstel opnieuw uit.

Logs bekijken

Alle Immich-logs gaan via Docker's loggingdriver:

docker compose logs -f

Voor een specifieke service:

docker compose logs database -f
docker compose logs immich-machine-learning -f

Alleen fouten filteren:

docker compose logs immich-server 2>&1 | grep -i error

Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.

Klaar om het zelf te proberen?

Deploy uw eigen server in seconden. Linux, Windows of FreeBSD.

Bekijk VPS-aanbod