bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de Photo

calendar_month Aug 09, 2026 schedule 23 min de lectura visibility 30 vistas
Установка PhotoPrism на VPS: Docker, автоматическая индексация и доступ по домену
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de PhotoPrism en un VPS: Docker, indexación automática y acceso por dominio

TL;DR

En esta guía detallada, configuraremos paso a paso PhotoPrism – una potente aplicación autoalojada para la gestión de fotos y videos – en su servidor virtual o dedicado (VPS/Dedicated) utilizando Docker. Aprenderá cómo instalar PhotoPrism, configurar la indexación automática de archivos multimedia y asegurar el acceso a su fototeca a través de un nombre de dominio con HTTPS, utilizando el proxy inverso Caddy.

  • Configuración de PhotoPrism y sus dependencias (MariaDB) con Docker Compose.
  • Garantizar el acceso seguro a PhotoPrism a través de un nombre de dominio y HTTPS utilizando Caddy.
  • Configuración de la indexación automática de nuevas fotos y videos.
  • Recomendaciones para elegir la configuración óptima de VPS y la protección básica del servidor.
  • Estrategias de copia de seguridad y mantenimiento para su biblioteca multimedia.

Qué configuramos y por qué

Diagrama: Qué configuramos y por qué
Diagrama: Qué configuramos y por qué

En la era digital, cada uno de nosotros acumula gigabytes, y a veces terabytes, de fotos y videos. Los servicios en la nube, como Google Photos o iCloud, ofrecen soluciones convenientes, pero a menudo plantean preguntas sobre la privacidad, el costo de la suscripción y el control sobre sus datos. PhotoPrism es una alternativa elegante que le permite poseer y gestionar completamente su biblioteca multimedia en su propio servidor.

PhotoPrism es una aplicación de código abierto que utiliza tecnologías avanzadas para organizar su colección de fotos. Indexa automáticamente imágenes, detecta rostros, reconoce objetos y lugares, y permite buscar por estos criterios. Obtiene una interfaz web conveniente para ver, clasificar y compartir sus recuerdos, mientras todos los datos permanecen bajo su control total.

Como resultado de esta guía, obtendrá un PhotoPrism completamente funcional, ejecutándose en su VPS. Su biblioteca multimedia estará accesible a través de su propio nombre de dominio (por ejemplo, photos.yourdomain.com) con una conexión HTTPS segura, lo que garantizará la confidencialidad e integridad de los datos. Configuraremos Docker Compose para una fácil implementación y gestión de PhotoPrism y su base de datos, así como la indexación automática de nuevos archivos para que su biblioteca esté siempre actualizada.

Alternativas: servicios en la nube versus autoalojado en un VPS

Cuando se trata de la gestión de fotos, existen dos caminos principales:

  • Servicios gestionados en la nube (Cloud-managed): Son soluciones como Google Photos, Apple iCloud Photos, Dropbox Photos.
    • Ventajas: Máxima comodidad, no hay que preocuparse por la infraestructura, copias de seguridad automáticas, a menudo hay un nivel gratuito (con limitaciones).
    • Desventajas: Dependencia de un proveedor externo, cuestiones de privacidad de datos (¿quién tiene acceso a sus fotos?), control limitado sobre las funciones y el almacenamiento, costos crecientes a medida que aumenta el volumen de datos.
  • Autoalojamiento en un servidor VPS/Dedicado (Self-hosted): Instalación de PhotoPrism (o alternativas, como Nextcloud con la aplicación Photos, Immich) en su propio servidor.
    • Ventajas: Control total sobre sus datos y su privacidad, sin cuotas de suscripción por el servicio (solo por el servidor), flexibilidad en la configuración, posibilidad de integración con otros de sus servicios.
    • Desventajas: Requiere conocimientos técnicos para la instalación y el mantenimiento, usted es responsable de las copias de seguridad y la seguridad del servidor, costos de tiempo iniciales para la configuración.

La elección del autoalojamiento en un VPS es ideal para quienes valoran la privacidad, desean tener control total sobre su vida digital y están dispuestos a invertir tiempo en la configuración. Esto permite crear un almacenamiento de fotos personal, potente y fiable, independiente de las políticas corporativas y la política de precios de los gigantes de la nube.

Qué configuración de VPS se necesita para esta tarea

Diagrama: Qué configuración de VPS se necesita para esta tarea
Diagrama: Qué configuración de VPS se necesita para esta tarea

La elección de un VPS adecuado es un paso clave para el funcionamiento estable y rápido de PhotoPrism. Los requisitos de recursos dependen del tamaño de su biblioteca multimedia, el número de usuarios y la intensidad de la indexación.

