Immich: Tu propio "Google Fotos"

Docker 27 de abr. de 2026

Immich es una solución totalmente gratuita y sin ningun tipo de limitación para que montes tu propia nube para guardar y gestionar tus fotos, es totalmente funcional y una alternativa real a Google Fotos.

Permite que las fotos y videos que realices con tu movil se guarden en tu propio servidor.

La mejor opción es instalarlo mediante docker en tu propio servidor de casa, puedes ver el procedimiento completo en su documentación:

Docker Compose [Recommended] | Immich
Docker Compose is the recommended method to run Immich in production. Below are the steps to deploy Immich with Docker Compose.

Instalar mediante Docker Compose

Además una vez instalado y configurado en tu propio servidor, lo ideal es instalar la aplicación para movil y sacarle todo el rendimiento.

Demo on-line de Immich


La aplicación móvil es gratuita y no tiene publicidad

Immich - Apps on Google Play
This is a client app for the self-hostable Immich Server

Aplicación para Google Play

Immich App - App Store
Download Immich by FUTO Computing on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Immich.

Aplicación en la App Store

Sin embargo este artículo además de mostrarte esta magnifica solución alternativa a Google Fotos, es para mostrar como solucionar el error en el procesamiento y detección de caras.

Error de Detección de Caras

He visto que mucha gente se queja de que el proceso de detección de caras les falla.
En las pruebas locales que realicé funcionaba correctamente, pero al ponerlo en producción fallaba tal y como comentaban el resto de usuarios.

Lo primero que he realizado ha sido revisar los logs del contenedor immich-server para verlos, simplemente ejecuta el comando docker logs immich-server a mi me aparecían lo siguientes errores:

Error: Machine learning request '{"facial-recognition":{"detection":{"modelName":"buffalo_l","options":{"minScore":0.5}},"recognition":{"modelName":"buffalo_l"}}}' failed for all URLs
    at MachineLearningRepository.predict (/usr/src/app/server/dist/repositories/machine-learning.repository.js:117:15)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async MachineLearningRepository.detectFaces (/usr/src/app/server/dist/repositories/machine-learning.repository.js:126:26)
    at async PersonService.handleDetectFaces (/usr/src/app/server/dist/services/person.service.js:244:52)
    at async JobService.onJobRun (/usr/src/app/server/dist/services/job.service.js:51:30)
    at async EventRepository.onEvent (/usr/src/app/server/dist/repositories/event.repository.js:91:13)
    at async /usr/src/app/server/node_modules/.pnpm/bullmq@5.71.0/node_modules/bullmq/dist/cjs/classes/worker.js:570:32
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://immich-machine-learning:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://immich-machine-learning:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://172.28.0.2:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM    WARN [Microservices:MachineLearningRepository] Machine learning request to "http://172.28.0.2:3003" failed: fetch failed
[Nest] 7  - 04/27/2026, 8:09:55 PM   ERROR [Microservices:{"id":"d7da13f6-d3d7-4e70-afa1-0c4b69e00e61"}] Unable to run job handler (AssetDetectFaces): Error: Machine learning request '{"facial-recognition":{"detection":{"modelName":"buffalo_l","options":{"minScore":0.5}},"recognition":{"modelName":"buffalo_l"}}}' failed for all URLs

Luego he realizado una revisión de la configuración del servidor (via web) con el usuario administrador y veo la siguiente configuración en la parte de "aprendizaje automático":

Aunque en la configuración de los servidores tengo creada su propia red para conectar internamente todos los contenedores, he comprobado que el problema es que no sabe resolver el nombre del servidor de aprendizaje.

Para comprobar si es realmente un problema de resolución de nombres he averiguado la ip del contenedor para incluir esa IP, se averigua facilmente con el siguiente comando:

docker inspect immich_machine_learning

Localiza la línea que pone IPAddress y apunta la dirección IP


Luego vía web pulsa sobre el botón + Añadir URL incluye esa IP en la configuración escribiendo:
http://172.28.0.2:3003

Vuelve a revisar los logs y verás que comienza a funcionar el procesamiento:

