MAATRIX / Блог / Piwigo на Ubuntu 24.04: пошаговая установка

Piwigo на Ubuntu 24.04: пошаговая установка

MAATRIX

Если нужна веб-галерея, которой управляете сами — со своими альбомами, правами доступа для разных групп пользователей и без привязки к облаку — Piwigo остаётся одним из немногих зрелых open-source решений на PHP, которое не требует Docker и тяжёлых зависимостей. Ниже — установка с нуля на чистой Ubuntu 24.04: от стека Nginx + MariaDB + PHP до HTTPS и первых альбомов.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Piwigo и когда он подходит

Piwigo — классическая веб-галерея, которую разрабатывают с 2002 года (тогда под именем PhpWebGallery). В отличие от Immich и PhotoProfism, которые заточены под автоматическую сортировку фото с телефона по датам и геолокации, Piwigo — про ручную организацию: альбомы и подальбомы, теги, права доступа по группам, комментарии, плагины и темы оформления.

Берите Piwigo, если:

  • нужна публичная или полупубличная галерея (фотостудия, клуб, редакция) с гостевым доступом;
  • важна тонкая настройка прав — «эту группу пользователей пускать только в этот альбом»;
  • вы цените лёгкий PHP-стек без контейнеров и готовы администрировать LEMP вручную.

Если задача — личный бэкап фото с телефонов с автоматическим распознаванием лиц и таймлайном, посмотрите в сторону Immich или PhotoProfism — там мастер загрузки под мобильные сценарии.

Требования к серверу и подготовка Ubuntu

Piwigo нетребователен: для галереи на несколько тысяч фотографий хватает 1-2 vCPU и 2 ГБ RAM, но диск закладывайте с запасом — оригиналы изображений и превью растут быстро, и на всё это лучше выделять отдельный раздел или том. Для галереи с активной загрузкой и множеством пользователей комфортнее будет 4 ГБ RAM — PHP-FPM и MariaDB держат кэш куда охотнее при таком объёме.

Обновите систему и поставьте базовые утилиты:

apt update && apt upgrade -y
apt install -y curl wget unzip gnupg2 software-properties-common

Проверьте часовой пояс и локаль — от них зависят даты в EXIF и сортировка фото в интерфейсе:

timedatectl set-timezone Europe/Moscow

Заранее настройте фаервол UFW, открыв только SSH, 80 и 443 порты — Piwigo не должен быть доступен ни по каким другим портам напрямую.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка LEMP-стека: Nginx, MariaDB, PHP 8.3

Piwigo одинаково хорошо работает под Apache и Nginx, но связка Nginx + PHP-FPM даёт более предсказуемое потребление памяти под нагрузкой — берём её.

Ставим Nginx и MariaDB:

apt install -y nginx mariadb-server
systemctl enable --now nginx mariadb

Ubuntu 24.04 несёт PHP 8.3 в стандартных репозиториях — этого достаточно для актуальных версий Piwigo:

apt install -y php8.3-fpm php8.3-mysql php8.3-gd php8.3-mbstring \
  php8.3-xml php8.3-zip php8.3-curl php8.3-intl php8.3-opcache
systemctl enable --now php8.3-fpm

Модуль GD обязателен — именно он строит превью и миниатюры при загрузке фото. Если галерея будет большая, дополнительно можно поставить php8.3-imagick — Piwigo умеет использовать ImageMagick через плагин, и на некоторых форматах (RAW через конвертацию, PNG с прозрачностью) он даёт более аккуратный результат, чем GD.

Настройте базовые лимиты PHP под загрузку фото — по умолчанию upload_max_filesize и post_max_size слишком малы для современных снимков с телефона (10-20 МБ не редкость):

sed -i 's/^upload_max_filesize.*/upload_max_filesize = 64M/' /etc/php/8.3/fpm/php.ini
sed -i 's/^post_max_size.*/post_max_size = 96M/' /etc/php/8.3/fpm/php.ini
sed -i 's/^memory_limit.*/memory_limit = 256M/' /etc/php/8.3/fpm/php.ini
sed -i 's/^max_execution_time.*/max_execution_time = 300/' /etc/php/8.3/fpm/php.ini
systemctl restart php8.3-fpm

Создайте базу данных и пользователя для Piwigo:

mysql -u root -e "
CREATE DATABASE piwigo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'piwigo'@'localhost' IDENTIFIED BY 'СложныйПарольЗдесь';
GRANT ALL PRIVILEGES ON piwigo.* TO 'piwigo'@'localhost';
FLUSH PRIVILEGES;"

Замените пароль на свой, сгенерированный отдельно, и нигде его не переиспользуйте — если сервер публичный, это единственная точка входа в базу с метаданными галереи.

Установка и настройка Piwigo

Скачайте актуальный релиз через официальный счётчик загрузок — он всегда отдаёт последнюю стабильную версию, поэтому не нужно вручную искать номер:

mkdir -p /var/www
cd /var/www
wget -O piwigo.zip "https://piwigo.org/download/dlcounter.php?code=latest"
unzip piwigo.zip -d /var/www
mv /var/www/piwigo /var/www/piwigo
rm piwigo.zip
chown -R www-data:www-data /var/www/piwigo

Проверьте, что архив действительно распаковался в /var/www/piwigo — иногда внутри zip уже есть папка с таким именем, тогда команда mv не нужна.

Создайте конфиг Nginx /etc/nginx/sites-available/piwigo:

server {
    listen 80;
    server_name gallery.example.com;
    root /var/www/piwigo;
    index index.php;

    client_max_body_size 96M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    location ~* \.(jpg|jpeg|png|gif|webp|css|js|ico)$ {
        expires 30d;
        access_log off;
    }
}

