Pixelfed

Updated 19 Mai 2020

Pixelfed

Introduction

PixelFed est une plateforme de partage d'images basée sur le protocole ActivityPub.

Préparation d'un contenant LXC

Nous vous recommandons d'installer Pixelfed dans un conteneur séparé et de le configurer conformément au manuel.

Installation et configuration de PostgreSQL

Installez et configurez PostgreSQL selon le manuel. Remplacez la base de données dbtest avec pixelfed, et l'utilisateur test avec pixelfed.

Installation et configuration de Nginx

Installez et configurez votre serveur Nginx, puis configurez PHP-FPM conformément au manuel.

Installer Pixelfed

Voilà comment installer Pixelfed depuis le code source.

Configuration du cache

Redis implémente un service de mise en cache de la mémoire vive, basé sur une table de hachage. Pour activer Redis, installez-le d'abord en tant que paquet :

emerge dev-db/redis

Ajouter Redis au démarrage automatique et le démarrer, effectivement :

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

Important

Évitez d'installer le paquet dev-php/pecl-redis, car il risque d'interférer avec la mise en cache de Pixelfed.

Télécharger et décompresser Pixelfed

Commencez par installer les logiciels dont Pixelfed aura besoin :

emerge -a dev-php/composer

Téléchargez le code source depuis Git :

mkdir -p /var/calculate/www

cd /var/calculate/www

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

cd pixelfed

Attribuez les privilèges nécessaires et passez à nginx :

chown -R nginx. .

su nginx -s /bin/bash

Copiez le fichier .env.example dans .env :

cp .env.example .env

Configurez Pixelfed en remplaçant ~pixelfed.example.org~~ par l'adresse de votre site :

/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"

Ajoutez le paramètre suivant pour finaliser l'enregistrement :

/var/calculate/www/pixelfed/.env

OPEN_REGISTRATION=false

Pour se connecter à l'ActivePub distribué, ajoutez les paramètres suivants :

/var/calculate/www/pixelfed/.env

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

Pour activer l'API mobile, procédez comme suit :

/var/calculate/www/pixelfed/.env

OAUTH_ENABLED=true

Installez les composants nécessaires, créez une clé et actualisez le cache :

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

Configurer Nginx pour PixelFed

Configurez Nginx pour 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;
    }
}

Configurer PHP-FPM

Configurez les variables d'environnement 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

Redémarrez Nginx et PHP-FPM pour valider :

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 ]

Configuration HTTPS

Obtenir le certificat Let's Encrypt

Procurez-vous un certificat de domaine pixelfed.example.org pour Nginx en suivant les instructions du manuel.

Activer la prise en charge de HTTPS dans Nginx

Configurez Nginx conformément au manuel, pour assurer la prise en charge le protocole HTTPS.

Configuration HTTPS pour PixelFed

Configurez Nginx pour 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;
    }
}

Lancer le démon PixelFed pour effectuer des tâches d'arrière-plan

Créez un script OpenRC pour assurer la gestion de 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
}

Définissez les autorisations de démarrage :

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

Lancez le démon :

/etc/init.d/pixelfed-horizon start

Ajoutez pixelfed à la liste de démarrage automatique :

rc-update add pixelfed-horizon

Ajouter un nouvel utilisateur

Si vous avez désactivé l'enregistrement sur le site, utilisez la commande suivante pour ajouter votre utilisateur :

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

Si vous devez ajouter un nouvel utilisateur avec vérification de l'adresse e-mail, répondez non à la question Vérifier manuellement l'adresse e-mail.

Prise en charge des paramètres vidéo

Installez l'ensemble des décodeurs vidéo :

emerge media-video/ffmpeg

Activez la prise en charge du format video/mp4 :

/var/calculate/www/pixelfed/.env

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

Actualisez le cache des paramètres de Pixelfed :

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

php artisan config:cache

Augmentez la taille maximale de téléchargement pour 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
...

Augmentez la taille maximale de téléchargement pour 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;
...

Redémarrez Nginx et PHP-FPM :

/etc/init.d/nginx restart

/etc/init.d/php-fpm restart

Actualiser la configuration

Réinitialisez le cache chaque fois que vous modifiez les paramètres dans /var/calculate/www/pixelfed/.env. Pour ce faire :

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

php artisan config:cache

php artisan route:cache

exit

Voici un exemple d'activation de l'API mobile.

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

Mettre à jour PixelFed

Récupérez le code source le plus récent de PixelFed :

su nginx -s /bin/bash

cd /var/calculate/www/pixelfed

git pull

Mettez à jour le code source, ainsi que tous ses composants :

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

Si ce n'est pas encore fait, créez des clés OAUTH :

php artisan passport:keys

Actualisez les paramètres et la base de données :

php artisan config:cache

php artisan route:cache

php artisan migrate --force

php artisan horizon:purge

php artisan storage:link

exit

Redémarrez PHP-FPM :

/etc/init.d/php-fpm restart