Cómo instalar Piwigo en Docker - Galería de fotos autohospedada

Piwigo | Galería de fotos | MariaDB | Docker | Self-hosted | GPL-2.0

Piwigo en Docker: galería de fotos autohospedada con MariaDB, temas y plugins

Piwigo es una galería de fotos para tu servidor. Subes tus imágenes, las organizas en álbumes, controlas quién las ve y decides si tus fotos son públicas o privadas. Lo desplegamos con Docker Compose junto a una base de datos MariaDB, con los datos en carpetas del host.

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Piwigo en Docker en el canal GENBYTE:

¿Qué es Piwigo?

Piwigo es una galería de fotos autohospedada con licencia GPL-2.0. Tiene un sistema de temas, plugins y permisos por usuario y por álbum, así que puedes tener fotos privadas para la familia y otras públicas. Su documentación oficial lo presenta como una aplicación que se instala en tu propio servidor, sin depender de ningún servicio externo.

Para homelabs: el contenedor oficial trae nginx, PHP-FPM y MariaDB en dos servicios separados, y todos los datos se guardan en la carpeta ./piwigo-data de tu servidor, para que sean fáciles de copiar.

Características principales

Álbumes y permisos

Organiza las fotos en álbumes y decide qué usuarios o grupos pueden verlos.

Temas y plugins

Cambia la apariencia con temas y amplía la funcionalidad con plugins desde el panel de administración.

Datos en carpetas

Los ficheros, la base de datos y los scripts viven en ./piwigo-data, sin volúmenes Docker.

Scripts propios

Puedes instalar paquetes de Alpine o ejecutar comandos antes de arrancar nginx y PHP con el script user.sh.

Actualizaciones sencillas

Al actualizar la imagen, los ficheros nuevos de Piwigo se copian sobre los existentes.

Sin base de datos incluida

Si ya tienes un MySQL o MariaDB, existe un compose alternativo que no crea la base de datos.

Requisitos del sistema

  • Docker y Docker Compose
  • Un puerto libre en el host, que se configura en piwigo_port
  • Un servidor o un NAS con acceso SSH, según la guía oficial de instalación
  • Opcional: un proxy inverso para usar un dominio o un subdominio con HTTPS

Instalación con Docker Compose

Paso 1: descarga el compose oficial

mkdir piwigo && cd piwigo curl -O https://raw.githubusercontent.com/Piwigo/piwigo-docker/main/compose.yaml curl -O https://raw.githubusercontent.com/Piwigo/piwigo-docker/main/.env.example cp .env.example .env

Paso 2: completa el fichero .env

# Puerto del host. Con 127.0.0.1:8080 solo accede el propio servidor piwigo_port=8080 # Contraseña del usuario de la base de datos. Cámbiala db_user_password=cambia-esta-contrasena # Zona horaria timezone=Europe/Madrid # Usuario y grupo dueños de la carpeta piwigo-data PIWIGO_UID=1000 PIWIGO_GID=1000
Importante: Docker salta las reglas del firewall por diseño. Si pones solo 8080, el puerto queda abierto a toda tu red o a Internet si reenvías el router. Para limitarlo, usa piwigo_port=127.0.0.1:8080 y publica la galería a través de un proxy.
UID y GID: averigua los tuyos con id -u e id -g y ponlos en PIWIGO_UID y PIWIGO_GID. Así tu usuario podrá gestionar las fotos desde el host sin problemas de permisos.

Paso 3: arranca el contenedor

docker compose up -d # Revisa los logs si algún servicio no arranca docker compose logs -f piwigo-main

Paso 4: completa la instalación

Abre http://IP_DEL_SERVIDOR:8080. Piwigo detecta que no hay nada instalado y te lleva a la página de instalación. Los datos de la base de datos son:

# Host: piwigo-db:3306 # Usuario: piwigodb_user # Base de datos: piwigodb # Contraseña: la que pusiste en db_user_password # Prefijo de tablas: piwigo_

Pulsa "Start Install" y crea después tu cuenta de administrador.

Acceder a Piwigo

Desde el propio servidor: http://localhost:8080
Desde otro dispositivo de tu red: http://IP_DEL_SERVIDOR:8080

Primeros pasos

  1. Completa la instalación y crea tu cuenta de administrador.
  2. Sube un álbum de prueba y comprueba que las miniaturas se generan.
  3. Crea usuarios o grupos y asigna los álbumes privados.
  4. Haz una copia de seguridad de ./piwigo-data antes de cualquier actualización.

Casos de uso

  • Fotos familiares: álbumes privados para cada persona y uno compartido.
  • Portfolio: una galería pública con tema propio, en tu dominio.
  • Archivo de viajes: organiza miles de fotos en álbumes por fecha o lugar.

Configuración avanzada

Usar MySQL en lugar de MariaDB

Edita compose.yaml y sustituye el servicio de MariaDB por MySQL. El README avisa de que el nombre de la imagen distingue mayúsculas y minúsculas.

Usar una base de datos que ya tienes

Usa el fichero compose-nodb.yaml como compose.yaml, y quita db_user_password de .env.

Subpath o dominio con proxy inverso

Si publicas Piwigo en una ruta como tudominio.com/galeria, el proxy debe enviar la cabecera X-Forwarded-Prefix con esa ruta. La guía oficial incluye ejemplos de configuración de nginx.

Instalar paquetes extra con user.sh

# Crea ./piwigo-data/scripts/user.sh con los comandos que necesites. Se ejecuta como root, con ash apk add --no-cache pandoc
Atención: el script user.sh se ejecuta como root antes de arrancar nginx y PHP. Solo añade comandos que entiendas, y ten en cuenta que no hay bash, sino ash.

Gestión y mantenimiento

Ver estado

docker compose ps

Ver logs

docker compose logs -f piwigo-main

Copia de seguridad

# Detén el contenedor antes de copiar docker compose down rsync -r --delete-before ./piwigo-data/ ./piwigo-data.bck/ docker compose up -d

Actualizar

# Haz primero la copia de seguridad docker compose down docker compose pull docker compose up -d
Versiones: la imagen latest es la que usa el compose oficial. Si prefieres fijar una versión, cambia la etiqueta de piwigo/piwigo en compose.yaml por la que quieras.

Detener Piwigo

docker compose down

Stack técnico

  • Contenedor de la aplicación: Alpine con nginx y PHP-FPM, que comparten usuario
  • Base de datos: MariaDB LTS (docker.io/library/mariadb:lts)
  • Red: bridge interna piwigo-network entre los dos contenedores
  • Imagen: piwigo/piwigo:latest en Docker Hub
  • Licencia: GNU GPL v2

Comentarios

Entradas populares de este blog

Solución al error: «user is not in the sudoers file» en Debian

NAS SYNOLOGY DSM 7.1 en VMware ESXI - Guía instalación y configuración Synology DSM 7.1 en VMWARE

Multisesión RDP en Windows 10 Pro