Pixelfed

Обновлено 1 августа 2019

Pixelfed

Введение

PixelFed - платформа совместного использования изображений, основанная на протоколе ActivityPub.

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

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

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

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

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

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

Установка Pixelfed

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

Настройка кэширования

Redis - программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы. Для его подключения установите необходимый пакет:

emerge dev-db/redis

Добавьте Redis в автозагрузку и запустите его:

rc-update add redis
 * service redis added to runlevel default
/etc/init.d/redis start
php-fpm | * Starting redis ...                                                [ ok ]

Важно

Не устанавливайте в систему пакет dev-php/pecl-redis, так как это нарушит работу кэширования Pixelfed.

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

Установите необходимые пакеты для работы Pixelfed:

emerge -a dev-php/composer

Скачайте исходный код проекта из Git-репозитория:

mkdir -p /var/calculate/www

cd /var/calculate/www

git clone -b dev https://github.com/pixelfed/pixelfed.git pixelfed

cd pixelfed

Назначьте необходимые права и переключите сеанс на nginx:

chown -R nginx. .

su nginx -s /bin/bash

Скопируйте файл настроек .env.example в .env:

cp .env.example .env

Выполните настройку Pixelfed указав вместо pixelfed.example.org свой адрес сайта:

/var/calculate/www/pixelfed/.env

APP_NAME="Pixelfed Example"
APP_URL=https://pixelfed.example.org
APP_DOMAIN="pixelfed.example.org"
ADMIN_DOMAIN="pixelfed.example.org"
SESSION_DOMAIN="pixelfed.example.org"

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=pixelfed
DB_USERNAME=pixelfed
DB_PASSWORD=pixelfedpass

MAIL_DRIVER=smtp
MAIL_HOST=smtp.example.org
MAIL_PORT=25
MAIL_FROM_ADDRESS="pixelfed@example.org"
MAIL_FROM_NAME="Pixelfed"

Для закрытия регистрации добавьте следующую настройку:

/var/calculate/www/pixelfed/.env

OPEN_REGISTRATION=false

Для подключении к ActivePub федерации добавьте следующие настройки:

/var/calculate/www/pixelfed/.env

ACTIVITY_PUB=true
REMOTE_FOLLOW=true
ACTIVITYPUB_INBOX=true
ACTIVITYPUB_SHAREDINBOX=true

Выполните установку необходимых компонентов, генерацию ключа и обновление кэша:

composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader

php artisan key:generate

php artisan horizon:install

php artisan config:cache

php artisan route:cache

php artisan migrate --force

php artisan horizon:purge

php artisan storage:link

php artisan cache:clear

php artisan optimize:clear

php artisan optimize

exit

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

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

/etc/nginx/sites-enabled/pixelfed.example.org.conf
upstream php-handler {
    server unix:/run/php-fpm.socket;
}

server {
    listen 80
    server_name pixelfed.example.org;
    root /var/calculate/www/pixelfed/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass php-handler;
        fastcgi_index index.php;
        include fastcgi_params;
    }

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

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

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

/etc/php/fpm-php7.2/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

Презапустите 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 ]

Настройка HTTPS

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

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

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

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

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

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

/etc/nginx/sites-enabled/pixelfed.example.org.conf
upstream php-handler {
    server unix:/run/php-fpm.socket;
}

server {
    listen 80;
    server_name pixelfed.example.org;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name pixelfed.example.org;
    root /var/calculate/www/pixelfed/public;

    ssl_certificate /etc/nginx/ssl/pixelfed.example.org/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/pixelfed.example.org/privkey.pem;

    include ssl.conf;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        include /etc/nginx/fastcgi.conf;
        fastcgi_pass php-handler;
        fastcgi_index index.php;
        include fastcgi_params;
    }

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

Запуск демона для фоновых задач PixelFed

Создайте сценарий OpenRC для управления демоном PixelFed:

/etc/init.d/pixelfed-horizon
#!/sbin/openrc-run
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="PixelFed-Horizon daemon"
description="PixelFed-Horizon daemon"
pidfile="/run/pixelfed-horizon.log"
command_user=nginx
output_log="/var/log/pixelfed-horizon.log"
error_log="/var/log/pixelfed-horizon.log"
directory="/var/calculate/www/pixelfed"
command="php"
command_args="artisan horizon"
command_background=true

depend() {
        use net
}

start_pre() {
    checkpath -f -o nginx -m 0600 $output_log
}

Установите права на запуск:

chmod 755 /etc/init.d/pixelfed-horizon

Запустите демон:

/etc/init.d/pixelfed-horizon start

Добавьте демон в автозагрузку:

rc-update add pixelfed-horizon

Добавление пользователя

Если вы отключили регистрацию через сайт, добавьте пользователя следующей командой:

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

php artisan user:create
Creating a new user...

 Name:
 > Administrator

 Username:
 > admin

 Email:
 > admin@example.org

 Password:
 > 

 Confirm Password:
 > 

 Make this user an admin? (yes/no) [no]:
 > yes

 Manually verify email address? (yes/no) [no]:
 > yes

 Are you sure you want to create this user? (yes/no) [no]:
 > yes

Created new user!

Заметка

Если необходимо добавить пользователя с проверкой почтового адреса, то на вопрос Manually verify email address ответьте no.

Поддержка видеофайлов

Установите пакет для кодирования видео:

emerge media-video/ffmpeg

Добавьте возможность добавления формата video/mp4:

/var/calculate/www/pixelfed/.env

MEDIA_TYPES='image/jpeg,image/png,image/gif,video/mp4'

Обновите кэш настроек Pixelfed:

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

php artisan config:cache

Увеличьте максимальный размер загружаемых данных для PHP:

/etc/php/fpm-php7.2/php.ini
...
; 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 = 1G
...
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 1G
...

Увеличьте максимальный размер загружаемых данных для Nginx:

/etc/nginx/sites-enabled/pixfield.calculate.social.conf

...
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
client_max_body_size 10G;
...

Перезапустите Nginx и PHP-FPM:

/etc/init.d/nginx restart

/etc/init.d/php-fpm restart

Обновление PixelFed

Обновите исходный код PixelFed из репозитория Git:

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

git pull

Выполните установку обновления:

composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader

php artisan config:cache

php artisan route:cache

php artisan migrate --force

php artisan horizon:purge

php artisan storage:link

exit

Перезапустите PHP-FPM:

/etc/init.d/php-fpm restart