Piwigo

Обновлено 18 марта 2020

Piwigo

Введение

Piwigo — система управления контентом (CMS) с открытым исходным кодом, предназначенная для создания фотогалереи. Благодаря свободно распространяемым расширениям легко настраивается для конкретных задач. Piwigo написан на языке PHP, а в качестве базы данных использует MySQL или его свободный аналог MariaDB.

Подготовка LXC контейнера

Мы рекомендуем выполнить установку Piwigo в отдельном контейнере, настроив его согласно инструкции.

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

Установите и настройте MariaDB согласно руководству. Вместо базы данных dbtest из примера создайте базу piwigo, а вместо пользователя test создайте piwigouser.

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

Установите и настройте веб-сервер Nginx и выполните настройку PHP-FPM согласно руководству.

Установка Piwigo

Далее описан процесс установки Piwigo из исходного кода.

Загрузка и распаковка Piwigo

Установите пакет ImageMagick для корректной работы с различными форматами изображений:

emerge -a media-gfx/imagemagick

Предупреждение

Убедитесь, что в системе не установлен пакет dev-php/pecl-imagick, так как при его наличии могут возникнуть проблемы создания миниатюр изображений.

Для распаковки архива Piwigo вам понадобится архиватор unzip. Если необходимый пакет отсутствует в системе, установите его:

emerge -a app-arch/unzip

Скачайте и распакуйте сервис, создав необходимые пути:

mkdir /var/calculate/www

cd /var/calculate/www

curl -o piwigo.zip http://piwigo.org/download/dlcounter.php?code=latest

unzip piwigo.zip

rm piwigo.zip

Назначьте необходимые права:

chown -R nginx. piwigo

chmod o-w -R piwigo

Настройка Nginx для Piwigo

Настройте Nginx обслуживание для доменного имени piwigo.example.org:

/etc/nginx/sites-enabled/piwigo.example.org.conf
server {
    listen        80;

    server_name piwigo.example.org;

    # It is best to place the root of the server block at the server level, and not the location level
    # any location block path will be relative to this root.

    root /var/calculate/www/piwigo;

    # It's always good to set logs, note however you cannot turn off the error log
    # setting error_log off; will simply create a file called 'off'.
    access_log /var/log/nginx/piwigo.access_log;
    error_log /var/log/nginx/piwigo.error_log;

    # This can also go in the http { } level
    index index.html index.htm index.php;

    location / {
            # if you're just using wordpress and don't want extra rewrites
            # then replace the word @rewrites with /index.php
            try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
            # Can put some of your own rewrite rules in here
            # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
            # If nothing matches we'll just send it to /index.php
            rewrite ^ /index.php last;
    }

    # This block will catch static file requests, such as images, css, js
    # The ?: prefix is a 'non-capturing' mark, meaning we do not require
    # the pattern to be captured into $1 which should help improve performance
    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    # remove the robots line if you want to use wordpress' virtual robots.txt
    location = /robots.txt { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    # this prevents hidden files (beginning with a period) from being served
    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:/run/php-fpm.socket;
            include fastcgi_params;
    }
}

Настройка PHP-FPM

Выполните настройку переменных окружения PHP-FPM:

/etc/php/fpm-php7.3/fpm.d/www.conf
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Выполните настройку закачиваемых файлов через PHP-FPM:

/etc/php/fpm-php7.3/php.ini
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = /var/calculate/tmp

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 100M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 100M

Презапустите Nginx и PHP-FPM, чтобы изменения вступили в силу:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
/etc/init.d/nginx reload
nginx | * Checking nginx configuration ...                                    [ ok ]
nginx | * Refreshing nginx configuration ...                                  [ ok ]
/etc/init.d/php-fpm restart
php-fpm | * Stopping PHP FastCGI Process Manager ...                          [ ok ]
php-fpm | * Testing PHP FastCGI Process Manager config ...                    [ ok ]
php-fpm | * Starting PHP FastCGI Process Manager ...                          [ ok ]

Настройка Piwigo

Добавьте имя ресурса piwigo.example.org, работающего на IP-адресе 192.168.0.1, в DNS-сервер локальной сети или отредактируйте строку:

/etc/hosts
192.168.0.1 piwigo.example.org

Откройте в браузере сайт http://piwigo.example.org и выполните заключительную настройку Piwigo.

Настройка Piwigo

Настройка HTTPS

Получение сертификата Let's Encrypt

Получите сертификат домена piwigo.example.org для Nginx согласно руководству.

Настройка поддержки HTTPS в Nginx

Настройте Nginx для поддержки HTTPS согласно руководству.

Настройка HTTPS для Nextcloud

Настройте Nginx-обслуживание для доменного имени piwigo.example.org:

/etc/nginx/sites-enabled/piwigo.example.org.conf
server {
    listen        80;
    server_name piwigo.example.org;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
        listen        443 default ssl;

        server_name piwigo.example.org;

        ssl_certificate        /etc/letsencrypt/live/piwigo.example.org/fullchain.pem;
        ssl_certificate_key        /etc/letsencrypt/live/piwigo.example.org/privkey.pem;

        # It is best to place the root of the server block at the server level, and not the location level

        # any location block path will be relative to this root.
        root /var/calculate/www/piwigo;

        # It's always good to set logs, note however you cannot turn off the error log
        # setting error_log off; will simply create a file called 'off'.

        access_log /var/log/nginx/piwigo.access_log;
        error_log /var/log/nginx/piwigo.error_log;

        # This can also go in the http { } level
        index index.html index.htm index.php;

        location / {
                # if you're just using wordpress and don't want extra rewrites
                # then replace the word @rewrites with /index.php
                try_files $uri $uri/ @rewrites;
        }

        location @rewrites {
                # Can put some of your own rewrite rules in here
                # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
                # If nothing matches we'll just send it to /index.php
                rewrite ^ /index.php last;
        }

        # This block will catch static file requests, such as images, css, js
        # The ?: prefix is a 'non-capturing' mark, meaning we do not require
        # the pattern to be captured into $1 which should help improve performance
        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
                # Some basic cache-control for static files to be sent to the browser
                expires max;
                add_header Pragma public;
                add_header Cache-Control "public, must-revalidate, proxy-revalidate";
        }

        # remove the robots line if you want to use wordpress' virtual robots.txt
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        # this prevents hidden files (beginning with a period) from being served
        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:/run/php-fpm.socket;
                include fastcgi_params;
        }
}

Презагрузите настройки Nginx, чтобы изменения вступили в силу:

/etc/init.d/nginx reload
nginx | * Checking nginx configuration ...                                    [ ok ]
nginx | * Refreshing nginx configuration ...                                  [ ok ]

Заключение

Piwigo настроен и готов к работе! Это только начало пути. Впереди формирование структуры альбомов, перенос фотографий, добавление тэгов и настройка плагинов. CMS Piwigo должен прекрасно справиться с этими задачами.

Заметка

Поделитесь своими впечатлениями и опытом использования с другими пользователями в нашей группе @piwigo@calculate.social в Федеративной сети Mastodon