Projet

Général

Profil

Mastodon » Historique » Version 55

loris.hilaire, 05/09/2023 22:46

1 46
# Mastodon
2
3
## Présentation
4
5
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.
6
7
L'instance Mastodon Aquilenet est installée sur la VM Alcyon qui lui est dédiée et accessible à l'adresse toot.aquilenet.fr
8
9
## Mise à jour
10
11
La mise à jour de Mastodon est assez simple, et se base principalement sur le github officiel =\> https://github.com/tootsuite/mastodon
12
13
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.
14
15
Ensuite, repasser en root
16
17
    su - monutilisateur
18
    sudo su
19
20
Et stopper les services Mastodon :
21
22 54 loris.hilaire
    systemctl stop mastodon-*.service
23
    NB : mastodon-sidekiq.service n'est plus utilisé, nous utilisons à la place un autre service qui gère mieux Sidekiq & les queues
24 46
25
Repasser sur l'utilisateur mastodon (jongler avec deux terminaux peut faciliter la tâche et éviter ces allers-retours) :
26
27
    su - mastodon
28
    cd live
29
    git fetch
30
    git checkout v[numero-de-version]
31
    bundle install
32
    yarn install
33
    RAILS_ENV=production bundle exec rails db:migrate
34
    RAILS_ENV=production bundle exec rails assets:precompile
35
    exit
36
37
Une version plus complète, qui vérifie les besoins en termes de dépendances, est celle-ci (conseillée) :
38
39
    su - mastodon
40
    cd live
41
    git fetch
42
    git checkout v[numero-de-version]
43
    export RAILS_ENV=production
44
    export NODE_ENV=production
45
    bundle install --deployment --without test development
46
    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.
47
    yarn
48
    RAILS_ENV=production bundle exec rake assets:clobber
49
    RAILS_ENV=production bundle exec rake assets:precompile
50
    RAILS_ENV=production bundle exec rake db:migrate
51
    exit
52
53
Il peut aussi y avoir besoin de mettre à jour Ruby (ici 2.4.1) :
54
55
    su - mastodon
56
    cd ~/.rbenv/plugins/ruby-build
57
    git pull
58
    rbenv install 2.4.1
59
    (rbenv rehash)
60
    cd ~/live
61
    git fetch
62
    git checkout v[numero-de-version]
63
    gem install bundler
64
    bundle install --deployment --without development test
65
    yarn install
66
    RAILS_ENV=production bundle exec rails db:migrate
67
    RAILS_ENV=production bundle exec rails assets:precompile
68
    exit
69
70 51 mathias.bert-barbedienne
    Vérifier la présence et éventuellement supprimer les versions obsolètes de ruby dans /home/mastodon/live/vendor/bundle/ruby
71
    Vérifier la présence et éventuellement supprimer les versions obsolètes de node dans /usr/local/n/versions/node/
72
73 46
Enfin, il peut être nécessaire d'upgrader npm ; dans ce cas, avant de fetch Mastodon, faire :
74
75
    npm cache clean -f
76
    npm install -g n
77
    n stable
78
79
Si tout s'est bien passé, on relance les services :
80
81 55 loris.hilaire
    systemctl start mastodon-*.service --all
82 46
83
Et on checke que tout est au vert :
84
85 54 loris.hilaire
    systemctl status mastodon-*.service
86 46
87
On peut ensuite informer les utilisateurs du retour à la normale et que la mise à jour a bien été effectuée \!
88
89
## Certificat Let's Encrypt
90
91
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.
92
93
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 :
94
95
    sudo certbot renew
96
    sudo service nginx reload
97
98
Si cela ne semble pas fonctionner, rallonger comme suit :
99
100
    certbot certonly -n --cert-name toot.aquilenet.fr --webroot -w /srv/letsencrypt/ -d toot.aquilenet.fr
101
    sudo service nginx reload
102
103
Si cela ne fonctionne toujours pas, passer en root et carrément créer un nouveau certificat en écrasant l'ancien :
104
105
    service nginx stop
106
    letsencrypt certonly -d toot.aquilenet.fr --agree-tos -m admin@aquilenet.fr --rsa-key-size 4096 --standalone
107
    service nginx start
108
109
### Backups
110
111
Actuellement, une backup du nécessaire (Postgres + Ruby) est faire par BackupNinja.
112
113 47 loris.hilaire
## Stockage et maintenance
114 46
115
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.
116 47 loris.hilaire
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.
117 46
118 47 loris.hilaire
### Supprimer les vieux médias distants
119
120 49 loris.hilaire
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.
121 46
122 47 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove
123 46
124 47 loris.hilaire
### Supprimer les médias orphelins
125
126 49 loris.hilaire
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.
127 47 loris.hilaire
128 46
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove-orphans
129 47 loris.hilaire
130
### Supprimer de la BDD les comptes n'existant plus
131
132 49 loris.hilaire
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.
133 47 loris.hilaire
134 48 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts cull
135 47 loris.hilaire
136
### Supprimer de la BDD les pouets distants et sans engagement
137
138
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.
139
140
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl status remove
141 50 loris.hilaire
142
### Récupérer les médias perdus
143
144
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 :
145
146
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts refresh --all
147
148
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 :
149
150
    cd /home/mastodon/live
151
    RAILS_ENV=production bundle exec rails c
152
    a = Account.find_remote('USERNAME', 'REMOTE.DOMAIN')
153
    a.reset_avatar!
154
    a.save
155
    exit
156 53 mathias.bert-barbedienne
157
### Re créer un compte supprimé.
158
159
Après s'être assuré de la légitimité de la demande !
160
`sudo su mastodon`
161
`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`
162
cf https://github.com/mastodon/mastodon/issues/4614#issuecomment-1307822170
163
164
Puis via l'interface d'admin `https://toot.aquilenet.fr/admin/accounts?origin=local`
165
chercher le login utilisé puis renvoyer un mail de confirmation.