Piwigo Installation · 6 min read · Jan 23, 2026

Instalar Piwigo Gallery en Nginx con Debian Wheezy

Instalar Piwigo Gallery en Nginx con Debian Wheezy

Este tutorial muestra cómo puedes instalar y ejecutar un sitio de galería piwigo con nginx, configurado para vhosts, en un sistema Debian Wheezy. Piwigo es un sitio web de galería con muchos complementos. En este ejemplo, configuramos el vhost “gallery.domain.tld”.

Instalar

Instalar paquetes para nginx

apt-get install nginx php5-fpm php5 php5-mysql php5-pgsql php5-imap php-pear php5-sqlite php5-ldap php5-gd php5-imagick php5-curl php-apc
apt-get install php5-mcrypt php5-pspell php5-xmlrpc php5-xsl php5-cgi php-auth php-auth-sasl php-net-smtp

Instalar MySQL Server

 apt-get install mysql-server

Configurar Nginx

Eliminar el sitio predeterminado (opcional)

rm -f /etc/nginx/sites-enabled/default

Crear archivo de plantilla para vhosts

cd /etc/nginx/sites-available/
touch template-with-ssl
touch template

Vhost con soporte ssl

Inserta lo siguiente en el archivo

nano /etc/nginx/sites-available/template-with-ssl
server {
listen        80;
# .domain.com coincidirá tanto con domain.com como con anything.domain.com
server_name www.domain.tld domain.tld;
rewrite ^ https://$server_name$request_uri? permanent;

# Es mejor colocar la raíz del bloque del servidor a nivel de servidor, y no a nivel de ubicación
# cualquier ruta de bloque de ubicación será relativa a esta raíz.
root /var/www/www.domain.tld;

# Siempre es bueno establecer registros, ten en cuenta que no puedes desactivar el registro de errores
# establecer error_log off; simplemente creará un archivo llamado 'off'.
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;

# Esto también puede ir en el nivel http { }
index index.html index.htm index.php;

location / {
# si solo estás usando wordpress y no quieres reescrituras adicionales
# entonces reemplaza la palabra @rewrites con /index.php
try_files $uri $uri/ @rewrites;
}

location @rewrites {
# Puedes poner algunas de tus propias reglas de reescritura aquí
# por ejemplo rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
# Si nada coincide, simplemente lo enviaremos a /index.php
rewrite ^ /index.php last;
}

# Este bloque capturará solicitudes de archivos estáticos, como imágenes, css, js
# El prefijo ?: es una marca 'no capturadora', lo que significa que no requerimos
# que el patrón se capture en $1, lo que debería ayudar a mejorar el rendimiento
location ~* \\.(?:ico|css|js|gif|jpe?g|png)$ {
# Algunos controles básicos de caché para archivos estáticos que se enviarán al navegador
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

# elimina la línea de robots si quieres usar el robots.txt virtual de wordpress
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

# esto previene que se sirvan archivos ocultos (que comienzan con un punto)
location ~ \\. { access_log off; log_not_found off; deny all; }

location ~ \.php {
fastcgi_param        SCRIPT_NAME $fastcgi_script_name;
fastcgi_param        SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index        index.php;
fastcgi_pass        unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
# solo, si quieres usar ssl-vhost
server {
listen        443 default ssl;
# .domain.com coincidirá tanto con domain.com como con anything.domain.com
server_name www.domain.tld domain.tld;

ssl_certificate        /etc/nginx/ssl/www.domain.tld.crt;
ssl_certificate_key        /etc/nginx/ssl/www.domain.tld.key;
# Es mejor colocar la raíz del bloque del servidor a nivel de servidor, y no a nivel de ubicación
# cualquier ruta de bloque de ubicación será relativa a esta raíz.
root /var/www/www.domain.tld;

# Siempre es bueno establecer registros, ten en cuenta que no puedes desactivar el registro de errores
# establecer error_log off; simplemente creará un archivo llamado 'off'.
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;

# Esto también puede ir en el nivel http { }
index index.html index.htm index.php;

location / {
# si solo estás usando wordpress y no quieres reescrituras adicionales
# entonces reemplaza la palabra @rewrites con /index.php
try_files $uri $uri/ @rewrites;
}

location @rewrites {
# Puedes poner algunas de tus propias reglas de reescritura aquí
# por ejemplo rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
# Si nada coincide, simplemente lo enviaremos a /index.php
rewrite ^ /index.php last;
}

# Este bloque capturará solicitudes de archivos estáticos, como imágenes, css, js
# El prefijo ?: es una marca 'no capturadora', lo que significa que no requerimos
# que el patrón se capture en $1, lo que debería ayudar a mejorar el rendimiento
location ~* \\.(?:ico|css|js|gif|jpe?g|png)$ {
# Algunos controles básicos de caché para archivos estáticos que se enviarán al navegador
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

# elimina la línea de robots si quieres usar el robots.txt virtual de wordpress
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

# esto previene que se sirvan archivos ocultos (que comienzan con un punto)
location ~ \\. { access_log off; log_not_found off; deny all; }

location ~ \.php {
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;

}
}

Vhost solo para HTTP

nano /etc/nginx/sites-available/template
server {
listen        80;
# .domain.com coincidirá tanto con domain.com como con anything.domain.com
server_name www.domain.tld domain.tld;
#rewrite ^ https://$server_name$request_uri? permanent;

# Es mejor colocar la raíz del bloque del servidor a nivel de servidor, y no a nivel de ubicación
# cualquier ruta de bloque de ubicación será relativa a esta raíz.
root /var/www/www.domain.tld;

# Siempre es bueno establecer registros, ten en cuenta que no puedes desactivar el registro de errores
# establecer error_log off; simplemente creará un archivo llamado 'off'.
access_log /var/log/nginx/rugia.access.log;
error_log /var/log/nginx/rugia.error.log;

# Esto también puede ir en el nivel http { }
index index.html index.htm index.php;

location / {
# si solo estás usando wordpress y no quieres reescrituras adicionales
# entonces reemplaza la palabra @rewrites con /index.php
try_files $uri $uri/ @rewrites;
}
location @rewrites {
# Puedes poner algunas de tus propias reglas de reescritura aquí
# por ejemplo rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
# Si nada coincide, simplemente lo enviaremos a /index.php
rewrite ^ /index.php last;
}

# Este bloque capturará solicitudes de archivos estáticos, como imágenes, css, js
# El prefijo ?: es una marca 'no capturadora', lo que significa que no requerimos
# que el patrón se capture en $1, lo que debería ayudar a mejorar el rendimiento
location ~* \\.(?:ico|css|js|gif|jpe?g|png)$ {
# Algunos controles básicos de caché para archivos estáticos que se enviarán al navegador
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

# elimina la línea de robots si quieres usar el robots.txt virtual de wordpress
location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }

# esto previene que se sirvan archivos ocultos (que comienzan con un punto)
location ~ \\. { access_log off; log_not_found off; deny all; }

location ~ \.php {
fastcgi_param        SCRIPT_NAME $fastcgi_script_name;
fastcgi_param        SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index        index.php;
fastcgi_pass        unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}

Crear primer vhost

Usar plantilla

 cp /etc/nginx/sites-available/template /etc/nginx/sites-available/gallery.domain.tld

Editar variables de ruta

 nano /etc/nginx/sites-available/gallery.domain.tld
server_name gallery.domain.tld;
root /var/www/gallery.domain.tld;
access_log /var/log/nginx/gallery.access.log;
error_log /var/log/nginx/gallery.error.log;

Crear tu estructura de directorios

mkdir -p /var/www/gallery.domain.tld
chown -R www-data:www-data /var/www

Habilitar tu vhost

 ln -s /etc/nginx/sites-available/gallery.domain.tld /etc/nginx/sites-enabled/gallery.domain.tld

Ahora reinicia los servicios:

/etc/init.d/php5-fpm restart
/etc/init.d/nginx restart

Probar PHP

Crea un archivo de prueba con phpinfo:

 nano /var/www/gallery.domain.tld/test.php 

Para propósitos de prueba rápida, simplemente edita el

archivo hosts

con el nombre del vhost; en este ejemplo, la IP del servidor es

192.168.1.10

:

  192.168.1.10  gallery.domain.tld

Ahora abre tu navegador y navega a:

 http://gallery.domain.tld

Si ves una página informativa sobre la versión de php instalada, todo está bien ahora puedes eliminar tu archivo de prueba:

 rm -f  nano /var/www/gallery.domain.tld/test.php 

Configurar Piwigo

Crear base de datos y usuario

nombre de usuario: gallery01
contraseña: PASSWORD

Conéctate a MySQL:

 mysql -u root -p

create database gallery01; grant all on gallery01.* to ‘gallery’@’localhost’ identified by ‘PASSWORD’; flush privileges; \q;

Descargar archivo de instalación para piwigo

cd /var/www/gallery.domain.tld
wget http://piwigo.org/download/dlcounter.php?code=netinstall
mv dlcounter.php\?code\=netinstall netinstall.php
chown www-data:www-data netinstall.php

Ajustes de configuración

 nano /etc/php5/fpm/php.ini 
upload_tmp_dir = /tmp  
upload_max_filesize = 20M  
max_file_uploads = 20
nano /etc/nginx/nginx.conf 
client_max_body_size 20M;         
client_body_buffer_size 128k;

No olvides reiniciar los servicios:

/etc/init.d/php5-fpm restart
/etc/init.d/nginx restart

Usar el instalador web

Abre el navegador y navega a:

http://gallery.domain.tld/netinstall.php

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.