Requisitos mínimos

  • CPU: 2 núcleos. PhotoPrism utiliza activamente el procesador para la indexación, el reconocimiento facial y de objetos, y la transcodificación de video. Cuantos más núcleos, más rápida será la indexación inicial y el procesamiento de nuevos archivos.
  • RAM: 4 GB. PhotoPrism, especialmente durante la indexación activa y el trabajo con una base de datos grande (MariaDB), puede consumir una cantidad significativa de memoria RAM. 4 GB es un mínimo cómodo. Si tiene una biblioteca muy grande (cientos de miles de fotos) o planea muchos usuarios simultáneos, considere 8 GB.
  • Disco:
    • Tipo: SSD o NVMe. La velocidad del disco es crítica para una indexación rápida y el acceso a los archivos multimedia. NVMe es preferible para bibliotecas grandes.
    • Volumen: Desde 100 GB. El volumen principal lo ocupará su biblioteca multimedia. Además, PhotoPrism crea caché y miniaturas que también requieren espacio. Calcule el volumen del disco con un margen, basándose en el tamaño actual de su colección y sus planes de expansión. Por ejemplo, si tiene 500 GB de fotos, necesitará un mínimo de 600-700 GB de espacio en disco para el sistema, la base de datos, la caché y los propios archivos.
  • Red: 100 Mbps o 1 Gbps. Un buen ancho de banda de red es importante para la carga y descarga rápida de fotos, especialmente si planea compartirlas o trabajar con ellas de forma remota.

Plan de VPS específico para la tarea (ejemplo)

Para un trabajo cómodo con una biblioteca multimedia de hasta 1-2 TB y varios usuarios activos, recomendamos considerar un plan de VPS con las siguientes características:

  • CPU: 4 núcleos
  • RAM: 8 GB
  • Disco: 1 TB NVMe SSD
  • Red: 1 Gbps

Esta configuración será suficiente para la mayoría de los escenarios de uso doméstico y de equipos pequeños de PhotoPrism. Para alquilar un VPS con las características indicadas, puede considerar un VPS con estas características de un proveedor fiable.

Cuándo se necesita un dedicado y no un VPS

Un servidor dedicado (dedicated server) se vuelve necesario si:

  • Su biblioteca multimedia supera los 5-10 TB y sigue creciendo activamente.
  • Planea usar PhotoPrism para un gran número de usuarios (decenas o más) con una carga intensa.
  • Necesita el máximo rendimiento del subsistema de disco (por ejemplo, arreglos RAID con HDD o NVMe de alta velocidad).
  • Desea un control físico total sobre el hardware y la máxima flexibilidad en la configuración.

Para la mayoría de los usuarios individuales y equipos pequeños, un VPS será más que suficiente y económicamente más ventajoso. Sin embargo, si ve que los requisitos de recursos superan las ofertas estándar de VPS, considere un servidor dedicado adecuado.

Ubicación: qué factores influye

La elección de la ubicación del servidor VPS influye en varios factores clave:

  • Velocidad de acceso (latencia/ping): Cuanto más cerca esté el servidor de usted y sus usuarios principales, menor será la latencia y más rápida la carga de páginas y archivos multimedia. Elija una ubicación que esté geográficamente cerca de la mayoría de sus usuarios.
  • Legislación: En diferentes países rigen diferentes leyes sobre el almacenamiento de datos y la privacidad. Asegúrese de que la ubicación elegida cumpla con sus requisitos de regulación legal.
  • Costo: Los precios de los VPS pueden variar ligeramente según la ubicación debido a las diferencias en el costo de la electricidad, la infraestructura y los impuestos.

En general, para PhotoPrism la prioridad es la velocidad de acceso, por lo que debe elegir un centro de datos ubicado en su región o en la región de sus usuarios principales.

Preparación del servidor

Esquema: Preparación del servidor
Esquema: Preparación del servidor

Antes de instalar PhotoPrism, es necesario realizar una configuración básica y proteger su nuevo VPS. Utilizaremos Ubuntu Server 24.04 LTS como base, ya que es uno de los sistemas operativos más populares y mejor soportados para servidores.

1. Conexión SSH y creación de un nuevo usuario

Conéctese a su servidor como usuario root, utilizando la dirección IP proporcionada por su proveedor. Reemplace YOUR_SERVER_IP con la dirección IP real de su VPS.


ssh root@YOUR_SERVER_IP

Después de conectarse, cree un nuevo usuario con privilegios sudo. Esta es una mejor práctica de seguridad, ya que trabajar como root puede ser peligroso.


adduser yourusername # Crear un nuevo usuario, reemplace 'yourusername'
usermod -aG sudo yourusername # Añadirlo al grupo sudo

Establezca una contraseña para el nuevo usuario cuando el sistema lo solicite.

2. Configuración de claves SSH (recomendado)

El uso de claves SSH en lugar de contraseñas mejora significativamente la seguridad. Si aún no tiene una clave SSH, genérela en su máquina local:


ssh-keygen -t rsa -b 4096 # Generar una nueva clave SSH

Luego, copie la clave pública al servidor. Reemplace yourusername y YOUR_SERVER_IP con sus datos.


ssh-copy-id yourusername@YOUR_SERVER_IP # Copiar la clave pública al servidor

Ahora, salga de la sesión root e inicie sesión como el nuevo usuario:


exit
ssh yourusername@YOUR_SERVER_IP # Iniciar sesión como el nuevo usuario

Deshabilite el inicio de sesión con contraseña para root y, opcionalmente, para todos los usuarios en el archivo /etc/ssh/sshd_config, para permitir solo el inicio de sesión con clave. Abra el archivo:


sudo nano /etc/ssh/sshd_config

