Entrada

Immich

Immich

La idea surge de no cargar tanto el nuc de casa, o tú raspberry pi, cuando instalas immich en tus servidores puesto que seguramente tengas en casa un equipo con mayor rendimiento.

En mi caso voy a usar un portátil para hacer el procesado de la detección de las caras en él, el nuc tendrá la parte central de immich y el NAS es el que contiene los originales de las fotos.

Asi que vamos a aclarar ips y configuraciones que son necesarias para que todo funcione.

El NAS tiene la ip 131 en mi red y en la carpeta compartida Copia_Fotos\Fotos\2005 es donde estan guardadas todas las fotos de ése año.

El NUC tiene la ip 129 en mi red y en la carpeta /home/pi/docker/immich es donde voy a colocar el docker-compose.yml

El PORTATIL tiene la ip 192 en mi red y tiene un windows 11 instalado y con Docker Desktop voy a hacer correr el docker del reconocimiento facial. En la ruta C:\Users\Alberto\immich voy a colocar el docker-compose.yml necesario.

Configuración específica para cada equipo

NAS

No requiere nada especial nada mas que tener la carpeta compartida con las fotos que van a ser la biblioteca externa, en mi caso Copia_Fotos\Fotos\2005.

NUC

En la ruta /home/pi/docker/immich vamos a colocar dos ficheros que son docker-compose.yml y el fichero .env

El contenido del fichero docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
name: immich-nuc

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - ${EXTERNAL_PATH}:/usr/src/app/external:ro
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - 2283:2283
    depends_on:
      - redis
      - database
    environment:
      - DB_HOSTNAME=immich_postgres
      - REDIS_HOSTNAME=immich_redis
      - MACHINE_LEARNING_URL=http://192.168.1.192:3003 #Ruta al pc que hara de ML
      - VECTOR_INDEX_URL=http://192.168.1.192:3002 #Ruta al pc que hara de ML
      - ML_ENDPOINT=http://192.168.1.192:3003 #Ruta al pc que hara de ML
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always

  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: '--data-checksums'
      DB_STORAGE_TYPE: 'HDD'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always

El fichero .env que debe quedar así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/copia_fotos/Subida   #Ruta donde subir ficheros yo no lo uso 
EXTERNAL_PATH=/mnt/copia_fotos/Fotos/2005 #Ruta de donde coge las fotos 

# The location where your database files are stored
DB_DATA_LOCATION=./postgresql/data

IMMICH_LOG_LEVEL=error
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Europe/Madrid

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

REDIS_HOSTNAME=immich_redis

Portatil

También tiene un fichero docker-compose.yml que sólo contendrá la parte referente al machine learning y quedaría así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: immich_remote_ml

services:
  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.ml.yml
    #   service: # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    restart: always
    ports:
      - 3003:3003

volumes:
  model-cache:

Y el fichero .env que necesita es similiar al que tenemos en el nuc:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/copia_fotos/Subida   #Ruta donde subir ficheros yo no lo uso 
EXTERNAL_PATH=/mnt/copia_fotos/Fotos/2005 #Ruta de donde coge las fotos 

# The location where your database files are stored
DB_DATA_LOCATION=./postgresql/data

IMMICH_LOG_LEVEL=error
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Europe/Madrid

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

REDIS_HOSTNAME=immich_redis

Una vez que tenemos todo preparado toca levantar los docker y el orden a seguir es primero se levanta el del portatil, que al ser windows basta con arrancar el programa docker e iniciarlo gráficamente.

Despues del portátil le toca el turno al nuc y levantamos con un docker compose up -d en la carpeta en la que tenemos el docker-compose.yml

La primera vez que se accede a la ruta de acceso a immich (http://192.168.1.192:2283) pide crear el usuario y la contraseña dando también una dirección de correo electrónico.

Antes de configurar la biblioteca externa es conveniente decirle a immich que el portátil será el que procese las caras para ello hay que ir a la parte de administración haciendo clic en nuestro nombre/avatar de arriba a la derecha, administración y en Ajustes buscamos Configuración de aprendizaje automático y en la URL indicamos la url de nuestro portátil http://192.168.1.192:3003

La ruta original que pone immich es http://immich-machine-learning:3003 y ahi es donde pondremos la nuestra. Quedaría como muestra la foto de abajo.

Immich ajustes para procesar las caras

Ahora vamos a configurar la ruta de la biblioteca externa una vez carga hay que ir a la sección bibliotecas externas. Rellenamos con /usr/src/app/external

Immich ajustes para indicar las bibliotecas externas

Y una vez está guardado hay que escanear la biblioteca, se puede hacer ahí mismo en Escanear todas las bibliotecas o ir a la zona de tareas y darle a volver a escanear bibliotecas externas.

Immich ajustes para indicar las bibliotecas externas

Una vez comienza el proceso el tiempo va a depender de la cantidad de fotos que se tengan que procesar pero siempre será más rápido haciéndolo así pues en mi caso el portátil es mucho más potente que el nuc, la raspberry o lo que tengáis en casa haciendo de servidor.

Espero que haya sido didáctico y se entienda bien el proceso pero si crees que hay algo que puede ser explicado mejor o que necesita una revisión por favor ponte en contacto conmigo alberto@papafriki.es y estaré encantado de ver como hacerlo más comprensible.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.