Immich en Proxmox: La Guía Definitiva para Separar Computación y Almacenamiento (NFS)
Si eres como yo, tu homelab no para de crecer. Empiezas con un servidor, luego otro, y de repente te encuentras con el dilema clásico: ¿Dónde pongo los datos y dónde ejecuto las aplicaciones?
En mi caso, tengo un escenario bastante común pero que puede dar dolores de cabeza si no se planifica bien:
- Servidor A (Storage): Un Proxmox con un
DATA-poolde varios TB donde quiero que vivan mis fotos. - Servidor B (Compute): Otro Proxmox donde corre Immich en un contenedor LXC (instalado con los scripts maravillosos de ProxmoxVE Community Scripts).
La misión es clara: Immich (en B) tiene que leer y escribir sus datos en el Servidor A. Y como no tengo un cluster con Ceph (aún), la solución más robusta y estándar es NFS.
Pero ojo, que aquí entra en juego el “villano” de esta historia: los contenedores LXC Unprivileged y sus mapeos de usuarios. Si alguna vez te has peleado con un “Permission denied” en Proxmox, sabes de lo que hablo.
Vamos a resolverlo paso a paso.
El Esquema de la Solución
Para que no te pierdas, esto es lo que vamos a construir:
- Servidor A: Exporta
/DATA-pool/Immichpor NFSv4. - Servidor B (Host): Monta ese NFS en
/mnt/immich_nfs. - LXC Immich: Recibe ese montaje en
/mnt/immich(o/photos) usando “bind mounts”. - Immich: Escribe felizmente en esa ruta, creyendo que es local.