Encuentre y modifique (o añada) las siguientes líneas:


PermitRootLogin no
PasswordAuthentication no # Deshabilita el inicio de sesión con contraseña para todos los usuarios
ChallengeResponseAuthentication no
UsePAM no

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X). Reinicie el servicio SSH:


sudo systemctl restart sshd

Importante: Antes de deshabilitar el inicio de sesión con contraseña, asegúrese de poder iniciar sesión con una clave SSH. De lo contrario, podría perder el acceso al servidor.

3. Actualización del sistema

Siempre comience actualizando la base de paquetes y los paquetes instalados a las versiones más recientes.


sudo apt update # Actualizar la lista de paquetes
sudo apt upgrade -y # Actualizar los paquetes instalados
sudo apt autoremove -y # Eliminar dependencias innecesarias

4. Configuración del firewall (UFW)

El firewall Uncomplicated Firewall (UFW) es fácil de configurar y es la primera línea de defensa. Por defecto, bloquea todas las conexiones entrantes.


sudo apt install ufw -y # Instalación de UFW
sudo ufw allow OpenSSH # Permitir conexión SSH (puerto 22)
sudo ufw allow http # Permitir HTTP (puerto 80)
sudo ufw allow https # Permitir HTTPS (puerto 443)
sudo ufw enable # Habilitar el firewall
sudo ufw status verbose # Verificar el estado de UFW

Si utiliza un puerto diferente para SSH, permítalo en lugar de OpenSSH, por ejemplo sudo ufw allow 2222/tcp.

5. Instalación de Fail2Ban

Fail2Ban protege su servidor de ataques de fuerza bruta bloqueando temporalmente las direcciones IP desde las que se producen intentos fallidos de inicio de sesión.


sudo apt install fail2ban -y # Instalación de Fail2Ban
sudo systemctl enable fail2ban # Habilitar el inicio automático de Fail2Ban
sudo systemctl start fail2ban # Iniciar Fail2Ban

Por defecto, Fail2Ban ya está configurado para proteger SSH. Puede crear un archivo /etc/fail2ban/jail.local para configuraciones personalizadas, pero las configuraciones estándar serán suficientes para empezar.

Ahora su servidor está listo para la instalación de Docker y PhotoPrism.

Instalación de software — paso a paso

Esquema: Instalación de software — paso a paso
Esquema: Instalación de software — paso a paso

Para instalar PhotoPrism, utilizaremos Docker y Docker Compose, ya que es la forma de despliegue más recomendada y conveniente. Docker permite aislar la aplicación con todas sus dependencias en contenedores, lo que simplifica la gestión y las actualizaciones.

1. Instalación de Docker Engine

Instalaremos Docker Engine, actualizado para 2026 (suponemos la versión 26.x+). Utilizaremos el repositorio oficial de Docker.


# Actualizamos la lista de paquetes e instalamos las dependencias necesarias
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Añadimos la clave GPG oficial de Docker
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

# Añadimos el repositorio de Docker a APT
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

# Actualizamos la lista de paquetes teniendo en cuenta el nuevo repositorio de Docker
sudo apt update

# Instalamos Docker Engine, Docker CLI y containerd
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Añadimos el usuario actual al grupo docker para ejecutar comandos sin sudo
sudo usermod -aG docker yourusername

Después de añadir el usuario al grupo docker, debe cerrar y volver a iniciar la sesión SSH para que los cambios surtan efecto:


exit
ssh yourusername@YOUR_SERVER_IP

Verifiquemos que Docker se ha instalado correctamente ejecutando un contenedor de prueba:


docker run hello-world # Ejecutamos un contenedor de prueba de Docker

Si ve el mensaje "Hello from Docker!", significa que Docker está instalado y funcionando.

2. Instalación de Docker Compose

Docker Compose se instala normalmente como un plugin de Docker CLI. Ya lo hemos instalado en el paso anterior (docker-compose-plugin). Verifiquemos la versión:


docker compose version # Verificamos la versión de Docker Compose (debería ser 2.x.x)

3. Preparación de la estructura de directorios para PhotoPrism

Crearemos directorios para almacenar la configuración de PhotoPrism, la base de datos y sus archivos multimedia. Esto es importante para preservar los datos al actualizar los contenedores.


mkdir -p ~/photoprism/config # Directorio para la configuración de PhotoPrism
mkdir -p ~/photoprism/storage # Directorio para la caché y archivos auxiliares de PhotoPrism
mkdir -p ~/photoprism/database # Directorio para la base de datos MariaDB
mkdir -p ~/photoprism/originals # Directorio donde cargará los originales de fotos y videos
mkdir -p ~/photoprism/import # Directorio para la importación automática (opcional)

Si es necesario, puede cambiar las rutas a estos directorios. Por ejemplo, si tiene un disco separado para los datos, puede montarlo en /mnt/data y usar rutas como /mnt/data/photoprism/originals.

4. Creación del archivo Docker Compose para PhotoPrism

Crearemos el archivo docker-compose.yml, que definirá los servicios de PhotoPrism y MariaDB.


cd ~/photoprism
nano docker-compose.yml # Crear y abrir el archivo docker-compose.yml

