PixelFed

Updated 12 June 2019

PixelFed

Introduction

PixelFed is an image sharing platform based on the ActivityPub protocol.

Preparing a LXC container

We recommend that you install PixelFed in a separate container and configure it as described in the manual.

Installing and configuring PostgreSQL

Install and configure PostgreSQL according to the manual. Replace the dbtest database with pixelfed, and the test user with pixelfed.

Installing and configuring Nginx

Install and configure your Nginx server, then configure PHP-FPM according to the manual.

Installing PixelFed

The following explains how to install PixelFed from source.

Cache configuration

Redis - программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы. To enable Redis, first install it as a package:

emerge dev-db/redis

Add Redis to autostart and actually start it:

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

Important

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

Installing and unpacking 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

Configuring Nginx for 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;
    }
}

Configuring 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!

Note

Если необходимо добавить пользователя с проверкой почтового адреса, то на вопрос 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

Updating PixelFed

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

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

git pull

Now update:

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

Restart PHP-FPM:

/etc/init.d/php-fpm restart