Pixelfed
Обновлено 19 мая 2020
Введение
PixelFed - платформа совместного использования изображений, основанная на протоколе ActivityPub.
Подготовка LXC контейнера
Мы рекомендуем выполнить установку Pixelfed в отдельном контейнере, настроив его согласно инструкции.
Установка и настройка PostgreSQL
Установите и настройте PostgreSQL согласно руководству. Вместо базы данных dbtest из примера создайте базу pixelfed, а вместо пользователя test создайте pixelfed.
Установка и настройка Nginx
Установите и настройте веб-сервер Nginx и выполните настройку PHP-FPM согласно руководству.
Установка Pixelfed
Далее описан процесс установки Pixelfed из исходного кода.
Настройка кэширования
Redis - программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы. Для его подключения установите необходимый пакет:
emerge dev-db/redis
Добавьте Redis в автозагрузку и запустите его:
* service redis added to runlevel default
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
Для включения мобильного API добавьте:
/var/calculate/www/pixelfed/.env
OAUTH_ENABLED=true
Выполните установку необходимых компонентов, генерацию ключа и обновление кэша:
composer install --no-ansi --no-interaction --no-progress --no-scripts --optimize-autoloader
php artisan key:generate
php artisan horizon:install
php artisan passport:keys
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:
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:
; 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: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx | * Checking nginx configuration ... [ ok ] nginx | * Refreshing nginx configuration ... [ ok ]
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:
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:
#!/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
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:
... ; 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 в файле /var/calculate/www/pixelfed/.env всегда следует сбрасывать кэш. Для этого выполните:
su nginx -s /bin/bash
cd /var/calculate/www/pixelfed
php artisan config:cache
php artisan route:cache
exit
su nginx -s /bin/bash
cd /var/calculate/www/pixelfed
php artisan passport:keys
echo OAUTH_ENABLED=true >>/var/calculate/www/pixelfed/.env
php artisan config:cache
php artisan route:cache
exit
Обновление 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
Сгенерируйти ключи OAUTH авторизации, если не сделали это ранее:
php artisan passport:keys
Выполните обновление настроек и базы данных:
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