Projet

Général

Profil

Actions

Mastodon

Présentation

Mastodon est un réseau social libre et décentralisé, développé par Eugen Rochko, qui a connu une croissance exponentielle en début avril 2017. Aquilenet a donc mis en place son instance afin de participer et de soutenir la montée en force du projet.

L'instance Mastodon Aquilenet est installée sur la VM Alcyon qui lui est dédiée et accessible à l'adresse toot.aquilenet.fr

Mise à jour

La mise à jour de Mastodon est assez simple, et se base principalement sur le github officiel => https://github.com/tootsuite/mastodon

Si une nouvelle version stable est disponible (cf https://github.com/tootsuite/mastodon/releases), des mises à jour sont disponible, pusher un toot sur le compte @aquilenet@toot.aquilenet.fr, pour annoncer une brève coupure des services. Si possible, prévoir de l'avance pour donner une heure de coupure. La mise à jour ne prend généralement que quelques minutes. Lire la rubrique "Upgrade notes" entièrement (parties "Non-Docker") pour vérifier les dépendances nécessaires et les étapes supplémentaires.

Activer/Désactiver le mode maintenance

Le mode maintenance est utile en cas de casse ou de grosse coupure de l'instance.
Pour la plupart des mises à jour, le service n'est coupé que le temps d'être relancé, le mode maintenance n'est pas nécessaire.

Pour l'activer :

cd /etc/nginx/sites-enabled && rm mastodon.conf && ln -s ../sites-available/maintenance.conf maintenance.conf && systemctl reload nginx

Pour le désactiver :

cd /etc/nginx/sites-enabled && rm maintenance.conf && ln -s ../sites-available/mastodon.conf mastodon.conf && systemctl reload nginx

Procédures de mise à jour

Si les dépendances sont à jour, la procédure classique est la suivante :

su - mastodon
cd live
git fetch
git checkout v[numero-de-version]
bundle install
yarn install --immutable
(si nécessaire, cf releases notes) RAILS_ENV=production bundle exec rake assets:clobber
(si nécessaire, cf releases notes) RAILS_ENV=production bundle exec rake assets:precompile
(si nécessaire, cf releases notes) bundle exec rake db:migrate)

Ignorer les warnings éventuels, ne s'arrêter qu'en cas d'erreur bloquante.
Si besoin de mettre à jour des dépendances, le faire avant la procédure ci-dessus.

Pour Ruby :

su - mastodon
cd live
git -C "$(rbenv root)"/plugins/ruby-build pull
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install [numero-de-version]
rbenv global [numero-de-version]
rbenv rehash
gem install bundler --no-document

Vérifier la présence et éventuellement supprimer les versions obsolètes de ruby dans /home/mastodon/live/vendor/bundle/ruby
Vérifier la présence et éventuellement supprimer les versions obsolètes de node dans /usr/local/n/versions/node/

Pour node :

su - mastodon
npm cache clean -f
npm install -g n
n stable

Si tout s'est bien passé, relancer les services :

systemctl stop mastodon-*.service
systemctl start mastodon-streaming@4001 && systemctl start mastodon-streaming@4002 && systemctl start mastodon-*.service --all

Vérifier que tout est au vert :

systemctl status mastodon-*.service

Informer les utilisateur-ices du retour à la normale et que la mise à jour a bien été effectuée.

Certificat Let's Encrypt

toot.aquilenet.fr utilise un certificat Let's Encrypt pour proposer du SSL/TLS de qualité. Malheureusement, Let's Encrypt demande encore et toujours un renouvellement tous les 3 mois.

Le renouvellement est automatisé par un cron daily qui teste tous les jours si l'expiration du certificat est < 30 jours et lance le script renewCerts.sh disponible dans /srv/letsencrypt. Si jamais cela ne fonctionne pas, pour renouveler le certificat :

sudo certbot renew
sudo service nginx reload

Si cela ne semble pas fonctionner, rallonger comme suit :

certbot certonly -n --cert-name toot.aquilenet.fr --webroot -w /srv/letsencrypt/ -d toot.aquilenet.fr
sudo service nginx reload

Si cela ne fonctionne toujours pas, passer en root et carrément créer un nouveau certificat en écrasant l'ancien :

service nginx stop
letsencrypt certonly -d toot.aquilenet.fr --agree-tos -m admin@aquilenet.fr --rsa-key-size 4096 --standalone
service nginx start

Backups

Actuellement, une backup du nécessaire (Postgres + Ruby) est faire par BackupNinja.

Stockage et maintenance

Mastodon stocke localement tous les médias distants affichés par les utilisateurs de l'instance. Un NFS a été monté sur Saya afin de permettre de tenir la charge qui monte exponentiellement.
De plus, la base de données peut se remplir plus que de raison avec des données qui n'ont plus aucun intérêt.

Supprimer les vieux médias distants

Une task a été créée pour Mastodon et ajoutée dans le cron de l'utilisateur mastodon (lancé quotidiennement). Elle permet de supprimer tous les médias distants supérieurs à 7 jours du cache de l'instance. Les liens restent trouvables dans les toots associés, donc l'impact est mineur pour l'utilisateur, et bénéfique pour nous.

cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove

Supprimer les médias orphelins

La commande ci-après cherche les fichiers qui ne semblent pas êtres des médias attachés à quoi que ce soit, et les supprime. L'opération va tester chaque fichier individuellement, donc c'est lent.

cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove-orphans

Supprimer de la BDD les comptes n'existant plus

Certains comptes présents dans la BDD ainsi que des données liées à ceux-ci prennent de la place alors qu'ils n'existent plus. Pour faire le ménage, la commande ci-dessous va vérifier pour chaque compte présent dans la base de données s'il existe encore sur le serveur d'origine, et si ce n'est pas le cas, le supprimer de la base de données. Les comptes ayant confirmé être actif dans la dernière semaine ne sont pas testés, au cas où le serveur les hébergeant serait juste down.

cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts cull

Supprimer de la BDD les pouets distants et sans engagement

Cette commande va supprimer tous les pouets datés de plus de 90 jours (par défaut) qui n'ont pas été fav, boostés, ou sauvegardés par des utilisateurs de l'instance locale, et n'ont reçu aucune réponse (cette condition est un peu étrange et peut entraîner la suppression de différents pouets si on la lance plusieurs fois d'affilé). Par défaut, ça ne supprime pas les statuts de comptes suivis, mais on peut modifier cette option.

cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl status remove

Récupérer les médias perdus

Cette commande force Mastodon à chercher à récupérer tous les médias perdus (par exemple, des avatars). Cependant, elle semble imparfaite, et ne corrige donc que partiellement le problème. Néanmoins, ça peut aider :

cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts refresh --all

Une solution alternative est de passer par la console de ruby, à la main, et de cibler spécifiquement l'utilisateur-ice dont on veut récupérer l'avatar :

cd /home/mastodon/live
RAILS_ENV=production bundle exec rails c
a = Account.find_remote('USERNAME', 'REMOTE.DOMAIN')
a.reset_avatar!
a.save
exit

Re-créer un compte supprimé.

Après s'être assuré de la légitimité de la demande !

su - mastodon
cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts create $USERNAME --reattach --force --email $EMAIL

cf https://github.com/mastodon/mastodon/issues/4614#issuecomment-1307822170

Puis via l'interface d'admin https://toot.aquilenet.fr/admin/accounts?origin=local, chercher le login utilisé puis renvoyer un mail de confirmation.

Mis à jour par loris.hilaire il y a 10 jours · 73 révisions