Por qué autoalojar PhotoPrism en un VPS
Mientras Immich apunta a una experiencia de nube completa con copia de seguridad móvil en tiempo real, PhotoPrism privilegia la indexación y la organización de una biblioteca de fotos existente, a menudo voluminosa, depositada en un sistema de archivos. Analiza sus carpetas, clasifica las fotos por etiquetas (montaña, playa, coche), detecta rostros, lee los EXIF y geocodifica las imágenes. Todo ello se ejecuta localmente mediante TensorFlow integrado.
Las ventajas de un PhotoPrism autoalojado
- Etiquetado automático mediante IA local: búsqueda por palabras clave, lugares y colores sin nube.
- Indexación de archivos existentes depositados en el disco, mediante WebDAV, rsync o montaje de red.
- Detección de duplicados y de fotos similares para limpiar una colección saturada.
- Mapas interactivos basados en las coordenadas GPS extraídas de los metadatos EXIF.
- Modo de solo lectura posible: PhotoPrism indexa sin modificar nunca sus archivos originales.
- Interfaz PWA instalable, accesible desde cualquier navegador de su red.
Requisitos exactos: RAM, CPU, almacenamiento y red
PhotoPrism consume mucha memoria en cuanto TensorFlow entra en juego. Sin GPU y con el motor ML activo, planifique 2 GB de RAM como mínimo: por debajo, el proceso de indexación desencadena un OOM y el contenedor se reinicia en bucle. Con ML completamente activo (detección de rostros, clasificación de escenas), se recomiendan 4 GB de RAM — el nivel cómodo para una biblioteca de 10 000 a 50 000 fotos. 1 vCPU mínimo basta para navegar, pero la indexación inicial de un archivo voluminoso se beneficia de 2 a 4 núcleos. El puerto por defecto es 2342. En almacenamiento, aprovisione sus originals más un 30 a 40 % para las miniaturas y la caché. Añada una partición swap de 2 GB mínimo si su VPS tiene menos de 4 GB de RAM.
Desplegar PhotoPrism paso a paso
Preparar el VPS y los volúmenes
Instale Docker y cree después dos carpetas persistentes:
/opt/photoprism/originalspara sus fotos y/opt/photoprism/storagepara la caché y la base del índice.Declarar PhotoPrism y MariaDB
En
docker-compose.yml, añada un serviciomariadbcon un volumen dedicado y un serviciophotoprism. Enlácelos mediantePHOTOPRISM_DATABASE_DRIVER=mysql.Definir el administrador y el modo de indexación
Indique
PHOTOPRISM_ADMIN_PASSWORDy activePHOTOPRISM_READONLY=truesi quiere que indexe sin tocar los originales. Levante después la stack condocker compose up -d.Importar y lanzar la primera indexación
Copie sus fotos en la carpeta
originalsmediantersynco WebDAV y lance el análisis condocker compose exec photoprism photoprism index.Configurar nginx como reverse proxy con SSL Certbot
Instale nginx y certbot en el host. Cree un bloque server en
/etc/nginx/sites-available/photoprism.confque escuche en el puerto 80, redirija a 443 y haga proxy ahttp://127.0.0.1:2342. Añada las directivasproxy_set_headernecesarias para que PhotoPrism detecte correctamente el esquema HTTPS. Obtenga el certificado concertbot --nginx -d galeria.sudominio.com.
Acceso móvil: aplicación iOS y Android
PhotoPrism no ofrece una aplicación nativa de copia de seguridad automática como Immich, pero su interfaz PWA está optimizada para móvil: añádala a la pantalla de inicio desde Safari (iOS) o Chrome (Android) para una experiencia casi nativa. El HTTPS es obligatorio para instalar la PWA. Para la copia de seguridad desde el teléfono, la solución complementaria habitual es Syncthing o rclone: configúrelos para enviar la carpeta DCIM al VPS.
Optimización ML en VPS sin GPU: las variables clave
En un VPS estándar sin GPU, TensorFlow funciona en modo CPU. PHOTOPRISM_WORKERS controla el número de hilos de indexación paralelos — configúrelo según el número de vCPU disponibles. PHOTOPRISM_DISABLE_TENSORFLOW (valor true) desactiva completamente el motor ML: la indexación es de 3 a 5 veces más rápida y el consumo de RAM cae por debajo de 1 GB. Útil para la migración inicial de un archivo muy grande. PHOTOPRISM_DETECT_NSFW (valor true) activa el filtro de contenido inapropiado a costa de mayor carga: actívelo solo si lo necesita realmente. Para VPSes entre 2 y 4 GB de RAM: PHOTOPRISM_WORKERS=2, PHOTOPRISM_DETECT_NSFW=false y TensorFlow activo.
Resolución de problemas: los errores más frecuentes
OOM (Out of Memory) al iniciar o durante la indexación. Señal en los logs Docker: Killed o signal: killed. Solución inmediata: añadir swap (fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile). Solución definitiva: pasar a un VPS con al menos 2 GB. Indexación interminable. En una biblioteca de 50 000 fotos con 2 vCPU, la primera indexación completa puede tardar de 6 a 24 horas — es normal. Problemas de permisos en los volúmenes. PhotoPrism corre como UID 1000 por defecto; si originals pertenece a root, el acceso falla silenciosamente. Corrija con chown -R 1000:1000 /opt/photoprism. La interfaz carga pero no aparecen fotos. Compruebe que la indexación fue realmente lanzada (photoprism index); arrancar el servicio no lanza el import automáticamente.
Estrategia de copia de seguridad: originals, storage y base de datos
Una copia de seguridad eficaz de PhotoPrism distingue tres componentes. La carpeta originals contiene sus archivos maestros (JPEG, RAW, vídeos): lo irreemplazable. Haga una copia externa diaria con rclone sync. La carpeta storage contiene miniaturas y caché: puede reconstruirse completamente mediante re-indexación; una copia semanal es suficiente. La base MariaDB almacena el índice, los álbumes, las etiquetas manuales y los rostros identificados — todo su trabajo de curación. Haga un dump regular: docker compose exec mariadb mysqldump -u photoprism -p photoprism > /opt/backup/photoprism-db-$(date +%Y%m%d).sql. Prográmelo en cron y cifre el resultado antes de enviarlo fuera del sitio. Con SQLite, copie el archivo .db después de detener PhotoPrism.
PhotoPrism o Immich: cuál elegir
Desplace la tabla
| Criterio | PhotoPrism | Immich |
|---|---|---|
| Objetivo principal | Indexar y organizar una biblioteca de fotos existente | Nube de fotos completa con copia de seguridad móvil |
| Aplicación móvil | PWA, sin copia automática nativa | Apps iOS/Android con copia de seguridad automática |
| Base de datos | MariaDB o SQLite | PostgreSQL con extensión vectorial |
| Búsqueda por IA | Etiquetas TensorFlow por contenido y color | Búsqueda semántica y reconocimiento facial avanzado |
| RAM recomendada | 4 GB (2 GB mínimo sin GPU) | 6 a 8 GB |
| Modelo de archivos | Lee una carpeta originals, con modo de solo lectura posible | Gestiona su propia estructura de subida |
| Multiusuario | Limitado, orientado a una colección única | Bibliotecas aisladas por usuario |
| Caso de uso ideal | Archivar y explorar grandes carpetas de fotos | Sustituir Google Photos en el día a día |
Monte su carpeta originals en solo lectura (:ro en el volumen Docker) y active PHOTOPRISM_READONLY=true. PhotoPrism indexará y generará etiquetas y miniaturas en el volumen storage separado, sin riesgo alguno de modificar o eliminar un archivo original.