Pegue el siguiente contenido. Asegúrese de reemplazar YOUR_PHOTOPRISM_PASSWORD, YOUR_MARIADB_ROOT_PASSWORD y YOUR_MARIADB_PASSWORD con contraseñas seguras.


version: "3.8"

services:
  photoprism:
    image: photoprism/photoprism:24.x.x # Versión actual de PhotoPrism para 2026
    container_name: photoprism
    restart: unless-stopped
    ports:
      - "2342:2342" # Puerto para acceder a PhotoPrism directamente (será proxy por Caddy)
    environment:
      PHOTOPRISM_ADMIN_USER: "admin" # Nombre de usuario de PhotoPrism
      PHOTOPRISM_ADMIN_PASSWORD: "YOUR_PHOTOPRISM_PASSWORD" # Contraseña del usuario de PhotoPrism
      PHOTOPRISM_DATABASE_DRIVER: "mariadb"
      PHOTOPRISM_DATABASE_DSN: "mariadb://photoprism:YOUR_MARIADB_PASSWORD@mariadb:3306/photoprism?parseTime=true"
      PHOTOPRISM_ORIGINALS_PATH: "/photoprism/originals"
      PHOTOPRISM_IMPORT_PATH: "/photoprism/import" # Ruta para la importación automática
      PHOTOPRISM_STORAGE_PATH: "/photoprism/storage"
      PHOTOPRISM_CONFIG_PATH: "/photoprism/config"
      PHOTOPRISM_DETECT_NSFW: "false" # Se puede activar "true" para la detección de contenido inapropiado
      PHOTOPRISM_SIDECAR_YAML: "true" # Habilitar soporte para archivos YAML para metadatos
      PHOTOPRISM_LOG_LEVEL: "info"
    volumes:
      - ./originals:/photoprism/originals # Sus fotos y videos originales
      - ./import:/photoprism/import # Directorio para la importación
      - ./storage:/photoprism/storage # Caché, miniaturas, archivos sidecar
      - ./config:/photoprism/config # Configuración de PhotoPrism
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:11.x # Versión estable actual de MariaDB para 2026
    container_name: mariadb
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: "YOUR_MARIADB_ROOT_PASSWORD" # Contraseña de root para MariaDB
      MARIADB_DATABASE: "photoprism" # Nombre de la base de datos para PhotoPrism
      MARIADB_USER: "photoprism" # Usuario de la base de datos para PhotoPrism
      MARIADB_PASSWORD: "YOUR_MARIADB_PASSWORD" # Contraseña del usuario de la base de datos
    volumes:
      - ./database:/var/lib/mysql # Directorio para los datos de la base de datos
    # Si el servidor tiene poca RAM, se puede limitar el uso de memoria para MariaDB
    # command: ["--max-connections=200", "--innodb-buffer-pool-size=256M"]

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X).

5. Inicio de PhotoPrism con Docker Compose

Ahora inicie los contenedores:


docker compose up -d # Iniciamos los contenedores en segundo plano

Esto puede tardar un tiempo mientras Docker descarga las imágenes e inicia los servicios. Verifique el estado de los contenedores:


docker compose ps # Verificamos el estado de los contenedores en ejecución

Ambos contenedores (photoprism y mariadb) deberían estar en estado running.

