Projet

Général

Profil

Mastodon » Historique » Version 59

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