Quelques astuces pour mettre votre Mastodon au régime

Mastodon est l'outil que j'utilise pour être présent sur le fédiverse. J'ai choisi de créer ma propre instance pour être chez moi et mettre en avant le côté décentralisé, principe même du fédiverse et ainsi éviter les silos de données que peuvent être les grosses instances telles que mastodon.social, mamot.fr, framapiaf. La contre-partie à ça, c'est que je dois administrer la machine et que Mastodon porte bien son nom. Il est lourd et ça ne va pas en s'arrangeant. J'avais remonté ce soucis il y a plus de 2 ans dans ce ticket qui est pour le moment resté lettre morte.

Le problème de la décentralisation sans délai d'invalidation des données

Mastodon a choisi la distribution à la décentralisation. Tous les fichiers postés par un utilisateur du fédiverse sont envoyés sur chaque instance sur laquelle au moins une personne suit cette dernière. Le gros avantage, c'est que chaque système est autonome, la charge est répartie en fonction de l'instance qui accueille un nombre d'utilisateurs et une petite instance ne verra pas ses ressources (trop) torpillées par une grosse instance. Le revers de la médaille, c'est que chaque instance voit inexorablement gonfler le volume de ses données avec le temps. Si vous consultez votre compte régulièrement, les chances sont faibles pour que vous souhaitiez lire à nouveau un pouet qui date de plusieurs jours/heures/semaines. Le microbloging se base plutôt sur des échanges instantanés.

Supprimer les médias inutiles

L'idée ici est de supprimer les fichiers de type média vieux de plus de 3 jours. Si vous trouvez que ce délai est trop court, libre à vous de le modifier. Si vous souhaitez garder l'historique complet des personnes que vous suivez, ce n'est clairement pas la chose à faire. Cette étape est irréversible.

#! /bin/bash
RAILS_ENV=production
cd /home/mastodon/live
bin/tootctl media remove --days 3
bin/tootctl preview_cards remove --days 3

Supprimer les headers inutiles

Les images qui décorent le haut des profils est une autre fonctionnalité gourmande en espace disque. Certaines pouvant peser plusieurs mégas, je vous laisse imaginer l'impact avec des milliers de comptes recensés. J'ai créé un script permettant de remplacer les images qui font plus de 100ko pour gagner un maximum de place. Il est disponible sur Gitlab.

Conclusion

Loin d'être idéales, ces méthodes me permettent de profiter de Mastodon sans voir mon disque se remplir de fichiers qui ne me semblent plus nécessaires. J'espère cependant qu'une commande sera ajoutée à tootctl pour prendre en compte ce cas d'usage. Cette problématique est remontée à la surface depuis la dernière vague de migration en date des déçus de l'oiseau bleu.

ps : Cet article est en brouillon chez moi depuis près de 2 ans. La nouvelle vague d'arrivée sur Mastodon m'a motivée à le publier. Je me suis dit que les personnes tentées pour monter leur propre instance pouvaient être intéressées.

Désactiver FLoC de tous vos vhosts Apache2 en une fois

FLoC (Federated Learning of Cohorts) est le nouveau moyen de traçage de Google qui a senti le vent tourner concernant le tracking à base de cookies. Je ne vais pas m'étendre sur le fonctionnement de FLoC mais si le sujet vous intéresse, je vous recommande la lecture de l'article « Google chante le requiem pour les cookies, mais le grand chœur du pistage résonnera encore ».

Utilisant Apache2 pour servir mes sites, je ne souhaitais ajouter globalement l'en-tête à envoyer pour désactiver le pistage. Que ce soit pour les futurs sites ou la mise à jour de cette directive, je n'aurai qu'à modifier cette configuration.

Ayant de l'Ubuntu par chez moi, l'arborescence présentée peu être différente de la vôtre mais l'idée est de créer un nouveau fichier de configuration qui sera chargé globalement. Le mod headers devra être activé pour que cette directive fonctionne. Sur Ubuntu / Debian-like :

sudo a2enmod headers

Je vais créer le fichier /etc/apache2/conf-enabled/floc.conf avant d'y ajouter le contenu qui suit :

<IfModule mod_headers.c>
  Header always set Permissions-Policy: interest-cohort=()
</IfModule>

Relancez ensuite la lecture des fichiers de configuration :

sudo service apache2 reload

Et c'est fini. Vous pouvez vérifier vous-même si l'en-tête est bien ajouté ou utiliser l'outil proposé par eWatcher.

Merci Google pour cet en-tête gratuit que tu m'obliges à envoyer à mes visiteurs pour éviter que tu ne te serves de leur vie privée pour faire ton beurre. À noter que ce tracking n'est effectif (pour le moment) que chez les utilisateurs de Chrome. Si ce n'est déjà fait, passez à Firefox.

Avec TweetsReader, lisez les tweets qui vous intéressent quand vous voulez

En 2021, je communique

Sur mon temps libre, j'aime développer des outils qui facilitent mon quotidien. Je les partage en général sur Gitlab ou/et Github. Si seulement j'avais un blog perso pour en parler… Merci de ne pas évoquer l'adage du cordonnier ! 🙂

Dans quel but ?

Ceux qui me connaissent ou me lisent savent que je suis plus un grand fan de l'oiseau bleu. Je me suis aménagé mon petit bout de fédiverse où je choisis ce que je vois, loin de l'économie de l'attention. Mais le monde des bisounours n'existant pas et ces plate-formes restant attractives, certaines personnes que je souhaite continuer à suivre ne publient que sur Twitter.