En este punto, PhotoPrism ya está funcionando y es accesible a través de la dirección IP de su VPS en el puerto 2342 (por ejemplo, http://YOUR_SERVER_IP:2342). Sin embargo, queremos configurar el acceso por nombre de dominio con HTTPS, lo que se hará en el siguiente paso.

Configuración

Diagrama: Configuración
Diagrama: Configuración

Ahora que PhotoPrism está en funcionamiento, es necesario configurar el acceso a través de un nombre de dominio, asegurar el cifrado HTTPS y, si es necesario, automatizar la indexación.

1. Configuración del nombre de dominio

Antes de configurar HTTPS, asegúrese de que su dominio o subdominio apunte a la dirección IP de su VPS. Por ejemplo, si desea acceder a PhotoPrism en photos.yourdomain.com, deberá crear un registro A en la configuración DNS de su dominio que apunte a la dirección IP de su servidor:

  • Tipo: A
  • Nombre/Host: photos (o @, si es el dominio principal)
  • Valor: YOUR_SERVER_IP

Espere unos minutos (hasta varias horas) para que se actualicen los registros DNS.

2. Configuración de HTTPS con Caddy (proxy inverso)

Caddy es un servidor web potente y fácil de usar que gestiona automáticamente los certificados HTTPS de Let's Encrypt. Es una opción ideal para aplicaciones autoalojadas.

Instalación de Caddy

Crearemos un directorio separado para Caddy y su configuración.


mkdir -p ~/caddy/Caddyfile # Directorio para la configuración de Caddy
mkdir -p ~/caddy/data # Directorio para los datos de Caddy (certificados)
mkdir -p ~/caddy/config # Directorio para la configuración de Caddy
cd ~/caddy

Crearemos el archivo docker-compose.yml para Caddy en el directorio ~/caddy. Esto permitirá ejecutar Caddy como un servicio separado que actuará como proxy para las solicitudes a PhotoPrism.


nano docker-compose.yml # Creamos y abrimos el archivo docker-compose.yml para Caddy

Pegue el siguiente contenido:


version: "3.8"

services:
  caddy:
    image: caddy:2.7.x-alpine # Versión estable actual de Caddy para 2026
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80" # Para el desafío HTTP-01 de Let's Encrypt
      - "443:443" # Para el tráfico HTTPS
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile # Archivo de configuración de Caddy
      - ./data:/data # Ubicación para almacenar certificados y otros datos de Caddy
      - ./config:/config # Ubicación para la configuración de Caddy
    network_mode: host # Usamos la red del host para acceso directo a los puertos 80/443
    # O, si desea usar una red Docker separada
    # networks:
    #   - webproxy

# networks:
#   webproxy:
#     external: true # Usamos una red externa existente, si la hay
#     name: webproxy_network # Nombre de la red a crear o usar

Importante: Si utiliza network_mode: host, Caddy usará directamente los puertos 80 y 443 de su VPS. Esta es la forma más sencilla. Si ya tiene otros servicios utilizando estos puertos, o prefiere un enfoque más aislado, deberá crear una red Docker compartida y conectar tanto Caddy como PhotoPrism a ella.

Para simplificar, en esta guía utilizaremos network_mode: host para Caddy y asumiremos que PhotoPrism está disponible en el puerto 2342 en localhost (o la dirección IP del contenedor, si utiliza una red separada).

Configuración de Caddyfile

Cree el archivo Caddyfile en el directorio ~/caddy. Reemplace photos.yourdomain.com con su dominio real.


nano ~/caddy/Caddyfile # Creamos y abrimos Caddyfile

Pegue el siguiente contenido:


photos.yourdomain.com {
    # Habilitar compresión de datos
    encode gzip zstd

    # Configuración de seguridad HTTP
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Referrer-Policy "no-referrer-when-downgrade"
        Content-Security-Policy "default-src 'self' data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self'; connect-src 'self' ws: wss:"
    }

    # Proxy de solicitudes a PhotoPrism
    reverse_proxy localhost:2342 {
        # Encabezados adicionales para el correcto funcionamiento de PhotoPrism a través del proxy
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Habilitar registro (opcional)
    log {
        output file /var/log/caddy/access.log
    }
}

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X).

Cree un directorio para los registros de Caddy:


sudo mkdir -p /var/log/caddy
sudo chown -R yourusername:yourusername /var/log/caddy # Asegúrese de que el usuario tenga permisos de escritura
Inicio de Caddy

Inicie el contenedor de Caddy:


cd ~/caddy
docker compose up -d # Iniciamos el contenedor de Caddy

Caddy obtendrá automáticamente un certificado SSL de Let's Encrypt y configurará HTTPS para su dominio. Ahora podrá acceder a PhotoPrism en https://photos.yourdomain.com.

3. Verificación del funcionamiento

Abra https://photos.yourdomain.com en su navegador. Debería ver la página de inicio de sesión de PhotoPrism. Use el nombre de usuario admin y la contraseña que especificó en docker-compose.yml para PhotoPrism.

También puede verificar la disponibilidad del servicio usando curl desde el servidor:


curl -I https://photos.yourdomain.com # Verificamos los encabezados HTTP

Si ve el estado HTTP/2 200 y los encabezados que indican Caddy y PhotoPrism, significa que todo funciona correctamente.

4. Indexación automática

PhotoPrism puede indexar automáticamente nuevos archivos colocados en el directorio originals o import. Para escanear automáticamente nuevos archivos, puede usar la función incorporada de PhotoPrism o configurar una tarea cron.

Uso de la función incorporada de PhotoPrism

PhotoPrism tiene un programador incorporado que puede escanear periódicamente nuevos archivos. Puede configurarlo a través de la interfaz web en la sección "Configuración" -> "Biblioteca".

Uso de una tarea Cron (para un control más preciso)

Puede crear una tarea cron en su VPS que invocará el comando de indexación de PhotoPrism.


sudo crontab -e # Abrimos crontab para el usuario root (o yourusername, si está en el grupo docker)

Agregue la siguiente línea para ejecutar la indexación, por ejemplo, cada hora:


0 * * * * cd /home/yourusername/photoprism && docker compose exec photoprism photoprism index --cleanup --scan-originals --import

Este comando cambia al directorio ~/photoprism y luego ejecuta el comando photoprism index dentro del contenedor de PhotoPrism.

  • --cleanup: Elimina metadatos de archivos que ya no existen.
  • --scan-originals: Escanea el directorio de originales en busca de nuevos archivos.
  • --import: Mueve los archivos del directorio import a originals después del procesamiento.

Reemplace /home/yourusername/photoprism con la ruta real a su archivo docker-compose.yml.

Guarde y cierre el archivo. Ahora PhotoPrism indexará automáticamente los nuevos archivos multimedia.

Copias de seguridad y mantenimiento

Diagrama: Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento

La copia de seguridad es una parte críticamente importante de cualquier servicio autoalojado. Sus fotos y videos son recuerdos invaluables, y su pérdida puede ser catastrófica. El mantenimiento del servidor también es importante para su funcionamiento estable y seguro.

