magentix

Développeur backend indépendant Web, e-commerce, Open-Source, low-tech, indie-web, slow-web, SSG, accessibility, PHP, Python

Billets : Une instance Pleroma pour se connecter au Fédivers


Une instance Pleroma pour se connecter au Fédivers

Par Matthieu le 06/12/2022

Pour se connecter au service de micro blogging du Fédivers il n'y a pas que Mastodon. Si vous n'avez pas l'envie de rejoindre une instance Mastodon déjà établie, Pleroma en auto-hébergement est une bonne alternative.


J'ai longtemps traîné à rejoindre le Fédivers. Par flemme d'utiliser autre chose que Twitter sur lequel je suis établi depuis 2009.

Mais en analysant ma timeline de Twitter, plusieurs éléments m'ont fait prendre conscience que c'était le moment de franchir le pas :

Auto-hébergement

J'ai hésité entre héberger Mastodon et Pleroma. De ce que j'ai lu, Mastodon est assez lourd. Un article de Lord m'a finalement convaincu de partir sur Pleroma : Pleroma : L'alternative à Mastodon.

Pourquoi auto-héberger ? C'est typiquement le genre d'application que l'on peut facilement poser sur un serveur à la maison.
Je ne vais y accueillir personne d'autre que moi. Une déconnexion n'aura pas beaucoup d'impact, hormis que je ne recevrai pas les nouveaux statuts le temps de la coupure.

J'ai constaté que Mastodon était davantage utilisé pour des grosses instances avec beaucoup de monde, Pleroma pour des petites communautés ou des instances personnelles.

ActivyPub

Avec ActivyPub (le protocole utilisé par le Fédivers) je reçois une requête de type POST dès lors qu'une personne ajoute un nouveau statut.

"POST /inbox HTTP/1.1" 200 5996 "-" "http.rb/5.1.0 (Mastodon/4.0.2; +https://framapiaf.org/)"
"POST /inbox HTTP/1.1" 200 5553 "-" "http.rb/5.1.0 (Mastodon/4.0.2; +https://mamot.fr/)"

C'est donc principalement du Push, si quelqu'un a quelque chose à dire, c'est envoyé à tout le monde par le biais d'une requête HTTP de type POST. L'instance doit être en mesure de stocker le message.

Si mon serveur est injoignable, le message ne sera pas ajouté dans mon "inbox".

La majorité des clients du Fédivers ont un système de "retry", dont la fréquence et le nombre de tentatives peuvent varier selon les instances. Suite à une coupure électrique de 2 heures sur mon installation, j'ai pu récupérer sans problème la totalité des statuts. Mais si le serveur reste trop longtemps injoignable, il finit généralement par être ignoré.

Avec ce système de Push, il n'est pas possible de visionner l'historique des messages des personnes auxquelles je m'abonne. La collecte commence dès lors que ma demande d'abonnement a été transmise.

Sur Pleroma tout est stocké dans une base de données PostgreSQL, qui grossira au rythme des messages reçus. Il existe des systèmes de purge pour effectuer un nettoyage de temps en temps. Un nettoyage manuel est aussi envisageable, par exemple : Purge des données Pleroma (Tetsumaki Blog).

Avec mes 30 abonnements actuels, le fichier dump de la base de données grossit d'environ 25mo tous les 10 jours.

Installation

Il y a 2 façons d'installer Pleroma : compiler depuis la source (nécessite Erlang + Elixir), ou récupérer la version OTP. J'ai choisi d'installer la dernière release OTP, c'est un peu plus simple et rapide. J'ai suivi la documentation officielle, mais en utilisant Apache et non nginx.

Si vous optez pour Apache, plusieurs modules sont nécessaires (mon serveur est sur Debian) :

a2enmod mod_proxy
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
a2enmod rewrite
a2enmod ssl
a2enmod cache
a2enmod cache_disk

Le vhost Apache utilisé comme Proxy :

# /etc/apache2/sites-available/pleroma.example.com-le-ssl.conf

ServerTokens Prod

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName pleroma.example.com

        ErrorLog ${APACHE_LOG_DIR}/pleroma-error.log
        CustomLog ${APACHE_LOG_DIR}/pleroma-access.log combined

        LogLevel warn

        SSLCertificateFile /etc/letsencrypt/live/pleroma.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/pleroma.example.com/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

        RewriteEngine On
        RewriteCond %{HTTP:Connection} Upgrade [NC]
        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteRule /(.*) ws://127.0.0.1:4000/$1 [P,L]
        ProxyRequests off
        ProxyPass / http://127.0.0.1:4000/
        ProxyPassReverse / http://127.0.0.1:4000/
        ProxyPreserveHost On
    </VirtualHost>
</IfModule>

Interface

Je suis resté sur le thème "Pleroma Dark" de l'interface utilisateur par défaut (PleromaFE). L'interface a un petit côté old school que j'apprécie.

Fédivers Instance Pleroma

Configuration

Il y a quelques configurations que j'ai souhaité modifier :

Le fichier de configuration est un fichier de config Elixir. La syntaxe est assez particulière et, je trouve, assez peu pratique... J'ai édité le fichier /etc/pleroma/config.exs avec les paramètres souhaités :

sudo nano /etc/pleroma/config.exs
config :pleroma, :instance,
  name: "Example",
  email: "admin@example.com",
  notify_email: "admin@example.com",
  limit: 5000,
  registrations_open: false,
  public: true,
  allow_relay: true

config :pleroma, :frontend_configurations,
  pleroma_fe: %{
    redirectRootNoLogin: "/about"
  }

config :pleroma, :shout,
  enabled: false

Toutes les configurations sont détaillées dans la documentation officielle : Pleroma Configuration Cheat Sheet.

Personnalisation

Il est assez facile d'ajouter un peu de CSS pour apporter une touche personnelle.

Pleroma charge un fichier index.html que l'on peut copier dans un dossier spécifique. Si le fichier existe il est utilisé à la place du fichier natif. Cela permet de surcharger sans risque de tout écraser lors d'une mise à jour.

cp /opt/pleroma/lib/pleroma-2.4.4/priv/static/index.html /var/lib/pleroma/static/

Note: le "static-dir" a été définie à l'installation, il peut être modifié dans le fichier de configuration (/etc/pleroma/config.exs).

J'y ai simplement ajouté une balise de style "en ligne" pour apporter quelques modifications. Par exemple, la zone de saisie d'un nouveau statut affiche un placeholder avec le texte "Je viens d'atterrir en Tchéquie". Il n'est pas très utile. Ensuite PleromaFE applique un fond d'écran que je ne souhaite pas imposer aux visiteurs. Au final l'élément style ressemble à :

<style>
.post-status-form .form-post-body::placeholder{color:transparent}
.app-bg-wrapper{background-image:none !important}
</style>

J'ai également ajouté au dossier static le favicon, le logo et les "Terms of service" :

/var/lib/pleroma/static/favicon.png
/var/lib/pleroma/static/index.html
/var/lib/pleroma/static/static/terms-of-service.html
/var/lib/pleroma/static/static/logo.svg

Application mobile

Pour l'application mobile Android j'utilise Husky, qui ressemble énormément à l'interface mobile de Twitter :

Husky vs. Twitter

Une question ? Rejoignez-moi sur le Fédivers :
@magentix@magentix.space