Self-hosting di Immich su un VPS con Docker Compose
Installa Immich su un VPS come alternativa self-hosted a Google Photos. Setup Docker Compose, backup mobile, pianificazione dello storage con numeri reali, machine learning su CPU, backup e ripristino del database e workflow di aggiornamento sicuro.
Immich è una piattaforma open-source e self-hosted per la gestione di foto e video. Offre backup automatico da mobile, riconoscimento facciale, ricerca intelligente e condivisione di album. Se vuoi smettere di inviare le tue foto a Google, Immich è l'equivalente self-hosted più completo.
Far girare Immich su un VPS europeo significa che le tue foto restano su un'infrastruttura che controlli tu. Nessuna scansione da parte di terzi, nessun dataset di addestramento, nessun cambio di policy a sorpresa. Ai fini del GDPR, sei sia titolare che responsabile del trattamento, il che semplifica la conformità quando i dati non lasciano mai il tuo server.
Questa guida installa Immich su un VPS remoto usando Docker Compose. Presuppone che Docker Engine con il plugin Compose sia già installato e che un reverse proxy sia in funzione. Se hai bisogno di installarli prima, consulta Docker in produzione su un VPS: cosa si rompe e come risolvere e Traefik vs Caddy vs Nginx: reverse proxy Docker a confronto.
Di cosa hai bisogno per far girare Immich su un VPS?
Immich richiede almeno 6 GB di RAM e 2 core CPU per un deploy completo con machine learning attivato. Con ML disattivato, 4 GB bastano. Lo storage dipende dalla tua libreria fotografica: prevedi la dimensione grezza della libreria più un 10-20% di overhead per thumbnail e video transcodificati, più 1-3 GB per il database PostgreSQL. Docker Engine con il plugin Compose è necessario. Immich funziona solo su Linux.
| Componente | Minimo | Raccomandato |
|---|---|---|
| RAM | 4 GB (ML disattivato) | 8 GB |
| CPU | 2 core | 4 core |
| Storage | 50 GB (libreria piccola) | 250 GB+ |
| Software | Docker Engine + plugin Compose | Uguale |
| OS | Qualsiasi Linux con Docker | Ubuntu 22.04/24.04, Debian 12 |
PostgreSQL necessita di storage SSD locale. Non mettere mai il database su un volume di rete. Su un VPS Virtua, NVMe è lo standard, quindi questo requisito è già soddisfatto.
Come installare Immich con Docker Compose?
Scarica il file Docker Compose ufficiale e il file di ambiente di esempio dalla pagina release di Immich, configura i percorsi di storage e la password del database, poi avvia lo stack.
Creare la directory del progetto
mkdir -p /opt/immich && cd /opt/immich
Scaricare i file ufficiali
Scarica sempre questi file dall'ultima release. Non fare copia-incolla da articoli di blog (questo incluso) perché Immich aggiorna frequentemente il suo file Compose per adeguarsi ai cambiamenti delle immagini del database.
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
Configurare l'ambiente
Apri il file .env:
nano .env
Imposta questi valori:
UPLOAD_LOCATION=/opt/immich/data
DB_DATA_LOCATION=/opt/immich/postgres
IMMICH_VERSION=v2.6.1
DB_PASSWORD=<la-tua-password-forte>
TZ=Europe/Berlin
Genera una password forte per il database con soli caratteri alfanumerici (A-Za-z0-9). I caratteri speciali causano problemi di parsing di Docker Compose nei file .env:
openssl rand -base64 32 | tr -dc 'A-Za-z0-9' | head -c 32; echo
Copia l'output e incollalo come valore di DB_PASSWORD.
Fissa IMMICH_VERSION a un tag di release specifico come v2.6.1 anziché usare il metatag v2. Questo previene aggiornamenti inaspettati quando esegui docker compose pull per altri servizi. Sei tu a controllare quando Immich si aggiorna.
Creare le directory dei dati
mkdir -p /opt/immich/data /opt/immich/postgres
Rimuovere la porta esposta
Il file Compose predefinito espone la porta 2283 direttamente. Siccome usi un reverse proxy, rimuovi o commenta la sezione ports in docker-compose.yml per rendere Immich accessibile solo tramite il proxy:
sed -i "s/- '2283:2283'/# - '2283:2283'/" docker-compose.yml
Collega invece Immich alla rete Docker del tuo reverse proxy. Se la tua rete proxy si chiama proxy:
cat >> docker-compose.yml << 'EOF'
networks:
default:
proxy:
external: true
EOF
Poi aggiungi la rete proxy al servizio immich-server. Modifica docker-compose.yml e aggiungi sotto il servizio immich-server:
networks:
- default
- proxy
Questo mantiene il database e Redis sulla rete interna esponendo solo il server al reverse proxy.
Avviare lo stack
docker compose up -d
Controlla i log per confermare che tutti i servizi si avviano correttamente:
docker compose logs -f --tail=50
I log del server mostrano Immich Server is listening on http://[::1]:2283 una volta pronto. Il servizio di machine learning carica poi i suoi modelli. Premi Ctrl+C per uscire dallo stream dei log.
Verifica che tutti e quattro i container siano in esecuzione:
docker compose ps
NAME STATUS
immich_server Up (healthy)
immich_machine_learning Up (healthy)
immich_redis Up (healthy)
immich_postgres Up (healthy)
Tutti e quattro dovrebbero mostrare Up (healthy) entro un paio di minuti. Il container ML impiega più tempo perché scarica i modelli al primo avvio.
Restringere i permessi dei file
Il file .env contiene la password del tuo database. Bloccalo:
chmod 600 .env
ls -la .env
-rw------- 1 root root 245 Mar 20 10:00 .env
Come configurare un reverse proxy per Immich?
Immich ha bisogno di un reverse proxy per HTTPS e per gestire upload di file grandi dai dispositivi mobili. Devi impostare il limite della dimensione del corpo della richiesta abbastanza alto per gli upload video. Senza questo, gli upload che superano il limite predefinito (tipicamente 1 MB in Nginx) falliscono silenziosamente.
Per una configurazione completa del reverse proxy, consulta Traefik vs Caddy vs Nginx: reverse proxy Docker a confronto. Ecco gli snippet specifici per Immich.
Caddy
Nel tuo Caddyfile:
photos.example.com {
reverse_proxy immich_server:2283
}
Caddy gestisce TLS automaticamente e non ha un limite predefinito per la dimensione del body, quindi gli upload video funzionano subito.
Traefik
Aggiungi label al servizio immich-server 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"
Per upload grandi con Traefik, aggiungi un middleware per aumentare il limite di buffering o configura maxRequestBodyBytes nella tua configurazione statica di Traefik.
Nginx
Se usi Nginx come reverse proxy, l'impostazione chiave è client_max_body_size. Senza di essa, gli upload video falliscono:
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";
}
}
Punta il tuo record DNS A (e AAAA se hai IPv6) all'indirizzo IP del tuo VPS. Dopo la propagazione DNS, accedi a Immich su https://photos.example.com.
Come mettere in sicurezza Immich dopo il primo login?
Apri https://photos.example.com nel browser. Immich mostra una pagina di registrazione. Crea il tuo account amministratore con una password forte.
Dopo aver creato l'account admin, disabilita la registrazione pubblica immediatamente. Vai su Administration > Settings > Server e disattiva Allow New Users. Chiunque scopra il tuo URL potrebbe altrimenti creare un account e caricare file sul tuo storage.
Impostazioni del pannello admin da verificare
- Administration > Settings > Storage Template: attivalo per organizzare i file per data (
{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}) anziché UUID casuali. Questo rende possibile la navigazione manuale e i ripristini selettivi. - Administration > Settings > Backup: i backup automatici del database sono attivi per default, eseguiti giornalmente alle 2:00 con 14 giorni di retention. Conferma che sia attivo.
- Administration > Settings > Server: imposta l'URL esterno al tuo dominio (
https://photos.example.com). L'app mobile e i link condivisi lo usano.
Hardening a livello di container
Aggiungi opzioni di sicurezza al servizio immich-server in docker-compose.yml:
security_opt:
- no-new-privileges:true
Questo previene l'escalation dei privilegi all'interno del container. Il flag no-new-privileges blocca i binari setuid dall'ottenere permessi elevati.
Per i limiti di risorse, aggiungi vincoli di memoria per impedire a un singolo container di consumare tutta la RAM del VPS e attivare l'OOM killer. Consulta Limiti di risorse, healthcheck e politiche di riavvio in Docker Compose per la sintassi completa. Un punto di partenza pratico per un VPS da 8 GB:
deploy:
resources:
limits:
memory: 2G
Applica questo a immich-server e immich-machine-learning. PostgreSQL e Redis raramente necessitano di limiti espliciti su un VPS da 8 GB, ma ne beneficiano su un'istanza da 4 GB.
Nascondere le informazioni di versione
Immich espone la sua versione nelle risposte API per default. Non è una vulnerabilità diretta, ma la divulgazione della versione aiuta gli attaccanti a prendere di mira problemi noti. Non c'è un'opzione integrata per nasconderla, ma il tuo reverse proxy può rimuovere gli header di risposta. In Nginx:
proxy_hide_header X-Powered-By;
Come collegare l'app mobile Immich per il backup automatico?
Installa l'app Immich dall'App Store (iOS) o Google Play (Android). Al primo avvio, inserisci l'URL del tuo server (https://photos.example.com) e accedi con le tue credenziali admin. L'app ti chiede di attivare il backup automatico.
Configurare il backup automatico
- Apri l'app, tocca il tuo avatar in alto a destra, poi Backup Settings.
- Attiva Background Backup. Su iOS, attiva anche Background App Refresh nelle impostazioni di sistema. Su Android, disabilita l'ottimizzazione della batteria per Immich così il sistema non la chiude.
- Scegli quali album salvare. Per default, Immich salva il rullino fotografico. Puoi aggiungere altri album (screenshot, immagini WhatsApp) dalla schermata di selezione degli album.
- Attiva Cellular Backup solo se il tuo piano mobile lo permette. Upload video grandi possono consumare diversi GB.
Primo test di backup
Scatta una foto, apri l'app Immich e trascina verso il basso per aggiornare. La foto dovrebbe apparire nella timeline in pochi secondi quando sei su Wi-Fi. L'indicatore di stato del backup nell'app mostra un segno di spunta verde quando tutte le foto sono sincronizzate.
Dal tuo VPS, puoi confermare che gli upload arrivano:
ls /opt/immich/data/upload/
Vedrai una directory con il nome del tuo ID utente contenente i file caricati.
Quanto storage serve a Immich per foto?
La pianificazione dello storage su un VPS conta più che su un NAS perché non puoi semplicemente aggiungere un altro disco. Ecco numeri reali basati su librerie fotografiche tipiche da smartphone.
Storage per tipo di foto
| Formato | Dimensione media | Note |
|---|---|---|
| Smartphone JPEG | 3-5 MB | Formato più comune |
| HEIC (iPhone) | 2-3 MB | Default Apple da iPhone 7 |
| RAW (reflex) | 25-50 MB | Fotocamere professionali |
| Video smartphone (1080p) | ~150 MB/min | Varia per codec |
| Video smartphone (4K) | ~400 MB/min | H.265 risparmia ~40% |
Storage totale per dimensione della libreria
Questa tabella usa JPEG da smartphone a 4 MB di media, più l'overhead di Immich (thumbnail, transcodifiche, database).
| Dimensione libreria | Foto grezze | Thumbnail (~15%) | DB | Totale |
|---|---|---|---|---|
| 10.000 foto | 40 GB | 6 GB | 1 GB | ~47 GB |
| 25.000 foto | 100 GB | 15 GB | 1,5 GB | ~117 GB |
| 50.000 foto | 200 GB | 30 GB | 2 GB | ~232 GB |
| 100.000 foto | 400 GB | 60 GB | 3 GB | ~463 GB |
| 200.000 foto | 800 GB | 120 GB | 4 GB | ~924 GB |
Se la tua libreria include video, moltiplica le necessità di storage di conseguenza. Una libreria con il 10% di contenuti video (per numero di file) può raddoppiare il fabbisogno di storage perché i video sono 30-100 volte più grandi per file rispetto alle foto.
Quando aggiungere più storage
Su un VPS Virtua, puoi collegare volumi di block storage aggiuntivi quando il disco principale si riempie. Monta il volume e punta UPLOAD_LOCATION su di esso. Per librerie sopra i 500 GB, considera storage esterno compatibile S3. Immich lo supporta attraverso la sua configurazione di storage, scaricando i media su object storage mantenendo database e thumbnail in locale.
Monitora l'uso del disco con un semplice controllo cron:
df -h /opt/immich/data
Imposta un allarme quando l'utilizzo supera l'80%. Un disco pieno corrompe il database PostgreSQL e può rendere la tua istanza Immich irrecuperabile senza un backup.
La funzione «Free Up Space» dalla v2.5
Immich v2.5+ include un pulsante «Free Up Space» nell'app mobile. Dopo che le foto sono state salvate sul server, l'app può cancellare le copie locali dal telefono per liberare spazio. Vengono rimossi solo i file confermati come caricati e non presenti nel cestino di Immich. Funziona sia su iOS che su Android.
Come funziona il machine learning di Immich senza GPU?
Le funzionalità ML di Immich (riconoscimento facciale, ricerca intelligente via CLIP e rilevamento oggetti) girano su CPU per default. Nessuna GPU necessaria. Il container immich-machine-learning carica i modelli in RAM e processa le foto in background senza bloccare upload o navigazione.
Su un VPS a 4 core con 8 GB di RAM, ecco i tempi di elaborazione approssimativi per la scansione iniziale:
| Dimensione libreria | Rilevamento facciale | Indicizzazione CLIP | Totale (sequenziale) |
|---|---|---|---|
| 1.000 foto | ~15 min | ~20 min | ~35 min |
| 10.000 foto | ~2,5 ore | ~3,5 ore | ~6 ore |
| 50.000 foto | ~12 ore | ~17 ore | ~29 ore |
Sono costi una tantum. Dopo la scansione iniziale, i nuovi upload vengono elaborati in pochi secondi. Il container ML gira a bassa priorità e non blocca gli upload o la navigazione mentre lavora sulla coda.
Selezione dei modelli
Immich usa due modelli ML principali:
- Riconoscimento facciale: rileva e raggruppa i volti nella tua libreria. Si esegue automaticamente a ogni upload.
- CLIP (ricerca intelligente): indicizza le foto per contenuto così puoi cercare «tramonto» o «cane in spiaggia» senza tag. Usa più RAM del riconoscimento facciale.
Entrambi i modelli si caricano in RAM quando servono per la prima volta e si scaricano dopo 5 minuti di inattività (MACHINE_LEARNING_MODEL_TTL=300 per default). Su un VPS con memoria limitata, puoi ridurre questo valore per liberare RAM più velocemente:
# In .env
MACHINE_LEARNING_MODEL_TTL=60
Ricrea il container dopo aver modificato le variabili d'ambiente (riavviare non basta):
docker compose up -d --force-recreate immich-machine-learning
Allocazione RAM per componente
| Componente | Uso RAM (VPS 8 GB) | Uso RAM (VPS 4 GB) |
|---|---|---|
| immich-server | ~500 MB | ~500 MB |
| immich-machine-learning | ~1,5-2 GB | disattivato |
| PostgreSQL | ~500 MB-1 GB | ~500 MB |
| Redis (Valkey) | ~50 MB | ~50 MB |
| OS + overhead Docker | ~1 GB | ~1 GB |
| Margine disponibile | ~3-4 GB | ~2 GB |
Come disattivare ML per risparmiare risorse su un VPS piccolo?
Se hai un VPS da 4 GB o vuoi risparmiare risorse, rimuovi o commenta il servizio immich-machine-learning da docker-compose.yml:
cd /opt/immich
Modifica docker-compose.yml e commenta (o elimina) l'intero blocco del servizio immich-machine-learning. Poi riavvia:
docker compose up -d
Perdi riconoscimento facciale, ricerca intelligente e rilevamento oggetti. Upload di foto, navigazione, condivisione e gestione album funzionano normalmente. Puoi riattivare ML più tardi decommentando il servizio e riavviando.
Come fare il backup del database e delle foto di Immich?
Fai il backup di due cose: il database PostgreSQL con pg_dump e la directory di upload con rsync. Pianifica entrambi con cron. Non usare rsync --delete sulla destinazione del backup perché una corruzione sulla sorgente si propagherebbe al tuo backup. Conserva almeno una copia fuori dal server. Testa periodicamente la tua procedura di ripristino.
Backup del database
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
Backup della directory di upload
rsync -a --info=progress2 \
/opt/immich/data/ \
/mnt/backup/immich-data/
Salta thumbnail e video transcodificati per risparmiare spazio. Si rigenerano automaticamente:
rsync -a --info=progress2 \
--exclude='thumbs/' \
--exclude='encoded-video/' \
/opt/immich/data/ \
/mnt/backup/immich-data/
Automatizzare con cron
Crea uno script di backup:
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
Pianificalo per le 3:00 di notte (dopo il backup interno di Immich alle 2:00):
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/immich/backup.sh >> /var/log/immich-backup.log 2>&1") | crontab -
Backup off-site
Per una vera strategia di backup 3-2-1, copia i backup fuori dal server usando rclone verso qualsiasi provider di storage compatibile S3:
rclone sync /mnt/backup/immich remote:immich-backup --transfers 4
Consulta la documentazione del tuo provider di storage per la configurazione di rclone.
Testare il ripristino
Un backup che non hai testato non è un backup. Ecco la procedura di ripristino:
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
Dopo il ripristino, accedi all'interfaccia web. Sfoglia la tua timeline e conferma che le foto si caricano. Se mancano i thumbnail (perché li hai esclusi dal backup), vai su Administration > Job Queues e avvia Generate Thumbnails.
Come aggiornare Immich in sicurezza?
Immich segue il versionamento semantico e pubblica frequentemente. Alcune release includono migrazioni del database. Il downgrade dopo un aggiornamento non è supportato. Serve quindi un workflow di aggiornamento disciplinato.
Procedura di aggiornamento passo-passo
-
Leggi il changelog. Controlla la pagina delle release per breaking change prima di fare pull di qualsiasi cosa.
-
Fai il backup del database. Esegui lo script di backup o un
pg_dumpmanuale come mostrato sopra. Non saltare questo passaggio. -
Aggiorna il pin di versione. Modifica
/opt/immich/.enve cambiaIMMICH_VERSIONalla nuova versione:
# 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
- Pull e riavvio.
cd /opt/immich
docker compose pull
docker compose up -d
- Controlla i log.
docker compose logs -f --tail=100
Cerca messaggi di migrazione e conferma che il server si avvia senza errori. Le migrazioni del database si eseguono automaticamente all'avvio.
- Pulisci le vecchie immagini.
docker image prune -f
Rollback
Se qualcosa si rompe, non puoi semplicemente tornare alla versione precedente perché il database potrebbe essere migrato. Ripristina invece dal backup del database pre-aggiornamento:
- Ferma lo stack:
docker compose down -v - Ripristina il database dal backup (vedi la sezione ripristino sopra)
- Rimetti
IMMICH_VERSIONalla versione precedente in.env - Avvia lo stack:
docker compose up -d
Ecco perché fai il backup prima di ogni aggiornamento.
Come importare foto da Google Takeout in Immich?
Il modo più semplice per importare un'esportazione di Google Photos è immich-go, uno strumento della community che legge direttamente i file ZIP di Google Takeout. Preserva la struttura degli album, le date e i metadati GPS dai file JSON sidecar.
Scarica immich-go sulla tua macchina locale (non sul VPS). Genera una chiave API in Immich: clicca sul tuo 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
Esegui prima un dry run per vedere cosa verrà importato:
immich-go upload from-google-photos \
--server=https://photos.example.com \
--api-key=your-api-key \
--dry-run \
/path/to/takeout-*.zip
Lo strumento deduplica per checksum. Se esegui l'importazione due volte, nulla viene caricato una seconda volta.
Per importazioni più piccole (meno di qualche migliaio di foto), usa l'interfaccia web di Immich. Trascina i file nella vista timeline o clicca il pulsante di upload. L'uploader web gestisce i batch ma è più lento di immich-go per librerie grandi.
Montaggio di libreria esterna
Se le tue foto sono già sul filesystem del VPS (da un backup o migrazione precedente), puoi montarle come libreria esterna anziché ricaricarle. Aggiungi il percorso come volume in docker-compose.yml sotto immich-server:
volumes:
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
- /mnt/photos:/mnt/photos:ro
Poi nell'interfaccia web di Immich, vai su Administration > External Libraries e aggiungi /mnt/photos come percorso della libreria. Immich indicizza i file in loco senza copiarli. Il flag :ro mantiene il mount in sola lettura così Immich non può modificare i tuoi originali.
Risoluzione problemi
Il container si riavvia continuamente
Controlla i log del container specifico:
docker compose logs immich-server --tail=50
docker compose logs database --tail=50
Cause comuni: DB_PASSWORD errato nel .env (container e database non concordano), RAM insufficiente (OOM killer), o disco pieno.
Gli upload falliscono silenziosamente
Quasi sempre è un limite di dimensione del corpo della richiesta del reverse proxy. Controlla la configurazione del proxy per client_max_body_size (Nginx) o equivalente. Caddy non ha un limite predefinito. I valori predefiniti di Traefik variano per versione.
I modelli ML non si caricano
Il container ML scarica i modelli al primo avvio. Se il tuo VPS ha banda limitata o il download è stato interrotto, i modelli potrebbero essere corrotti. Rimuovi il container, cancella il volume di cache dei modelli e ricrealo:
docker compose rm -sf immich-machine-learning
docker volume rm immich_model-cache
docker compose up -d immich-machine-learning
Le foto si vedono ma i thumbnail sono rotti
Rigenera i thumbnail dal pannello admin: Administration > Job Queues > Generate Thumbnails > Start.
Errori di connessione al database dopo il ripristino
Se vedi errori relation already exists o foreign key constraint violated durante un ripristino, il database non era completamente pulito prima dell'importazione. Ferma tutti i container, cancella la directory DB_DATA_LOCATION, ricrea il container postgres, attendi 10 secondi per l'inizializzazione, poi esegui di nuovo il ripristino.
Consultare i log
Tutti i log di Immich passano attraverso il driver di logging di Docker:
docker compose logs -f
Per un servizio specifico:
docker compose logs database -f
docker compose logs immich-machine-learning -f
Filtrare solo gli errori:
docker compose logs immich-server 2>&1 | grep -i error
Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto è un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta è vietata.
Pronto a provare?
Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.
Vedi piani VPS