Qué respaldar

Para PhotoPrism, es necesario respaldar tres componentes principales:

  1. Archivos multimedia originales: Estos son los datos más importantes. El directorio ~/photoprism/originals.
  2. Base de datos de PhotoPrism (MariaDB): Contiene toda la información de indexación, metadatos, caras, objetos, álbumes, etc. El directorio ~/photoprism/database.
  3. Configuración de PhotoPrism: Archivos de configuración y caché. El directorio ~/photoprism/config y ~/photoprism/storage (aunque storage se puede restaurar, es mejor tener una copia de seguridad).
  4. Configuración de Caddy: El archivo ~/caddy/Caddyfile y el directorio ~/caddy/data (para certificados).

Script simple de copia de seguridad automática (cron + restic)

Restic es una herramienta de copia de seguridad moderna, rápida y segura que admite deduplicación, cifrado y una variedad de backends (S3, SFTP, MinIO, etc.).

1. Instalación de Restic

sudo apt install restic -y # Instalamos Restic
2. Preparación del repositorio de Restic

Como ejemplo, usaremos un servidor SFTP (por ejemplo, un VPS o NAS separado). Reemplace sftp:[email protected]:/path/to/repo con su ruta real. Además, cree una contraseña segura para el repositorio y guárdela en un lugar seguro.


# Establezca la variable de entorno para la contraseña del repositorio
export RESTIC_PASSWORD="your_restic_repository_password"

# Inicializamos el repositorio de Restic
restic init --repo sftp:[email protected]:/path/to/repo
3. Creación del script de copia de seguridad

Cree un archivo de script, por ejemplo, ~/backup_photoprism.sh:


nano ~/backup_photoprism.sh

Pegue el siguiente contenido. Reemplace /home/yourusername/photoprism, sftp:[email protected]:/path/to/repo y your_restic_repository_password con sus propios valores.


#!/bin/bash

# Directorio donde se encuentra docker-compose.yml para PhotoPrism
PHOTOPRISM_DIR="/home/yourusername/photoprism"
CADDY_DIR="/home/yourusername/caddy"

# Variables para Restic
RESTIC_REPO="sftp:[email protected]:/path/to/repo"
RESTIC_PASSWORD="your_restic_repository_password"

# Ruta al archivo de registro
LOG_FILE="/var/log/photoprism_backup.log"

# Función para escribir en el registro
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | sudo tee -a "$LOG_FILE"
}

log "--- Iniciando copia de seguridad de PhotoPrism ---"

# 1. Copia de seguridad de la base de datos MariaDB
log "Creando volcado de la base de datos MariaDB..."
docker compose -f "$PHOTOPRISM_DIR/docker-compose.yml" exec mariadb mariadb-dump -u photoprism -p"$MARIADB_PASSWORD" photoprism > "$PHOTOPRISM_DIR/database/photoprism_dump.sql"
if [ $? -eq 0 ]; then
    log "Volcado de la base de datos creado con éxito."
else
    log "Error al crear el volcado de la base de datos."
    exit 1
fi

# 2. Ejecutando la copia de seguridad con Restic
log "Iniciando copia de seguridad de Restic..."
export RESTIC_PASSWORD="$RESTIC_PASSWORD" # Establecemos la contraseña para la sesión actual
restic backup \
    --repo "$RESTIC_REPO" \
    "$PHOTOPRISM_DIR/originals" \
    "$PHOTOPRISM_DIR/database" \
    "$PHOTOPRISM_DIR/config" \
    "$PHOTOPRISM_DIR/storage" \
    "$CADDY_DIR/Caddyfile" \
    "$CADDY_DIR/data" \
    --exclude "$PHOTOPRISM_DIR/database/photoprism_dump.sql" \
    --tag "photoprism-daily" \
    --verbose \
    >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
    log "Copia de seguridad de Restic completada con éxito."
else
    log "Error al ejecutar la copia de seguridad de Restic."
    exit 1
fi

# 3. Eliminación de instantáneas antiguas (política de retención)
log "Limpiando instantáneas antiguas de Restic..."
restic forget \
    --repo "$RESTIC_REPO" \
    --tag "photoprism-daily" \
    --keep-daily 7 \
    --keep-weekly 4 \
    --keep-monthly 6 \
    --prune \
    >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
    log "Limpieza de instantáneas de Restic completada con éxito."
else
    log "Error al limpiar las instantáneas de Restic."
    exit 1
fi

# 4. Eliminación del volcado temporal de la base de datos
rm "$PHOTOPRISM_DIR/database/photoprism_dump.sql"
log "Volcado temporal de la base de datos eliminado."

log "--- Copia de seguridad de PhotoPrism completada ---"

Haga el script ejecutable:


chmod +x ~/backup_photoprism.sh

Cree un archivo .env en el directorio ~/photoprism para almacenar la contraseña de MariaDB, para no escribirla directamente en el script (es mejor que directamente en el script):


nano ~/photoprism/.env

Añada:


MARIADB_PASSWORD="YOUR_MARIADB_PASSWORD"

Reemplace YOUR_MARIADB_PASSWORD con la contraseña que usó en docker-compose.yml. Luego, cambie la línea de volcado de la base de datos en el script a:


