Featured image
Info

Dal Container di Test al Deploy Reale Link to heading

Nel precedente articolo abbiamo configurato Proxmox, creato un container LXC di test e installato Docker. Ora è arrivato il momento di fare sul serio: creare il container dedicato per Immich e configurare lo storage esterno definitivo.

Info
A differenza di altri gestori foto, Immich mantiene la struttura originale delle foto su filesystem. Questo significa che i miei file rimangono accessibili e portabili - se domani decidessi di migrare a un’altra soluzione, ho sempre le mie cartelle organizzate pronte per il trasferimento.

Configurazione Storage Esterno Link to heading

Nell’articolo precedente abbiamo accennato alla strategia di separare sistema e dati. Ora implementiamo concretamente questa separazione configurando il disco esterno hermes.

Setup del Disco Esterno Link to heading

Colleghiamo l’SSD esterno da 256GB al mini PC e procediamo con la configurazione completa:

# Dall'HOST PROXMOX - verificare dischi disponibili
lsblk

# Output atteso - il nuovo disco dovrebbe apparire come /dev/sda
# sda                            8:0    0 238.5G  0 disk
# nvme0n1                      259:0    0 238.5G  0 disk (disco sistema)

Formattazione e Preparazione Link to heading

# Dall'HOST PROXMOX

# Se il disco ha già dati, pulirlo
wipefs -a /dev/sda

# Creare partizione Linux
echo "n
p
1


w" | fdisk /dev/sda

# Formattare con ext4
mkfs.ext4 -F /dev/sda1

# Etichetta per riconoscimento
e2label /dev/sda1 hermes

Configurazione Storage Condiviso hermes Link to heading

Configuriamo il disco hermes come Directory Storage in Proxmox per condividerlo tra i container dell’homelab.

# Dall'HOST PROXMOX - non dal container!

# Creare directory di mount
mkdir -p /mnt/hermes

# Montare il disco
mount /dev/sda1 /mnt/hermes

# Verificare che sia montato correttamente
df -h /mnt/hermes

# Dovrebbe mostrare qualcosa come:
# /dev/sda1    222G  xxx  xxx  x% /mnt/hermes
# NON: /dev/mapper/pve-root

Aggiungere Storage hermes a Proxmox Link to heading

Aggiungiamo il disco come Directory Storage in Proxmox:

Via Interfaccia Web Link to heading

  1. DatacenterStorageAddDirectory
  2. ID: hermes
  3. Directory: /mnt/hermes
  4. Content: Selezionare Container (VZDump backup files sarà disponibile automaticamente)
  5. Enable: ✓ Enabled

directoryimmich

Rendere Mount Permanente Link to heading

# Dall'HOST PROXMOX

# Ottenere UUID del disco
UUID=$(blkid /dev/sda1 -s UUID -o value)
echo "UUID trovato: $UUID"

# Aggiungere al fstab per mount automatico al riavvio
echo "UUID=$UUID /mnt/hermes ext4 defaults 0 2" >> /etc/fstab

# Testare mount dal fstab
umount /mnt/hermes && mount -a

# Verificare che funzioni
df -h /mnt/hermes

Preparare Struttura Directory Link to heading

# Dall'HOST PROXMOX

# Creare directory per i servizi
mkdir -p /mnt/hermes/{immich,navidrome,shared}

# Creare sottodirectory per Immich
mkdir -p /mnt/hermes/immich/{upload,database,redis-data}

# Verificare struttura
ls -la /mnt/hermes/

# Output dovrebbe mostrare:
# drwxr-xr-x immich/
# drwxr-xr-x navidrome/
# drwxr-xr-x shared/
Info
Vantaggi Directory Storage: Proxmox gestisce automaticamente permessi e condivisibilità tra container. Lo storage è facilmente espandibile e ogni container vede solo la propria directory tramite mount point dedicati.

Mount Point Immich su hermes Link to heading

Aggiungere il mount point specifico per Immich al container, puntando alla sottodirectory immich dello storage condiviso:

Via Interfaccia Web Proxmox Link to heading

  1. Selezionare il container docker-immich
  2. ResourcesAddMount Point
  3. Mount Point ID: mp0 (viene assegnato automaticamente)
  4. Storage: hermes
  5. Disk size: 32 GB (dimensione iniziale, espandibile)
  6. Path in Container: /immich (dove sarà montato nel container)
  7. Backup: ✓ (raccomandato per i dati)
  8. Enable: NOT Enabled

mountpointimmich

Setup Docker nel Container Immich Link to heading

Installazione Docker nel nuovo container dedicato:

# Entrare nel container dedicato
pct enter 102

# Setup Docker (stesso processo del container di test)
apt update && apt install -y curl
curl -fsSL https://get.docker.com | sudo sh
usermod -aG docker $USER

# Verificare installazione
docker --version