Paso 1: Configurar el Servidor A (El Almacén)
Primero, necesitamos que nuestro servidor con los discos comparta la carpeta.
1.1 Instalar el servidor NFS
Entra por SSH a tu Servidor A e instala lo necesario:
apt update
apt install -y nfs-kernel-server
systemctl enable --now nfs-server
1.2 Crear la carpeta
Si no la tienes ya, crea el directorio donde vivirán tus recuerdos:
mkdir -p /DATA-pool/Immich
1.3 Exportar con NFS
Aquí es donde definimos quién puede entrar. Editamos /etc/exports:
nano /etc/exports
Añadimos la siguiente línea. Truco: Restringe el acceso a la IP del Servidor B por seguridad.
/DATA-pool/Immich IP_DEL_HOST_B(rw,sync,no_subtree_check,root_squash)
Aplicamos los cambios para que el sistema se entere:
exportfs -ra
exportfs -v
1.4 Firewall (No te olvides de esto)
Si tienes el firewall de Proxmox activado, asegúrate de permitir el tráfico TCP por el puerto 2049 desde la IP del Servidor B. Si no, te volverás loco pensando que es un problema de NFS cuando es un simple bloqueo de red.
Paso 2: Configurar el Servidor B (El Host de Proxmox)
Ahora nos vamos al servidor donde corre el contenedor de Immich. Ojo, estamos en el host Proxmox, no dentro del LXC todavía.
2.1 Instalar el cliente NFS
apt update
apt install -y nfs-common
2.2 Montaje de prueba
Vamos a ver si conecta. Creamos el punto de montaje y probamos:
mkdir -p /mnt/immich_nfs
mount -t nfs -o vers=4.2 IP_DEL_HOST_A:/DATA-pool/Immich /mnt/immich_nfs
Prueba a escribir algo:
touch /mnt/immich_nfs/test && rm /mnt/immich_nfs/test
Si no te dio error, ¡felicidades! La conexión NFS funciona.
2.3 Hacerlo persistente
No queremos que esto se rompa si reinicias el servidor. Añadelo a /etc/fstab:
IP_DEL_HOST_A:/DATA-pool/Immich /mnt/immich_nfs nfs vers=4.2,_netdev,nofail,hard,timeo=600 0 0
Y verifica que monta todo bien:
mount -a
Paso 3: Pasar el almacenamiento al LXC
Ahora tenemos los datos en el Host B, pero el contenedor de Immich no los ve. Necesitamos “pasárselos”.
Identifica el ID de tu contenedor (CTID). Digamos que es 105.
En la terminal del Host B:
pct set 105 -mp0 /mnt/immich_nfs,mp=/mnt/immich
Esto le dice a Proxmox: “Coge lo que hay en /mnt/immich_nfs del host y pónselo al contenedor 105 en /mnt/immich”.
Entra al contenedor para verificar:
pct enter 105
ls -la /mnt/immich
Si ves los archivos, ya casi estamos. Solo falta el jefe final: Los Permisos.
Paso 4: La Parte “Delicada” (Privileged vs Unprivileged)
Aquí es donde la gente suele atascarse.
Si tu contenedor es Privileged, la vida es fácil. Normalmente con un chown 1000:1000 en el servidor A basta, porque el root del contenedor es el root del host.
Pero si usas un contenedor Unprivileged (que deberías, por seguridad), el usuario root dentro del contenedor NO es el root fuera. Se mapea a un UID alto (usualmente 100000). Por eso, aunque des permisos 777, a veces falla o se ve raro.
La Solución Práctica: all_squash
Para no complicarnos la vida con mapeos de subgid (que dan para otro post entero), la forma más sencilla de que esto funcione en un homelab es decirle al servidor NFS que trate a todos los invitados como un usuario específico.
En el Servidor A, volvemos a editar /etc/exports. Vamos a usar all_squash y mapear todo al usuario anónimo (o a uno específico que controlemos).
Si quieres que dentro del LXC se pueda escribir sin problemas (que suele verlo como root o usuario 1000), un truco es mapear al UID que Proxmox usa para sus contenedores unprivileged (100000) o simplemente forzar un usuario común.
Pero para simplificar al máximo y evitar errores de “permission denied” en un entorno controlado, podemos usar esta configuración en el exports del Servidor A:
/DATA-pool/Immich IP_DEL_HOST_B(rw,sync,no_subtree_check,all_squash,anonuid=100000,anongid=100000)
Nota: El UID
100000es el que Proxmox suele asignar alrootdentro de un contenedor unprivileged. Al hacer esto, cuando Immich escriba como “root” dentro del LXC, el Servidor A verá esos archivos como propiedad del usuario 100000, cerrando el círculo de confianza.
Aplica los cambios en A:
exportfs -ra
IMPORTANTE: Ajustar el dueño de la carpeta
Para que el mapeo funcione, la carpeta en el Servidor A debe pertenecer al usuario 100000 (o al que hayas definido en anonuid). Si la creó root, Immich no podrá escribir aunque el NFS le deje pasar.
Ejecuta esto en el Servidor A:
chown 100000:100000 /DATA-pool/Immich
chmod 770 /DATA-pool/Immich
Opción B: Convertir a Privileged
Si esto te da muchos dolores de cabeza y prefieres estabilidad sobre el aislamiento estricto, puedes hacer backup de tu LXC, restaurarlo y marcar la casilla “Privileged”. Ahí los permisos funcionan como en un Linux normal: chown 1000:1000 en el origen y listo.
Recomendación Final para Immich
Un detalle importante: usa el NFS solo para las fotos y vídeos (la “Library” y “Uploads”).
La base de datos de Immich (Postgres) debería vivir en el disco local del Servidor B (o en el disco virtual del LXC). Las bases de datos sobre NFS pueden ser lentas y propensas a corrupción si la red flaquea.
Recordatorio de Seguridad: Mover los datos a un NAS o servidor dedicado (Servidor A) no significa que estén seguros. ¡Un RAID no es un backup! Asegúrate de tener una estrategia 3-2-1 para tus fotos, copiándolas a otra ubicación o nube.
Resumen del Checklist de Éxito
Si algo falla, revisa esto:
- En B (Host):
mount | grep immich_nfs¿Está montado? - En A:
exportfs -v¿Está exportada la IP correcta? - Puertos:
telnet IP_A 2049desde B. ¿Llega? - Permisos: Si ves los archivos pero no puedes escribir, revisa el mapeo de UIDs en el
/etc/exports(all_squash).
¡Y listo! Ya tienes tu Immich separado en dos máquinas, escalando almacenamiento barato en A y usando la potencia de CPU/GPU en B.
Perfecto. Con esto ya tendrás tu instancia de Immich corriendo sobre Proxmox con almacenamiento NFS, combinando lo mejor de los dos mundos: potencia de cómputo y capacidad de almacenamiento. Rápido, robusto y escalable.
Y como siempre me gusta decir: Si este post te ha ayudado, compártelo con otros administradores que puedan beneficiarse. Y sígueme para más experiencias reales desde las trincheras del homelab.
masalladelcloud