[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:MachineLearningRepository~vq17wdpu] Machine learning server became healthy (http://172.28.0.2:3003).
...
[Nest] 7  - 04/27/2026, 8:10:41 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 0e39b92b-30e5-4388-90b1-094680f2ab52
[Nest] 7  - 04/27/2026, 8:10:46 PM     LOG [Microservices:PersonService] Detected 4 new faces in asset 498858e7-73c2-47e4-be5a-97b8002da160
...

Problema detectado, pero como la IP del contenedor puede modifcarse hay que solucionar el problema de la resolución del nombre.
Para no arrastrar configuraciones de prueba, eliminamos la URL que acabamos de incluir que tenía la IP fijada.

La solución al problema de las caras

La solución es realmente sencilla, tan sólo hay que incluir la línea hostname: immich-machine-learning
en la parte del contenedor de aprendizaje dentro del fichero docker-compose.yml

El fichero deberá quedar así:

...

  immich-machine-learning:
    container_name: immich_machine_learning
    hostname: immich-machine-learning
    image: ghcr.io/immich-app/immich-machine-learning:v2
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    networks:
      red-immich: null
    restart: always

...

Ahora si revisas de nuevo los logs verás que funciona todo correctamente sin errores:

...
[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:MachineLearningRepository~vq17wdpu] Machine learning server became healthy (http://immich-machine-learning:3003).
[Nest] 25  - 04/27/2026, 8:10:00 PM     LOG [Api:SystemConfigService~0x797efo] LogLevel=log (set via system config)
[Nest] 7  - 04/27/2026, 8:10:00 PM     LOG [Microservices:SystemConfigService] LogLevel=log (set via system config)
...
[Nest] 7  - 04/27/2026, 8:25:03 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 1121a8d3-1e12-45b7-8e01-d9a9982a56b8
[Nest] 7  - 04/27/2026, 8:25:05 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 4cbc79b6-b605-4edf-b7e9-9c744e720aca
[Nest] 7  - 04/27/2026, 8:25:14 PM     LOG [Microservices:PersonService] Detected 1 new faces in asset 1f630c0c-87c5-4d86-931d-18e75cb662c0
[Nest] 7  - 04/27/2026, 8:25:14 PM     LOG [Microservices:PersonService] Creating new person for face 4d71ab9a-bd70-4a6c-bd73-ae435fe2e936
[Nest] 7  - 04/27/2026, 8:25:15 PM     LOG [Microservices:PersonService] Creating new person for face 02f60e7e-8802-461e-9d50-0ac6d00c092d
[Nest] 7  - 04/27/2026, 8:25:15 PM     LOG [Microservices:PersonService] Creating new person for face 9c463892-3ba9-4c84-9c79-81491090f259
...

En cuento termine de procesar las fotos verás que las caras ha sido reconocidas correctamente:

Reconocimiento facial correcto en Immich

Enhorabuena, ya tienes totalmente configurado el procesamiento de caras en Immich.


Solución al error "Servidor Desconocido / Desconectado"

Este error indica que el funcionamiento de Websockets en tu proxy no está configurado correctamente.

Puedes leerte la forma de configurar tu reverse proxy para quitar ese mensaje de error:

Reverse Proxy | Immich
Users can deploy a custom reverse proxy that forwards requests to Immich. This way, the reverse proxy can handle TLS termination, load balancing, or other advanced features. All reverse proxies between Immich and the user must forward all headers and set the Host, X-Real-IP, X-Forwarded-Proto and X-Forwarded-For headers to their appropriate values. Additionally, your reverse proxy should allow for big enough uploads. By following these practices, you ensure that all custom reverse proxies are fully compatible with Immich.

En el caso de que usen Nginx (y docker) los cambios a incluir en tu fichero .conf se deben de realizar en dos zonas, la zona de server y la zona de location

  • En server
    # websocket
    proxy_http_version 1.1;
    proxy_redirect     off;
  • En location
    # websocket
    proxy_set_header   Upgrade    $http_upgrade;
    proxy_set_header   Connection "upgrade";

La configuración que yo tengo aplicada y me funciona correctamente es:

# Config para Immich 
server {
    if ($host = immich.midominio) {
        return 301 https://$host$request_uri;
    } 

  server_name immich.midominio;
  listen      80;
  listen [::]:80;
  return 301 https://$host$request_uri;
}

server {
  access_log /etc/nginx/conf.d/logs/immich-access.log;
  server_name immich.midominio;
  listen      443;
  listen [::]:443;

    # Permitir subida de ficheros grandes
    client_max_body_size 50000M;

    # websocket
    proxy_http_version 1.1;
    proxy_redirect     off;
  
  location / {
    include /etc/nginx/conf.d/includes/proxy.conf;
    proxy_pass http://immich-server:2283;
    # websocket
    proxy_set_header   Upgrade    $http_upgrade;
    proxy_set_header   Connection "upgrade";
  }
 
  ssl_certificate /etc/letsencrypt/live/immich/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/immich/privkey.pem; # managed by Certbot
}

Agradecimiento al Software Libre

La verdad es que me ha sorprendido muy gratamente lo bien que funciona y que la empresa además tenga liberado todo el código:

GitHub - immich-app/immich: High performance self-hosted photo and video management solution.
High performance self-hosted photo and video management solution. - immich-app/immich

Por mi parte he contribuido pagando por su trabajo, escogiendo la opción de Server son sólo 100 euros como reconocimiento a su labor y que sigan desarrollandolo.

"Licencia" de Servidor de Immich


NOTA: El pagar no activa nada extra en el servidor, y el no pagar tampoco restringe su uso en nada.

Buy Immich
Buy Immich to support the development effort

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux