En resumen. Immich corre como un stack de cuatro contenedores: servidor, PostgreSQL, Redis y machine learning. El mínimo oficial es 6 GB de RAM y lo recomendado son 8 GB. Esta guía usa un Cloud VPS 8 de Contabo con Ubuntu 22.04 LTS, Docker Compose y Caddy como proxy inverso con certificado Let’s Encrypt automático. Immich escucha internamente en el puerto 2283 y hacia fuera solo quedan abiertos el 80 y el 443.
Esta guía te lleva por el proceso completo de desplegar Immich, una alternativa de código abierto a Google Photos, en un Cloud VPS 8 de Contabo con Docker Compose. Cubre el aprovisionamiento del VPS, la instalación de Docker, el stack de Compose de Immich, un proxy inverso Caddy con SSL automático, la migración a v3 y la configuración de la app móvil.
Requisitos
Un despliegue de Immich en Docker se apoya en un stack pequeño de contenedores que trabajan juntos: el servidor principal, PostgreSQL, Redis y un contenedor de machine learning. El VPS necesita margen suficiente para correrlos todos sin que compitan por recursos.
- VPS: Cloud VPS 8 de Contabo (8 vCores, 24 GB de RAM, 300 GB SSD) o un plan equivalente con al menos 6 GB de RAM. Con eso todos los contenedores corren con holgura y queda capacidad de sobra conforme crece la biblioteca de fotos.
- Sistema operativo: Ubuntu 22.04 LTS o más reciente
- Docker Engine y el plugin de Docker Compose
- Un dominio registrado que apunte al VPS mediante un registro A
- Un proxy inverso para terminar HTTPS. En esta guía se usa Caddy de principio a fin, porque gestiona los certificados por su cuenta
Paso 1: aprovisiona y asegura tu VPS
Use up and down arrow keys to resize the meta box pane.Toggle panel: Yoast SEO Premium
Optimize your content for discovery or get new content suggestions.Get content suggestions
Focus keyphrase
Focus keyphrase
Use the main word or phrase you want your content found for across search, AI, and beyond. Learn more about best practices for keyphrases.(Opens in a new browser tab)Keyphrase synonyms
Add synonyms of your focus keyphrase to reduce repetition of your focus keyphrase. Read more about synonyms.(Opens in a new browser tab)
Search appearance
Determine how your post should look in the search results.Google preview
MobileGoogle preview: Switch to desktop preview. Currently showing mobile preview.
Desktop
Url preview:

Contabo Blogcontabo.com
SEO title preview:
Cómo autoalojar Immich v3 en un VPS con Docker Compose | Contabo Blog
Meta description preview:
Aug 14, 2026 - Guía paso a paso para instalar Immich v3 en un VPS con Docker Compose. Requisitos de hardware, instalación, proxy inverso con SSL y migración desde v2.
SEO titleInsert variableGenerate SEO title
Title Page Separator Site title
Slug
Meta descriptionInsert variableGenerate meta description
Guía paso a paso para instalar Immich v3 en un VPS con Docker Compose. Requisitos de hardware, instalación, proxy inverso con SSL y migración desde v2.
Premium SEO analysisGoodImmich
Add related keyphrase
Content blocksNew
Internal linking suggestions
Cornerstone content
Advanced
Insights
PostBlock
List Item
An individual item within a list.
Color
Text
Typography
Font size
Advanced
Skip to the selected blockOpen publish panel
Antes de tocar el primer contenedor, el servidor necesita un puñado de pasos estándar de endurecimiento. Saltarse esta etapa es una de las razones más comunes por las que los servicios autoalojados terminan comprometidos, porque un VPS recién aprovisionado queda alcanzable desde internet en el momento en que arranca.
- Contrata el plan Cloud VPS 8 y elige Ubuntu 22.04 LTS como imagen base durante el aprovisionamiento. El servidor suele quedar listo en pocos minutos y las credenciales de root llegan después por correo.
- Genera localmente un par de llaves SSH con
ssh-keygeny sube la llave pública al VPS durante la instalación, o agrégala después desde el panel de control de Contabo. Una vez que confirmes que el acceso por llave funciona, desactiva la autenticación por contraseña en/etc/ssh/sshd_configconPasswordAuthentication noy reinicia el servicio SSH. - Configura UFW para dejar abiertos solo los puertos necesarios: SSH (22), HTTP (80) y HTTPS (443). Ejecuta
sudo ufw allow OpenSSH, sudo ufw allow httpysudo ufw allow https, y luego activa el firewall consudo ufw enable. El puerto 2283, donde escucha Immich, se queda cerrado a internet, porque todo el tráfico externo pasa por el proxy inverso. - Crea un usuario sin privilegios de root con
adduseryusermod -aG sudo, y cámbiate a esa cuenta para el resto de la instalación. Correr Docker como root amplía el daño si algún día un contenedor queda comprometido.
Paso 2: instala Docker y Docker Compose
Instala Docker Engine y el plugin de Compose directamente desde el repositorio oficial de Docker y no desde los paquetes más viejos que trae Ubuntu, porque esos suelen quedarse varias versiones atrás:
sudo apt update && sudo apt upgrade -y
sudo apt install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo usermod -aG docker $USERCierra sesión y vuelve a entrar para que la nueva membresía de grupo tome efecto. Verifica la instalación con docker --version y docker compose version, y los dos deberían reportar números de versión estables actuales.
Paso 3: despliega Immich con Docker Compose
Con Docker en su lugar, la instalación de Immich sigue la configuración oficial de Compose. Crea un directorio para el despliegue y descarga los archivos necesarios del release más reciente en GitHub:
mkdir ~/immich-app && cd ~/immich-app
curl -o docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
curl -o .env https://github.com/immich-app/immich/releases/latest/download/example.envAbre el archivo .env y define los siguientes valores antes de levantar el stack:
UPLOAD_LOCATION=./library
DB_DATA_LOCATION=./postgres
DB_PASSWORD=a-strong-generated-password
IMMICH_VERSION=release
TZ=Etc/UTCGenera DB_PASSWORD en lugar de escribir algo a mano y quédate en caracteres alfanuméricos, para que Docker no interprete mal los caracteres especiales en el archivo de entorno. Con los valores puestos, levanta el stack:
docker compose up -dEjecuta docker compose ps para confirmar que cada contenedor llega a un estado sano. En el primer arranque eso suele tardar uno o dos minutos, mientras la base de datos inicializa su esquema. Immich queda entonces accesible en http://server-ip:2283, aunque para el uso diario todavía necesita un dominio y un certificado SSL.
Paso 4: monta un proxy inverso con SSL (Caddy)
Caddy solicita y renueva los certificados de Let’s Encrypt de forma automática y te quita una tarea de mantenimiento que otros proxies resuelven a mano con Certbot. Instala Caddy desde su repositorio APT oficial y luego edita /etc/caddy/Caddyfile:
photos.example.com {
reverse_proxy localhost:2283 {
header_up X-Forwarded-Proto {scheme}
}
}Reemplaza photos.example.com por el dominio que apunta al VPS mediante su registro A de DNS, y recarga Caddy para aplicar el cambio:
sudo systemctl reload caddyCaddy pide el certificado del dominio automáticamente en la primera petición entrante. Todo el tráfico del puerto 2283 pasa por HTTPS en el puerto 443, y como UFW solo permite los puertos 80 y 443 desde fuera, el puerto real de Immich queda inaccesible de forma directa.
Paso 5: migra de Immich v2 a v3
El release v3 concentra cambios que rompen compatibilidad en la API y en el esquema de la base de datos. Las migraciones no están pensadas para revertirse de forma limpia una vez que corrieron. Por eso conviene siempre leer las notas de release oficiales de v3 antes de empezar, sobre todo en despliegues con integraciones de terceros.
- Respalda la base de datos PostgreSQL y el directorio de subidas antes de tocar nada. Las migraciones de esquema no se pueden revertir limpiamente después de correr. Usa
docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_db_backup.sqly archiva por separado el directorio deUPLOAD_LOCATION. - Edita
.envy defineIMMICH_VERSION=v3, o fija una etiqueta concreta comov3.0.0. Es buena práctica repasar el resto de las entradas de.envcontra sus comentarios, porque a algunos despliegues les conviene mover las rutas a un volumen de datos dedicado. - Descarga las imágenes actualizadas y reinicia el stack con
docker compose pull && docker compose up -d. Con eso Docker baja las imágenes actualizadas de servidor, base de datos y machine learning antes de recrear los contenedores. - Observa los registros con
docker compose logs -f immich-serverhasta que pasen los health checks, y confirma después que la interfaz web carga y que los álbumes y assets existentes se ven. Revisa contra la documentación actual de la API v3 cualquier herramienta de terceros, script de respaldo o integración que llame directamente a la API de Immich, para detectar cambios que rompan compatibilidad.
Paso 6: configura la app móvil y el respaldo
Una vez que el servidor es accesible por HTTPS, la app de Immich para iOS o Android se conecta a él ingresando la URL del servidor en la pantalla de inicio de sesión, por ejemplo https://photos.example.com. Después de entrar con la cuenta de administrador que creaste en la primera configuración, activa el respaldo en segundo plano desde los ajustes de la app. Las fotos y videos nuevos se suben entonces de forma automática, sin que tengas que abrir la app.
En las dos plataformas, el respaldo en segundo plano depende de que el sistema operativo no mate el proceso de la app de forma agresiva cuando está inactiva. Revisa los ajustes de optimización de batería para la app de Immich y exclúyela de cualquier función automática de hibernación de apps que traiga el fabricante de tu celular. Fabricantes como Samsung y Xiaomi aplican restricciones de batería adicionales por encima del Android estándar y pueden detener las subidas en segundo plano en silencio si las dejas en los valores predeterminados. Normalmente se resuelve si permites uso de batería sin restricciones para la app y habilitas datos en segundo plano tanto por Wi-Fi como por red móvil, en caso de que quieras sincronizar fuera de casa.
Preguntas frecuentes: instalar Immich
Define IMMICH_VERSION=v3 (o una etiqueta concreta como v3.0.0) en el archivo .env y ejecuta después docker compose pull seguido de docker compose up -d. Respalda antes la base de datos y el directorio de subidas, y revisa las notas de release oficiales de v3 por si hay cambios que rompan compatibilidad y de los que dependan integraciones de terceros.
El mínimo oficial es 6 GB de RAM, y se recomiendan 8 GB para una experiencia más fluida. Eso cubre el consumo combinado del servidor de Immich, PostgreSQL, Redis y el contenedor de machine learning corriendo juntos.
Immich corre con 4 GB de RAM si desactivas el contenedor de machine learning definiendo IMMICH_MACHINE_LEARNING_ENABLED=false en el archivo .env. Eso elimina el reconocimiento facial y la búsqueda semántica, pero deja intactas la subida y la navegación de la biblioteca.
La base de datos PostgreSQL que usa Immich se puede respaldar de forma segura con docker exec y pg_dumpall:docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_db_backup.sql
Otra opción es detener el stack por completo con docker compose down antes de copiar directamente el directorio de DB_DATA_LOCATION, para evitar que la base de datos se corrompa. Cualquiera de los dos caminos debería correr con una periodicidad fija, junto con un respaldo separado del directorio de UPLOAD_LOCATION, porque la base de datos y los archivos de medios tienen que poder restaurarse juntos para que un respaldo sirva de algo.