• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Docker Immich
#1
Hola

Voy describir como instalar vía docker un gestor muy bueno de gestión de imágenes y vídeos. Su nombre es Immich.

Sus funciones son muy similares a Google Photos pero con la gran ventaja de que el material lo tenemos bajo nuestro control que para eso tenemos nuestra nas de QNAP  Big Grin

Para usar este docker de immich, necesitamos tener una base de datos de postgresql y el docker de redis.
La base de postgresql puede ser una que ya estemos usando para otras cosas o bien usar una en exclusiva para este docker.

En este post voy a hacerlo mediante la creación de tres dockers:
-docker para redis
-docker para postgresql
-docker para immich

Podría hacerse mediante una configuración conjunta y unificada, pero voy a explicar como hacerlo mediante tres dockers diferenciados.
Para que los docker de redis y postgresql no tengan los puertos estándar o entren en conflicto con otros docker que hagan la misma función, he cambiado los puertos externos poniéndolos como espejo del que usa el docker internamente.

Hemos de crear un usuario nuevo en la nas al que he llamado "immich" y al que pondremos una clave larga y extraña (no va a ser usado por nadie en realidad) y le restringimos los privilegios de QTS y le permitimos accesos RW a la carpeta "DockerData" o la compartida que usemos para la persistencia de los datos.

Luego desde una consola obtenemos el PUID y PGID. 

Para hacerlo desde la consola escribimos "id immich" o bien vamos luego al panel de control de QTS y en privilegios, usuarios editamre os la propiedades de ese usuario.

Veremos algo similar a esto
   

El grupo será 100 por pertenecer a "Everyone"

Todas las operaciones la he realizado desde un usuario administrador.

1-Docker de Redis

Este es el mas sencillo de los dockers a desplegar.

Desde una consola lanzamos el siguiente comando:
Code:
docker run -d --name="immich-redis" --restart always -v /share/DockerData/immich/redis:/data -p 9736:6379 redis:latest

   

He puesto de nombre "immich-redis" para que cuando estemos  usando algún gestor de dockers tipo portainer los veamos junto con los otros dos que vamos a usar.

Al usar "-v /share/DockerData/immich/redis:/data" Se hace referencia a una carpeta compartida llamada DockerData para usarla como carpeta persistente en caso de apagar o eliminar el docker. Podemos cambiarla a otra carpeta según nuestra necesidades.

El puerto exterior del docker es el 9736. Si lo cambiamos debemos adaptar la cadena de creación del docker de Immich del punto 3.

2-Docker de PostgreSQL

Desde una consola lanzamos el siguiente comando:
Code:
docker run -d --name="immich-postgresql" --restart always -p 2345:5432 -e PUID=1003 -e PGID=100 -e POSTGRES_USER=fulano -e POSTGRES_PASSWORD=claveFulano -e POSTGRES_DB=immich -v /share/DockerData/immich/data:/var/lib/postgresql/data tensorchord/pgvecto-rs:pg14-v0.2.0

   

He puesto de nombre "immich-postgresql" para que cuando estemos  usando algún gestor de dockers tipo portainer los veamos junto con los otros dos que vamos a usar.

Con esta parte de la cadena "-e POSTGRES_USER=fulano -e POSTGRES_PASSWORD=claveFulano -e POSTGRES_DB=immich" indicamos el nombre, la clave y el nombre de la base de datos a usar. Si los modificamos, tendremos que adaptar la cadena de creación del docker principal de Immich.

Con "-v /share/DockerData/immich/data:/var/lib/postgresql/data" indicamos donde quedarán los datos persistentes. En nuestro caso en la carpeta compartida "DockerData" y dentro de esta en la subcarpeta "immich/data".

El puerto exterior del docker es el 2345. Si lo cambiamos debemos adaptar la cadena de creación del docker de Immich del punto 3.

3-Docker de Immich

Previo al lanzamiento del comando de creación hemos de saber la ip de la nas ya que hay que usarlo para acceder a los docker de redis y postgresql.

Desde una consola lanzamos el siguiente comando:
Code:
docker run -d --name="immich" --restart always -v /share/DockerData/immich:/config -v /share/DockerData/immich:/photos -p 1111:8080 -e PUID=1003 -e PGID=100 -e TZ=Europe/Madrid -e DB_HOSTNAME=192.168.X.Y -e DB_PORT=2345 -e DB_USERNAME=fulano -e DB_PASSWORD=claveFulano -e DB_DATABASE_NAME=immich -e REDIS_HOSTNAME=192.168.X.Y -e REDIS_PORT=9736 -e MACHINE_LEARNING_GPU_ACCELERATION=1 -e MACHINE_LEARNING_WORKERS=1 -e MACHINE_LEARNING_WORKER_TIMEOUT=120 ghcr.io/imagegenius/immich:latest

   