Активируйте сайт и перезапустите Nginx:

ln -s /etc/nginx/sites-available/piwigo /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Замените gallery.example.com на реальный домен, указывающий A-записью на IP сервера — без домена корректно выпустить HTTPS-сертификат не получится.

HTTPS, права доступа и организация альбомов

Откройте домен в браузере — Piwigo запустит веб-мастер установки. На первом шаге он проверит права доступа и наличие расширений PHP; если чего-то не хватает, установщик прямо укажет, какой пакет доставить. На втором шаге введите параметры базы: хост localhost, имя базы piwigo, пользователя piwigo и заданный ранее пароль. Дальше — создание учётной записи администратора: логин, пароль и email, на который приходят уведомления о новых версиях.

После установки сразу настройте HTTPS через Let's Encrypt — подробный процесс с обработкой типовых ошибок разобран в статье про установку SSL на VPS, здесь только базовый сценарий с certbot:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d gallery.example.com

Certbot сам допишет listen 443 ssl и настроит редирект с 80 порта — проверьте после этого, что client_max_body_size осталась в блоке server для 443, certbot иногда создаёт отдельный серверный блок для HTTPS.

Права доступа в Piwigo строятся через группы: раздел «Пользователи → Группы» позволяет создать, например, группу «Клиенты» и группу «Семья», а на уровне альбома (Администрирование → Альбомы → редактировать альбом → Права) указать, каким группам он виден. Есть три уровня видимости: публичный (виден всем, включая гостей без логина), для авторизованных пользователей и приватный по группам. Для полностью закрытой галереи отключите гостевой доступ в общих настройках (Настройки → Основные → «Разрешить гостям видеть галерею»).

Каталог, куда физически складываются оригиналы фото — /var/www/piwigo/galleries/ — должен принадлежать www-data и иметь достаточно места; если под фото выделен отдельный диск или том, смонтируйте его именно сюда до первой загрузки фотографий, иначе потом придётся переносить файлы и переиндексировать пути в базе.

Резервное копирование, обновления и оптимизация

Бэкап Piwigo — это база данных плюс каталог galleries/ (оригиналы) и _data/ (кэш, конфигурация, комбинированные CSS/JS). Простой скрипт для cron:

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/root/backups/piwigo
mkdir -p $BACKUP_DIR
mysqldump -u piwigo -p'СложныйПарольЗдесь' piwigo | gzip > $BACKUP_DIR/db-$DATE.sql.gz
tar -czf $BACKUP_DIR/galleries-$DATE.tar.gz -C /var/www/piwigo galleries
find $BACKUP_DIR -mtime +14 -delete

Храните дамп базы и архив с оригиналами не только на самом сервере — синхронизируйте их на отдельное хранилище (второй сервер, S3-совместимое хранилище, любой rsync-бэкап). Потеря galleries/ без резервной копии означает потерю самих фотографий, а не только настроек галереи.

Обновления Piwigo идут через встроенный механизм: если на сервере есть доступ в интернет, админ-панель сама показывает баннер о новой версии и позволяет обновиться в один клик, предварительно сохранив бэкап базы. Для серверов без прямого исходящего доступа обновление делается вручную — скачиваете новый архив, распаковываете поверх текущей установки, не затирая папки _data/ и galleries/, и запускаете /upgrade.php из браузера.

Из практических нюансов, которые проявляются не сразу:

  • Генерация превью на лету через плагин AdminTools или LocalFilesEditor не заменяет предварительную синхронизацию — при заливке через FTP/rsync в обход веб-интерфейса нужно потом запускать «синхронизацию» из админки, иначе Piwigo не увидит новые файлы.
  • OPcache для PHP-FPM стоит включить явно (opcache.enable=1 в /etc/php/8.3/fpm/conf.d/10-opcache.ini) — на связке из тысяч файлов плагинов и тем разница в скорости отклика админки заметна.
  • Плагины сторонних разработчиков ставятся из каталога extensions прямо в админке, но перед обновлением ядра Piwigo стоит свериться в описании плагина с совместимостью — часть старых плагинов не поддерживает свежие мажорные версии.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Piwigo или Immich — что выбрать?

Если галерея для публикации и совместного просмотра с гибкими правами по группам — Piwigo. Если задача — личный бэкап фото с автосортировкой по датам, лицам и геометкам с телефона — Immich подойдёт лучше «из коробки».

Можно ли поставить Piwigo без домена, только по IP?

Технически да, но выпустить нормальный HTTPS-сертификат Let's Encrypt по голому IP нельзя — либо самоподписанный сертификат с предупреждением в браузере, либо всё же зарегистрировать домен.

Сколько места нужно под галерею?

Считайте по оригиналам плюс 15-25% на кэш превью разных размеров, который Piwigo генерирует автоматически. Для галереи в несколько десятков тысяч фото разумно закладывать отдельный диск на несколько сотен гигабайт с запасом на рост.

Как перенести Piwigo на новый сервер?

Перенесите дамп базы, папки galleries/ и _data/, восстановите тот же путь установки (или отредактируйте _data/i18n и конфиг после переноса), поставьте те же версии PHP-расширений и заново настройте Nginx-конфиг с новым доменом или IP.

Nginx обязателен, или подойдёт Apache?

Apache тоже официально поддерживается и даже проще в настройке за счёт .htaccess, который Piwigo кладёт сам. Nginx выбирают ради более предсказуемого потребления памяти под нагрузкой и единого стека с другими сервисами на том же сервере.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →