Projet

Général

Profil

Mastodon » Historique » Version 66

loris.hilaire, 17/12/2024 11:00

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 66 loris.hilaire
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.**
14 46
15 60 loris.hilaire
### Activer/Désactiver le mode maintenance
16 46
17 60 loris.hilaire
Le mode maintenance est utile en cas de casse ou de grosse coupure de l'instance.
18
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.
19 57 sacha
20 60 loris.hilaire
Pour l'activer :
21 46
22 60 loris.hilaire
    cd /etc/nginx/sites-enabled && rm mastodon.conf && ln -s ../sites-available/maintenance.conf maintenance.conf && systemctl reload nginx
23 46
24 60 loris.hilaire
Pour le désactiver :
25 46
26 60 loris.hilaire
    cd /etc/nginx/sites-enabled && rm maintenance.conf && ln -s ../sites-available/mastodon.conf mastodon.conf && systemctl reload nginx
27 46
28 63 loris.hilaire
### Procédures de mise à jour
29 46
30 61 loris.hilaire
Si les dépendances sont à jour, la procédure classique est la suivante :
31
32 46
    su - mastodon
33
    cd live
34
    git fetch
35 59 loris.hilaire
    git checkout v[numero-de-version]
36 46
    bundle install
37 60 loris.hilaire
    yarn install --immutable
38
    (si nécessaire, cf releases notes) RAILS_ENV=production bundle exec rake assets:clobber
39
    (si nécessaire, cf releases notes) RAILS_ENV=production bundle exec rake assets:precompile
40 59 loris.hilaire
    (si nécessaire, cf releases notes) bundle exec rake db:migrate)
41 46
    exit
42
43 64 loris.hilaire
Ignorer les warnings éventuels, ne s'arrêter qu'en cas d'erreur bloquante.
44 61 loris.hilaire
Si besoin de mettre à jour des dépendances, **le faire avant la procédure ci-dessus**.
45 46
46 61 loris.hilaire
Pour Ruby :
47 62 loris.hilaire
48 61 loris.hilaire
    su - mastodon
49
    cd live
50 51 mathias.bert-barbedienne
    git -C "$(rbenv root)"/plugins/ruby-build pull
51 61 loris.hilaire
    RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install [numero-de-version]
52
    rbenv global [numero-de-version]
53 46
    (si nécessaire, rbenv rehash)
54 60 loris.hilaire
    (si nécessaire, gem install bundler --no-document)
55 62 loris.hilaire
56 60 loris.hilaire
Vérifier la présence et éventuellement supprimer les versions obsolètes de ruby dans /home/mastodon/live/vendor/bundle/ruby
57 46
Vérifier la présence et éventuellement supprimer les versions obsolètes de node dans /usr/local/n/versions/node/
58 60 loris.hilaire
59 61 loris.hilaire
Pour node :
60 62 loris.hilaire
61 61 loris.hilaire
    su - mastodon
62 46
    npm cache clean -f
63 59 loris.hilaire
    npm install -g n
64 46
    n stable
65 60 loris.hilaire
66 46
Si tout s'est bien passé, relancer les services :
67 60 loris.hilaire
68 46
    systemctl stop mastodon-*.service
69
    systemctl start mastodon-streaming@4001 && systemctl start mastodon-streaming@4002 && systemctl start mastodon-*.service --all
70 60 loris.hilaire
71 57 sacha
Vérifier que tout est au vert :
72
73
    systemctl status mastodon-*.service
74 60 loris.hilaire
75 46
Informer les utilisateur-ices du retour à la normale et que la mise à jour a bien été effectuée.
76
77
## Certificat Let's Encrypt
78
79
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.
80
81
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 :
82
83
    sudo certbot renew
84
    sudo service nginx reload
85
86
Si cela ne semble pas fonctionner, rallonger comme suit :
87
88
    certbot certonly -n --cert-name toot.aquilenet.fr --webroot -w /srv/letsencrypt/ -d toot.aquilenet.fr
89
    sudo service nginx reload
90
91
Si cela ne fonctionne toujours pas, passer en root et carrément créer un nouveau certificat en écrasant l'ancien :
92
93
    service nginx stop
94
    letsencrypt certonly -d toot.aquilenet.fr --agree-tos -m admin@aquilenet.fr --rsa-key-size 4096 --standalone
95
    service nginx start
96
97
### Backups
98
99
Actuellement, une backup du nécessaire (Postgres + Ruby) est faire par BackupNinja.
100 47 loris.hilaire
101 46
## Stockage et maintenance
102
103 47 loris.hilaire
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.
104 46
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.
105 47 loris.hilaire
106
### Supprimer les vieux médias distants
107 49 loris.hilaire
108 46
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.
109 47 loris.hilaire
110 46
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove
111 47 loris.hilaire
112
### Supprimer les médias orphelins
113 49 loris.hilaire
114 47 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.
115 46
116 47 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove-orphans
117
118
### Supprimer de la BDD les comptes n'existant plus
119 49 loris.hilaire
120 47 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.
121 48 loris.hilaire
122 47 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts cull
123
124
### Supprimer de la BDD les pouets distants et sans engagement
125
126
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.
127
128 50 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl status remove
129
130
### Récupérer les médias perdus
131
132
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 :
133
134
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl accounts refresh --all
135
136
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 :
137
138
    cd /home/mastodon/live
139
    RAILS_ENV=production bundle exec rails c
140
    a = Account.find_remote('USERNAME', 'REMOTE.DOMAIN')
141
    a.reset_avatar!
142
    a.save
143 53 mathias.bert-barbedienne
    exit
144
145
### Re créer un compte supprimé.
146
147
Après s'être assuré de la légitimité de la demande !
148
`sudo su mastodon`
149
`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`
150
cf https://github.com/mastodon/mastodon/issues/4614#issuecomment-1307822170
151
152
Puis via l'interface d'admin `https://toot.aquilenet.fr/admin/accounts?origin=local`
153 46
chercher le login utilisé puis renvoyer un mail de confirmation.