La descripción de los parámetros de creación son:
  • Al poner --name="immich" indicamos el nombre del docker
  • Al poner "-v /share/DockerData/immich:/config" indicamos la ruta persistente de la carpeta de configuración.
  • Al poner "-v /share/DockerData/immich:/photos" indicamos la ruta persistente de la carpeta donde immich deja las fotos que vayamos subiendo desde la app o la web
  • Con "-p 1111:8080" indicamos el puerto exterior que va a usar el docker. En el ejemplo 1111. Lo he cambiado ya que es muy posible que el 8080 lo tengamos ocupado por QTS.
  • Con "-e PUID=100X -e PGID=100" indicamos los datos de usuario de QTS que creamos anteriormente. Se obtiene ejecutando el comando "id immich".
  • Con "-e DB_USERNAME=fulano -e DB_PASSWORD=claveFulano -e DB_DATABASE_NAME=immich" indicamos lo datos de usuario, clave y nombre de la base de datos de postgresql. Deben coincidir con los que usamos en la creación del docker del punto 2.
  • Con "-e DB_HOSTNAME=192.168.X.Y -e DB_PORT=2345" indicamos la ip local de nuestra nas y el puerto que usa postgresql.
  • Con "-e REDIS_HOSTNAME=192.168.X.Y -e REDIS_PORT=9736" indicamos la ip de nuestra nas y el puerto que usa Redis.
  • Con "-e MACHINE_LEARNING_GPU_ACCELERATION=1 -e MACHINE_LEARNING_WORKERS=1 -e MACHINE_LEARNING_WORKER_TIMEOUT=120" indicamos varios parámetros para activar el procesado de imágenes.
  • Con "ghcr.io/imagegenius/immich:v1.123.0-ig354" obligo a usar una imagen concreta del docker. Si queremos que se use la última usaremos "ghcr.io/imagegenius/immich:latest"


Si tuviésemos en nuestra nas una carpeta con imágenes y la quisiéramos poder gestionar desde immich podemos agregarla en la cadena de definición del docker.
Por ejejmplo si la carpeta compartida de la nas "Imagenes" tiene fotos, añadiremos "-v /share/Imagenes:/mnt/media/imagenes:ro".

Con ro, indicamos que sólo tendremos lectura y evitamos el poder eliminar archivos desde immich. Eso si, el usuario "immich" de QTS ha de tener permisos de RO en la carpeta "Imagenes". Esto se hace desde el panel de control de QTS, en el apartado de usuarios.


Hemos de esperar a que los dockers están descargados, instalados y operativos.

Esto podemos comprobarlo con la orden "docker ps | grep immich" y nos debería devolver al menos tres dockers 

Para entrar a a web de immich escribiremos en nuestra navegador web "http://192.168.x.y:1111" acorde a la ip de nuestra nas y el puerto que usamos en la creación del docker immich.

Si todo ha ido bien, veremos la pantalla siguiente:

   

El primer inicio es algo mas lento que en posteriores arranques.
Esto es debido a las primeras configuraciones de immich.

Si he visto en varios reinicios que aun cuando la base de datos postgresql ya está operativa, el docker de Immich es como si no la enganchase.
Para hacer que la use he comprobado que si reiniciamos el docker de psotgresql, si lo hace (todavía no entiendo el motivo)

Para reiniciar el docker ejecutaremos el comando
Code:
docker restart immich-postgresql


La gestión de immich no es muy complicada y hay mucha información en internet.
Pero lo que si avisan es que no debemos usar en producción este docker ya que están depurándolo y que debemos tener copia de seguridad de las imágenes o videos que le pasemos.

Resumo un poco encima lo que podemos hacer con él y los primeros pasos.
-Creación del primer usuario administrador
-creación de mas usuarios
-configuración de avisos por correo electrónico usando un servidor de correo externo
-si lo publicamos a internet mediante un proxy inverso podemos compartir fotos o carpetas con personal externo (se puede poner clave de acceso. videncia y hacerlo RO)
-podemos agregar en modo lectura bibliotecas externas para que un usuario de Immich tenga ya en su entorno imágenes previas. Por ejemplo las de la carpeta imágenes de la nas.
-reconoce las ubicaciones de fotos según su información exif
-reconoce la cámara y parámetros usados durante la foto según la información exif
-hace un reconocimiento de caras, a las cuales podremos asociar un nombre. Esto puede tardar mucho si de inicio le introducimos muchas fotos.
-tiene app de móvil que permite muchas (no todas) las funciones de la web. Incluso la subida automática de las que hagamos con el móvil.
-permite hacer búsquedas según criterios anteriores (ubicación, participantes, ...)

Lo cierto es que es un programa que me ha sorprendido gratamente y os animo a probarlo.


Attached Files Image(s)
       
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#2
Excelente tutorial...lo único que echo de menos es ir un pasito más atrás para los que en mi caso, ni usamos las consola de comandos, ni sabemos gestionar dockers...
  Reply
#3
Hola

Para ir a la consola puedes usar en windows el programa putty descargable en https://www.chiark.greenend.org.uk/~sgtatham/putty/
Y luego sólo hay que copiar y pegar las tres cadenas que he puesto ( adaptadas a tu almacenamiento ).
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#4
Aupa Ganeko:

Se puede montar con MySQL??

Un saludo.

Joseba.
  Reply
#5
Hola
De momento no.
Aunque ya he visto peticiones para que lo haga.
Postgresql no tiene nada que envidiar a Mariadb.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#6
Eskerrik asko Ganeko.
Seguro que no le envidia en nada. Y acabaré montándolo, seguro.
Era solo por mantener todas las bases de datos bajo un mismo paraguas.

Un saludo.

Joseba
  Reply
#7
Hola

Soy de tu misma opinión ya que intento centralizar en la misma BBDD.

Pero en algunos casos no es posible.

También dependiendo de cómo trabajes, a veces interesa tener un motor de BBDD en exclusiva para un docker (para facilitar el traslado a otra máquina por ejemplo). Pudiendo darse en caso de tener varias postgresql dockerizadas simultáneas con puertos distintos.
Precisamente en este caso de Immich usó un puerto no convencional para redis y para postgresql. Así si tienes otra postgresql, no hay problemas de interferencias.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply




Users browsing this thread: 2 Guest(s)