Project

General

Profile

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

Ensuite, repasser en root

su - monutilisateur
sudo su

Et stopper les services Mastodon :

systemctl stop mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service

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 --deployment --without test development
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
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 rehash)
cd ~/live
git fetch
git checkout v[numero-de-version]
gem install bundler
bundle install --deployment --without development test
yarn install
RAILS_ENV=production bundle exec rails db:migrate
RAILS_ENV=production bundle exec rails assets:precompile
exit

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-web.service mastodon-sidekiq.service mastodon-streaming.service

Et on checke que tout est au vert :

systemctl status mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service

On peut ensuite informer les utilisateurs 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 des médias

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.

Une task a été créée pour Mastodon et ajoutée dans le cron de l'utilisateur mastodon (lancé quotidiennement) :

@daily cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec rake mastodon:media:remove_remote NUM_DAYS=7

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

Updated by loris.hilaire over 1 year ago · 46 revisions