docker compose -f "$PHOTOPRISM_DIR/docker-compose.yml" exec mariadb mariadb-dump -u photoprism -p"${MARIADB_PASSWORD}" photoprism > "$PHOTOPRISM_DIR/database/photoprism_dump.sql"

O use docker compose exec mariadb sh -c "exec mariadb-dump -u photoprism -p\"$MARIADB_PASSWORD\" photoprism" > "$PHOTOPRISM_DIR/database/photoprism_dump.sql".

4. Configuración de la tarea Cron para la copia de seguridad

Añada el script a Cron para su ejecución diaria:


sudo crontab -e

Añada la línea (por ejemplo, a las 3:00 de la mañana todos los días):


0 3   * /home/yourusername/backup_photoprism.sh >> /var/log/photoprism_backup.log 2>&1

Asegúrese de que el directorio /var/log/ existe y es escribible.

Dónde almacenar las copias de seguridad

  • Almacenamiento de objetos externo compatible con S3: La opción más fiable y escalable (AWS S3, Backblaze B2, DigitalOcean Spaces). Restic funciona excelentemente con S3.
  • VPS separado: Un VPS pequeño y económico en otro centro de datos para almacenar copias de seguridad a través de SFTP.
  • Almacenamiento en red (NAS): Si tiene un NAS doméstico, puede configurar el acceso SFTP a él.

Nunca almacene las copias de seguridad en el mismo servidor que los datos originales. El principio de copia de seguridad 3-2-1 (3 copias de datos, en 2 medios diferentes, 1 de los cuales está fuera del sitio) es el estándar de oro.

Actualizaciones: rolling vs ventana de mantenimiento

Las actualizaciones regulares son importantes para la seguridad y para obtener nuevas funciones.

  • SO y Docker: Se recomienda actualizar dentro de una "ventana de mantenimiento" cuando la carga del servidor es mínima.
    
    sudo apt update && sudo apt upgrade -y
    sudo reboot # Reiniciar después de actualizar el kernel o componentes críticos
    
  • PhotoPrism y Caddy (contenedores Docker): Para actualizar los contenedores Docker, basta con detenerlos, descargar las nuevas imágenes y volver a iniciarlos.
    
    # Actualización de PhotoPrism
    cd ~/photoprism
    docker compose pull photoprism mariadb # Descargar nuevas imágenes
    docker compose up -d # Recrear contenedores con las nuevas imágenes
    
    # Actualización de Caddy
    cd ~/caddy
    docker compose pull caddy # Descargar nueva imagen
    docker compose up -d # Recrear contenedor con la nueva imagen
    

    Esto se puede hacer con más frecuencia, ya que los riesgos son mínimos. Siempre revise las Notas de la versión de PhotoPrism antes de actualizar para asegurarse de que no haya cambios críticos que requieran intervención manual.

Solución de problemas + Preguntas frecuentes

Esta sección recopila problemas comunes y respuestas a preguntas frecuentes que pueden surgir al instalar y usar PhotoPrism en un VPS.

No puedo acceder a PhotoPrism a través del dominio (502 Bad Gateway / Connection Refused)

Qué verificar:

  1. Registros DNS: Asegúrese de que su registro A para el dominio (por ejemplo, photos.yourdomain.com) apunte correctamente a la dirección IP de su VPS. Use dig photos.yourdomain.com en su máquina local.
  2. Caddy: Verifique que el contenedor Caddy esté en ejecución: docker compose -f ~/caddy/docker-compose.yml ps. Asegúrese de que el Caddyfile esté configurado correctamente (dominio, puerto de PhotoPrism). Revise los logs de Caddy: docker compose -f ~/caddy/docker-compose.yml logs -f. Es posible que Caddy no haya podido obtener un certificado SSL (verifique que los puertos 80 y 443 estén abiertos y no ocupados por otro servicio).
  3. PhotoPrism: Asegúrese de que el contenedor PhotoPrism esté en ejecución: docker compose -f ~/photoprism/docker-compose.yml ps. Verifique los logs de PhotoPrism: docker compose -f ~/photoprism/docker-compose.yml logs -f. Asegúrese de que PhotoPrism esté escuchando en el puerto 2342 dentro de la red Docker.
  4. Cortafuegos (UFW): Asegúrese de que los puertos 80, 443 y 22 (SSH) estén abiertos: sudo ufw status.

PhotoPrism indexa fotos lentamente o funciona lento

Qué verificar:

  1. Recursos del VPS: Verifique el uso de CPU, RAM y E/S del disco con los comandos htop, free -h, iostat -x 1. Si la CPU está constantemente al 100%, la RAM está llena o la E/S del disco es alta, es posible que su VPS no pueda manejar la carga.
  2. Tipo de disco: Asegúrese de usar SSD o NVMe. Un HDD ralentizará significativamente la indexación.
  3. Configuración de PhotoPrism: En la interfaz web de PhotoPrism, en la sección "Configuración" -> "Biblioteca", puede gestionar la configuración de indexación, por ejemplo, deshabilitar algunas funciones que consumen muchos recursos (reconocimiento facial, de objetos) si no son críticas.
  4. Base de datos: Si MariaDB responde lentamente, revise sus logs. Asegúrese de que tenga suficiente RAM.

