--- title: "Cómo instalar Immich con Docker en Ubuntu 24.04" description: "Instala Immich con Docker Compose en Ubuntu 24.04, publícalo por HTTPS con Nginx, conecta la app móvil para subir fotos y programa copias de la base de datos." category: "Servidores de Medios y Streaming" language: es source: https://cubepath.com/es/docs/servidores-de-medios-y-streaming/immich-backup-de-fotos-self-hosted updated: 2026-09-25 --- # Cómo instalar Immich con Docker en Ubuntu 24.04 Immich es una aplicación autoalojada de fotos y vídeos con apps nativas para Android e iOS que suben automáticamente el carrete del móvil a tu servidor. Incluye línea de tiempo, álbumes compartidos, reconocimiento facial y búsqueda por contenido ("perro en la playa") mediante aprendizaje automático local. En este tutorial instalarás Immich con Docker Compose en Ubuntu 24.04, lo publicarás en un dominio con HTTPS, configurarás la app móvil y dejarás programadas las copias de seguridad. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS de 64 bits con al menos 4 núcleos y 8 GB de RAM (el mínimo oficial es de 6 GB), por ejemplo un VPS de CubePath. El servicio de aprendizaje automático es el que más memoria consume. - Un usuario no root con privilegios `sudo`. - Docker Engine y el plugin de Docker Compose instalados desde el repositorio oficial de Docker. - Espacio en disco para tu biblioteca. La base de datos debe ir en un disco local (SSD), nunca en un recurso de red como NFS o SMB. - Un dominio con un registro A apuntando a la IP del servidor, por ejemplo `fotos.tu_dominio`. ## Paso 1: Descargar los ficheros oficiales Immich publica en cada versión un `docker-compose.yml` y un fichero de entorno de ejemplo. Usa siempre esos ficheros en lugar de escribir el tuyo desde cero: los servicios y sus versiones cambian entre versiones. ```bash mkdir -p ~/immich-app cd ~/immich-app 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 ``` Comprueba que tienes los dos ficheros: ```bash ls -la ~/immich-app ``` El fichero de Compose define cuatro servicios: `immich-server` (API, web y trabajos en segundo plano), `immich-machine-learning` (reconocimiento facial y búsqueda inteligente), `redis` (cola de trabajos) y `database` (PostgreSQL con extensión de búsqueda vectorial). ## Paso 2: Configurar el fichero de entorno Genera una contraseña para la base de datos. Immich recomienda usar solo letras y números para evitar problemas de escapado: ```bash openssl rand -hex 16 ``` Edita el fichero `.env`: ```bash nano ~/immich-app/.env ``` Ajusta estas variables y deja el resto con su valor por defecto: ```ini # Carpeta donde se guardan las fotos y vídeos subidos UPLOAD_LOCATION=./library # Carpeta de los datos de PostgreSQL (disco local, nunca NFS/SMB) DB_DATA_LOCATION=./postgres # Zona horaria de los contenedores TZ=Europe/Madrid # Contraseña de la base de datos generada antes DB_PASSWORD=tu_contraseña_bd ``` La variable `IMMICH_VERSION` también está en este fichero. Déjala con el valor que trae: apunta a la versión principal actual y evita que un `pull` te lleve a una versión mayor con cambios incompatibles sin que lo decidas tú. `TZ` viene comentada en el ejemplo; quita el `#` al principio de la línea. Protege el fichero, ya que contiene la contraseña: ```bash chmod 600 ~/immich-app/.env ``` ## Paso 3: Limitar el puerto a localhost Por defecto, el servicio `immich-server` publica el puerto 2283 en todas las interfaces. Docker gestiona sus propias reglas de iptables, así que ese puerto quedaría abierto a internet aunque UFW no lo permita. Como Nginx será la única entrada, publícalo solo en `127.0.0.1`: ```bash nano ~/immich-app/docker-compose.yml ``` En el servicio `immich-server`, cambia la línea de `ports`: ```yaml ports: - '127.0.0.1:2283:2283' ``` ## Paso 4: Arrancar Immich Descarga las imágenes y arranca los servicios: ```bash cd ~/immich-app docker compose up -d ``` La primera vez tarda unos minutos en descargar las imágenes. Comprueba que los cuatro contenedores están en marcha: ```bash docker compose ps --format "table {{.Name}}\t{{.Status}}" ``` ```output NAME STATUS immich_machine_learning Up 2 minutes (healthy) immich_postgres Up 2 minutes (healthy) immich_redis Up 2 minutes (healthy) immich_server Up 2 minutes (healthy) ``` Verifica que la API responde en local: ```bash curl -s http://127.0.0.1:2283/api/server/ping ``` ```output {"res":"pong"} ``` ## Paso 5: Publicar Immich por HTTPS con Nginx La app móvil necesita una URL estable y con HTTPS. Instala Nginx y Certbot, y abre los puertos web en UFW: ```bash sudo apt install nginx certbot python3-certbot-nginx sudo ufw allow OpenSSH sudo ufw allow "Nginx Full" sudo ufw enable ``` Crea el sitio para Immich: ```bash sudo nano /etc/nginx/sites-available/immich ``` ```nginx server { listen 80; listen [::]:80; server_name fotos.tu_dominio; # Permite subir vídeos grandes desde la app client_max_body_size 50000M; location / { proxy_pass http://127.0.0.1:2283; proxy_http_version 1.1; 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 para las actualizaciones en tiempo real proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; # Subidas largas sin cortes proxy_read_timeout 600s; proxy_send_timeout 600s; send_timeout 600s; } } ``` Activa el sitio, valida la configuración y pide el certificado: ```bash sudo ln -s /etc/nginx/sites-available/immich /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo certbot --nginx -d fotos.tu_dominio ``` Comprueba el acceso por HTTPS desde el propio servidor: ```bash curl -s https://fotos.tu_dominio/api/server/ping ``` ```output {"res":"pong"} ``` ## Paso 6: Crear la cuenta de administrador Abre `https://fotos.tu_dominio` en el navegador y pulsa **Getting Started**. El primer usuario que se registra es el administrador. Después, el asistente te pide elegir idioma, tema y la plantilla de almacenamiento (cómo se organizan los ficheros en disco); los valores por defecto son adecuados. Desde **Administración > Usuarios** puedes crear cuentas para el resto de la familia o del equipo. Cada usuario tiene su propia biblioteca y puedes asignarle una cuota de almacenamiento. ## Paso 7: Configurar la app móvil Instala la app **Immich** desde Google Play, F-Droid o App Store y sigue estos pasos: 1. Introduce la URL del servidor: `https://fotos.tu_dominio`. 2. Inicia sesión con tu correo y contraseña. 3. Pulsa el icono de nube de la parte superior y selecciona los álbumes del dispositivo que quieres copiar (normalmente el de la cámara). 4. Activa la copia en primer plano y en segundo plano. En Android puedes limitarla a wifi y a cuando el móvil esté cargando. Para comprobar que las fotos llegan al servidor, mira el tamaño de la carpeta de subida mientras la app sincroniza: ```bash du -sh ~/immich-app/library ``` En la web, las fotos aparecen en la línea de tiempo en cuanto terminan de subirse. Las miniaturas, las caras y la búsqueda inteligente se procesan después en segundo plano; puedes seguir el progreso en **Administración > Trabajos**. ## Paso 8: Añadir una biblioteca externa existente Si ya tienes fotos en el servidor (por ejemplo, en un disco montado en `/mnt/fotos`), Immich puede indexarlas sin copiarlas como biblioteca externa. Edita `docker-compose.yml` y añade el volumen al servicio `immich-server`, en modo solo lectura: ```yaml volumes: - ${UPLOAD_LOCATION}:/data - /etc/localtime:/etc/localtime:ro - /mnt/fotos:/mnt/fotos:ro ``` Añade solo la última línea; las anteriores ya están en el fichero y su ruta exacta depende de la versión de Immich. Recrea el contenedor: ```bash cd ~/immich-app docker compose up -d ``` En la web, ve a **Administración > Bibliotecas externas**, crea una biblioteca, asígnale un propietario, añade la ruta `/mnt/fotos` (la ruta dentro del contenedor) y pulsa **Escanear**. Immich volverá a escanearla periódicamente para detectar cambios. ## Paso 9: Copias de seguridad Una copia de Immich tiene dos partes: la base de datos (usuarios, álbumes, caras, metadatos) y los ficheros de `UPLOAD_LOCATION`. Immich hace automáticamente un volcado diario de la base de datos en `library/backups`, configurable en **Administración > Configuración > Copia de seguridad**. Comprueba que existen: ```bash ls -lh ~/immich-app/library/backups/ ``` Para tener también un volcado propio antes de cada actualización, este es el comando recomendado por Immich: ```bash mkdir -p ~/backups docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > ~/backups/immich-db-$(date +%F).sql.gz ``` Copia toda la carpeta `library` (que incluye los volcados) a otro servidor o a un almacenamiento de objetos con una herramienta de copias incrementales como `restic` o `borg`. Una copia que solo está en el mismo servidor no te protege de un fallo de disco. ## Actualizar Immich Immich publica versiones con frecuencia y algunas incluyen cambios que requieren pasos manuales. Antes de actualizar, lee las notas de la versión en GitHub y haz un volcado de la base de datos (paso 9). Después: ```bash cd ~/immich-app docker compose pull docker compose up -d docker image prune -f ``` Comprueba en `docker compose ps` que todos los contenedores vuelven a estar `healthy` y que la versión mostrada en la esquina de la web es la nueva. ## Solución de problemas **La app móvil no conecta.** Comprueba desde fuera del servidor que `https://fotos.tu_dominio/api/server/ping` devuelve `{"res":"pong"}`. Si el navegador funciona pero la app no, revisa que usas `https://` y que el certificado es válido (no autofirmado). **Los vídeos grandes fallan al subir.** Suele ser `client_max_body_size` o los timeouts de Nginx. Revisa `/var/log/nginx/error.log` y comprueba que el sitio tiene los valores del paso 5. Si usas un proxy o CDN delante del servidor, puede tener su propio límite de tamaño. **El contenedor de aprendizaje automático se reinicia.** Normalmente es falta de memoria. Revisa `docker compose logs immich-machine-learning --tail 50` y `free -h`. Puedes elegir un modelo de búsqueda inteligente más ligero en **Administración > Configuración > Aprendizaje automático** o ampliar la RAM del servidor. **`database` no arranca tras cambiar `DB_PASSWORD`.** La contraseña solo se aplica al crear la base de datos. Vuelve a poner la contraseña original en `.env` o cámbiala dentro de PostgreSQL antes de modificar el fichero. ## Conclusión Tienes Immich funcionando con Docker, publicado por HTTPS con Nginx, recibiendo las fotos del móvil y con volcados diarios de la base de datos. Como siguientes pasos puedes configurar el envío de correos en **Administración > Configuración > Notificaciones**, crear álbumes compartidos con otros usuarios o automatizar la copia externa de `library` con `restic` y un timer de systemd.