Projet

Général

Profil

Mastodon » Historique » Révision 58

Révision 57 (sacha, 04/04/2024 10:33) → Révision 58/59 (sacha, 04/04/2024 10:34)

# 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. 

 ### Activer le mode maintenance 

     

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

 ### mise à jour 

 Ensuite, repasser en root 

     su - monutilisateur 
     sudo su 

 Et stopper les services Mastodon : 

     systemctl stop mastodon-*.service 
     NB : mastodon-sidekiq.service n'est plus utilisé, nous utilisons à la place un autre service qui gère mieux Sidekiq & les queues 

 Repasser sur l'utilisateur mastodon (jongler avec deux terminaux peut faciliter la tâche et éviter ces allers-retours) : 

     su - mastodon 
     cd live 
     git fetch 
     git checkout v[numero-de-version] 
     bundle install 
     yarn install 
     RAILS_ENV=production bundle exec rails db:migrate 
     RAILS_ENV=production bundle exec rails assets:precompile 
     exit 

 Une version plus complète, qui vérifie les besoins en termes de dépendances, est celle-ci (conseillée) : 

     su - mastodon 
     cd live 
     git fetch 
     git checkout v[numero-de-version] 
     export RAILS_ENV=production 
     export NODE_ENV=production 
     bundle install 
     (npm upgrade --global yarn #Peut avoir des problèmes d'accès. Auquel cas le faire en root après un cd /home/mastodon/live.) 
     yarn install 
     RAILS_ENV=production bundle exec rake assets:clobber 
     RAILS_ENV=production bundle exec rake assets:precompile 
     RAILS_ENV=production bundle exec rake db:migrate 
     exit 

 Il peut aussi y avoir besoin de mettre à jour Ruby (ici 2.4.1) : 

     su - mastodon 
     cd ~/.rbenv/plugins/ruby-build 
     git pull 
     rbenv install 2.4.1 
     rbenv global 2.4.1 
     (rbenv rehash) 
     gem install bundler --no-document 
     cd ~/live 
     git fetch 
     git checkout v[numero-de-version] 
     bundle install 
     yarn install 
     RAILS_ENV=production bundle exec rake assets:clobber 
     RAILS_ENV=production bundle exec rails db:migrate 
     RAILS_ENV=production bundle exec rails assets:precompile 
     exit 

     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/ 

 Enfin, il peut être nécessaire d'upgrader npm ; dans ce cas, avant de fetch Mastodon, faire : 

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

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

     systemctl start mastodon-*.service --all 

 Et on checke que tout est au vert : 

     systemctl status mastodon-*.service 

 On peut ensuite informer les utilisateurs du retour à la normale et que la mise à jour a bien été effectuée \! 


 ### désactiver le mode maintenance 

     

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

 ## 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 ! 
 `sudo 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.