Lire le fil sur leur site ne va pas forcément m'afficher tous les tweets, surtout si je n'y suis pas retourné depuis un moment. L'algorithme de Twitter décidera de ce je vois. Les listes sont mieux loties mais je ne vais pas vraiment savoir où je m'étais arrêté. Avec TweetsReader, je suis sûr de ne rien louper et si les posts les plus anciens ne m'intéresse pas, je peux les supprimer rapidement et ne garder que les plus récents. Je vois en un coup d'œil ce que j'ai loupé.

Comment ça marche ?

C'est une application PHP qui suit le principe KISS (Keep it simple, stupid). Pour l'installation, je vous conseille d'aller voir le README. Vous pouvez lire votre fil de tweets dans l'ordre chronologique. Si vous êtes un adepte des listes, le fichier de configuration peut accueillir l'identifiant de la liste souhaitée.

L'API de Twitter étant limitée et ne souhaitant pas perdre de tweets non-lus, j'utilise une tâche cron qui va chercher les tweets et les stocke sous forme de fichiers sur le disque. Pas besoin de base de données. Les avatars sont également stockés localement. La vie privée et la légèreté sont volontairement au cœur de cette application.

En terme d'actions, vous pouvez :

  • filtrer les tweets par utilisateur (JS requis)
  • marquer tous les tweets comme lus
  • marquer les tweets jusqu'à un tweet précis comme lus (utile si vous en avez plusieurs centaines à lire)
  • voir les images et vidéos directement depuis le lecteur en cliquant sur le lien en fin de tweet démarrant par MEDIA:: (rustique mais fonctionnel)

C'est pas très beau

Capture d'écran de TweetsReader.

Je ne suis pas designer et ça se voit. J'arrangerai peut-être ça un jour, ou jamais. Après plusieurs mois d'utilisation, je n'en éprouve pas vraiment le besoin mais si quelqu'un se motive pour me faire une proposition, je reste ouvert.

Et après ?

Je n'ai rien de bien précis en tête, cette version représentant pour moi le produit minimum viable. Si l'envie me prend, j'aimerais ajouter une information concernant l'arrivée de nouveaux messages privés ou de mentions. Je ne reçois pas toujours les mails de notification prévus à cet effet ce qui m'oblige à retourner de temps en temps sur leur site. Il est également probable que je gère un thème sombre, toujours pratique pour confortablement dans un espace à l’atmosphère tamisée.

Si vous rencontrez des soucis à l'utilisation, vous pouvez rédiger un rapport de bug et si vous souhaitez contribuer au projet, les merge requests sont ouvertes.

Migration des données depuis PostgreSQL 10 vers 12 à l’aide de pg_upgradecluster

J'ai pris le temps ce week-end de passer mes serveurs Postgres de la version 10 à 12. Voici donc mon pense-bête d'une procédure effectuée sur Ubuntu. Notez que si vous êtes en 20.04 LTS ou supérieure, l'installation du paquet postgresql-12 a déjà dû passer.

La sauvegarde avant tout

Je ne peux que vous recommander de faire une sauvegarde de l'ensemble de vos bases avant toute interventions afin de pouvoir revenir en arrière si les choses tournent mal.

sudo -u postgres psql pg_dumpall > postgres-backup-20210131.sql # Sauvegarde des bases

La mise à jour

sudo systemctl stop postgresql # Arrêt du service postgresql
sudo apt-get install -y postgresql-12 # Installation du paquet postgresql-12 sans demande de confirmation, optionnel si vous êtes déjà en 20.04 ou supérieure
sudo pg_dropcluster 12 main --stop # Suppression du cluster par défaut de la version 12 créé lors de l'installation
sudo pg_upgradecluster 10 main # Mise à jour du cluster depuis la version 10 vers la dernière version (ici, la 12)
sudo pg_dropcluster 10 main --stop # Suppression du cluster de la version 10
sudo systemctl restart postgresql # Relance du service postgresql
psql --version # Vérification de la version de postgresql en cours (doit vous retourner une information contenant 12.x)

Rien de bien sorcier mais vu que c'est une opération que je fais rarement, c'est toujours bon de garder ça bien au chaud dans un coin pour la prochaine fois et si d'autres trouvent ça utile, c'est encore mieux.

Lire les logs d’un mutualisé OVH avec GoAccess

Je vous ai présenté GoAccess il y a quelques temps pour interpréter vos logs Apache. Cette fois, je vais vous expliquer comment permettre à GoAccess d'interpréter les fichiers produits par les serveurs mutualisés d'OVH.

Le logo de GoAccess.

Configuration

Une fois GoAccess installé, éditez ou créez le fichier .goaccessrc au niveau de votre home utilisateur et ajoutez-y les lignes suivantes :

  • log-format %h %v - %^[%d:%t %^] "%r" %s %b "%R" "%u"
  • time-format %H:%M:%S
  • date-format %d/%b/%Y

Récupérer les logs chez OVH

Je ne peux que vous conseiller d'aller ajouter un utilisateur pouvant accéder aux logs histoire de pouvoir utiliser son mot de passe dans un script qui automatisera la tâche de récupération (dans un cron mensuel par exemple). Ce guide dédié vous expliquera comment faire.

Connectez-vous ensuite à l'espace de gestion des logs à l'aide de l'adresse suivante : https://logs.ovh.net/votredomaine.tld.

Lancer l'analyse

Comme vu dans mon précédent billet sur ce sujet, vous pouvez directement analyser les archives à l'aide de la commande zcat.

zcat /var/log/apache2-backup/domain.tld/2017-03/domain.tld-* | goaccess -c --ignore-crawlers -a

Ajouter le domaine aux requêtes

Lorsque plusieurs domaines sont configurés, il est utile de pouvoir connaître lequel est responsable d'une requête en particulier. Pour cela, la commande awk permet de placer automatiquement cette information au bon endroit.

zcat /var/log/apache2-backup/domain.tld/2017-03/domain.tld-* | awk '$7=$2$7' | goaccess -c --ignore-crawlers -a