# Riavviare per applicare gruppo docker
exit
pct reboot 102
pct enter 102

Verifica Mount Point Link to heading

# Verificare che il mount point sia disponibile
df -h
ls -la /immich/

# Testare scrittura
touch /immich/test-write
ls -la /immich/test-write
rm /immich/test-write

# Creare directory necessarie per Immich
mkdir -p /immich/{upload,database,redis-data}

Setup Immich con Guida Ufficiale Link to heading

Seguiamo la guida ufficiale di Immich per Docker Compose, adattandola al nostro storage esterno.

Step 1 - Download File Necessari Link to heading

# Creare directory di lavoro
mkdir -p /root/immich-app
cd /root/immich-app

# Scaricare docker-compose.yml ufficiale
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

# Scaricare file .env di esempio
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

# Verificare che i file siano stati scaricati
ls -la

Step 2 - Configurazione File .env Link to heading

Modifichiamo il file .env per il nostro setup con storage esterno:

# Editare il file .env
nano .env

Configurazione .env personalizzata:

# Storage esterno per foto e backup
UPLOAD_LOCATION=/immich/upload

# Database su storage esterno
DB_DATA_LOCATION=/immich/database

# Timezone (decommentare e personalizzare)
TZ=Europe/Rome

# Versione Immich (pinned alla release)
IMMICH_VERSION=release

# Password database (cambiare con una sicura!)
DB_PASSWORD=immich_password_sicura_123

# Valori di default (non modificare)
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
Warning
Password Database: Cambiare DB_PASSWORD con una password sicura usando solo caratteri A-Za-z0-9. Usare pwgen o generatori online per creare password casuali.

Step 3 - Verifica Docker Compose Link to heading

Il file docker-compose.yml scaricato è quello ufficiale e aggiornato. Per il nostro setup, dovremmo verificare che punti ai path corretti:

# Verificare che il docker-compose.yml usi le variabili .env
cat docker-compose.yml | grep -A5 -B5 "UPLOAD_LOCATION\|DB_DATA_LOCATION"
Info
Docker Compose Ufficiale: Il file scaricato da GitHub usa automaticamente le variabili definite nel .env per configurare i volumi. Non è necessario modificare manualmente il YAML.

Configurazioni Avanzate Link to heading

Per personalizzazioni aggiuntive, consultare la documentazione delle variabili ambiente di Immich.

Configurazioni Comuni Link to heading

# Nel file .env, aggiungere configurazioni opzionali:

# Transcoding video (per SSD esterno)
# FFMPEG_TRANSCODE=all

# Machine Learning (riconoscimento facciale)
# MACHINE_LEARNING_ENABLED=true

# Log level per debug
# LOG_LEVEL=verbose

Step 4 - Preparazione Directory Storage Link to heading

# Nel container, verificare che lo storage esterno sia disponibile
df -h /immich/

# Dovrebbe mostrare ~47GB disponibili (il disco hermes)
# Se mostra pochi GB, verificare il mount point dall'host Proxmox

# Creare directory per Immich
mkdir -p /immich/{upload,database}

# Verificare spazio e permessi
ls -la /immich/
id  # Verificare gruppo docker

Step 5 - Primo Avvio Link to heading

Seguendo la guida ufficiale, avviamo Immich:

# Dalla directory del progetto
cd /root/immich-app

# Avvio con Docker Compose (comando ufficiale)
docker compose up -d

# Verifica stato container
docker compose ps

# Controllo log per eventuali errori
docker compose logs immich-server

immichwelcome

Step 6 - Health Check e Troubleshooting Link to heading

# Verificare che tutti i container siano healthy
docker compose ps

# Se ci sono errori di health check con Docker Engine < v25
# Commentare la riga start_interval nel docker-compose.yml
sed -i 's/start_interval/#start_interval/' docker-compose.yml
Tip
Per troubleshooting avanzato e configurazioni aggiuntive, consulta sempre la documentazione ufficiale di Immich.
Tip
Il primo avvio richiederà diversi minuti per scaricare le immagini e inizializzare il database. Il container machine-learning potrebbe impiegare tempo extra per scaricare i modelli AI.

Accesso e Prima Configurazione Link to heading

Una volta avviato, Immich sarà accessibile su http://IP_CONTAINER:2283.

Setup iniziale:

  1. Creare account admin
  2. Configurare librerie foto
  3. Installare app mobile test connessione
  4. Test upload di alcune foto per verificare funzionamento

Prossimi Passi Link to heading

Con Immich operativo e le prime foto caricate, l’homelab inizia a prendere vita. Il primo servizio è online e funzionante, ma la strada è ancora lunga!

I prossimi articoli della serie copriranno:

  • Backup automatici del container e dei dati
  • Test distruggi container e ripristino dei backup
  • Migrazione da iCloud Foto ad Immich

Continua con: Homelab: Setup Navidrome per Streaming Musicale Privato