No puedo subir archivos a PhotoPrism

Qué verificar:

  1. Permisos de acceso: Asegúrese de que el usuario de Docker (o root, si lo ejecuta sin sudo) tenga permisos de escritura en los directorios ~/photoprism/originals y ~/photoprism/import en el sistema anfitrión. Puede intentar sudo chmod -R 777 ~/photoprism/originals ~/photoprism/import (aunque no es la mejor práctica de seguridad, ayudará a diagnosticar el problema).
  2. Espacio en disco: Verifique el espacio libre en disco: df -h. Si el disco está lleno, la subida será imposible.
  3. Tamaño del archivo: Verifique si hay restricciones de tamaño de archivo en PhotoPrism o Caddy. Por defecto, PhotoPrism soporta archivos grandes, pero Caddy puede tener límites en el tamaño de la solicitud (generalmente el valor por defecto es suficiente).

¿Qué configuración mínima de VPS es adecuada?

Para ejecutar PhotoPrism con una biblioteca pequeña (hasta 100-200 GB) y 1-2 usuarios, un VPS con 2 núcleos de CPU, 4 GB de RAM y 200-300 GB de disco NVMe/SSD será mínimamente adecuado. Sin embargo, para un funcionamiento cómodo, especialmente con bibliotecas multimedia más grandes e indexación activa, se recomienda aumentar estos parámetros, principalmente la cantidad de RAM y la velocidad del disco.

¿Qué elegir: VPS o dedicado para esta tarea?

Para la mayoría de los usuarios, incluidos desarrolladores, fundadores individuales, jugadores y entusiastas de las criptomonedas, un VPS será la opción óptima. Ofrece suficiente rendimiento, flexibilidad y rentabilidad. Un servidor dedicado solo tiene sentido considerarlo en el caso de bibliotecas multimedia muy grandes (varios terabytes o más), muchos usuarios activos o requisitos específicos de rendimiento del subsistema de disco que un VPS no puede satisfacer (por ejemplo, RAID de hardware). Un VPS proporciona un buen equilibrio entre costo y rendimiento para el uso personal o de equipos pequeños de PhotoPrism.

¿Cómo actualizar PhotoPrism o Caddy?

Para actualizar los contenedores de PhotoPrism o Caddy, simplemente siga estos pasos en los directorios correspondientes (~/photoprism o ~/caddy):


docker compose pull # Descargar la última versión de la imagen
docker compose up -d # Volver a crear el contenedor, usando la nueva imagen

Esto descargará la versión más reciente de la imagen especificada en docker-compose.yml (por ejemplo, photoprism/photoprism:24.x.x) y reiniciará el contenedor con la nueva imagen, conservando todos sus datos, ya que se almacenan en volúmenes persistentes.

¿Cómo restaurar PhotoPrism desde una copia de seguridad de Restic?

El proceso de restauración incluye:

  1. Instalación de un nuevo VPS y configuración de Docker/Docker Compose.
  2. Creación de directorios vacíos para PhotoPrism y Caddy.
  3. Inicialización de Restic y restauración de datos desde el repositorio de Restic a estos directorios:
    
    export RESTIC_PASSWORD="your_restic_repository_password"
    restic restore latest --repo sftp:[email protected]:/path/to/repo --target /home/yourusername/ # Restaurar en el directorio raíz del usuario
    
  4. Inicio de los contenedores PhotoPrism y Caddy con los datos restaurados.
  5. Verificación y, posiblemente, reindexación en PhotoPrism si la base de datos estaba muy dañada o no se restauró correctamente.

Conclusiones y próximos pasos

Diagrama: Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos

¡Felicidades! Ha instalado y configurado PhotoPrism con éxito en su VPS, asegurando un acceso seguro por nombre de dominio con HTTPS e indexación automática. Ahora tiene una solución potente, privada y totalmente controlada para gestionar su biblioteca multimedia digital, que no depende de servicios en la nube de terceros.

Ha obtenido el control total sobre sus fotos y videos al alojarlos en su propio servidor. Esto le permite no solo mantener la privacidad, sino también personalizar la funcionalidad según sus necesidades, al tiempo que garantiza un alto rendimiento y fiabilidad.

Próximos pasos:

  • Escalado del almacenamiento: Si su biblioteca multimedia continúa creciendo, considere conectar discos adicionales o almacenamiento en red (NFS/SMB) a su VPS para expandir el directorio originals.
  • Optimización del rendimiento: Para bibliotecas muy grandes, se puede considerar la optimización de la configuración de MariaDB (por ejemplo, aumentar innodb_buffer_pool_size) o el uso de una base de datos más potente, como PostgreSQL, si PhotoPrism la soporta en el futuro como base de datos principal.
  • Integración con aplicaciones móviles: Explore las opciones para sincronizar fotos desde dispositivos móviles directamente al directorio de importación de PhotoPrism, utilizando WebDAV u otros protocolos compatibles con PhotoPrism o aplicaciones de terceros.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

instalación de PhotoPrism en VPS: Docker, indexación automática y acceso por dominio
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.