Projet

Général

Profil

Mastodon » Historique » Version 47

loris.hilaire, 13/03/2020 14:52

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
    systemctl stop mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
23
24
Repasser sur l'utilisateur mastodon (jongler avec deux terminaux peut faciliter la tâche et éviter ces allers-retours) :
25
26
    su - mastodon
27
    cd live
28
    git fetch
29
    git checkout v[numero-de-version]
30
    bundle install
31
    yarn install
32
    RAILS_ENV=production bundle exec rails db:migrate
33
    RAILS_ENV=production bundle exec rails assets:precompile
34
    exit
35
36
Une version plus complète, qui vérifie les besoins en termes de dépendances, est celle-ci (conseillée) :
37
38
    su - mastodon
39
    cd live
40
    git fetch
41
    git checkout v[numero-de-version]
42
    export RAILS_ENV=production
43
    export NODE_ENV=production
44
    bundle install --deployment --without test development
45
    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.
46
    yarn
47
    RAILS_ENV=production bundle exec rake assets:clobber
48
    RAILS_ENV=production bundle exec rake assets:precompile
49
    RAILS_ENV=production bundle exec rake db:migrate
50
    exit
51
52
Il peut aussi y avoir besoin de mettre à jour Ruby (ici 2.4.1) :
53
54
    su - mastodon
55
    cd ~/.rbenv/plugins/ruby-build
56
    git pull
57
    rbenv install 2.4.1
58
    (rbenv rehash)
59
    cd ~/live
60
    git fetch
61
    git checkout v[numero-de-version]
62
    gem install bundler
63
    bundle install --deployment --without development test
64
    yarn install
65
    RAILS_ENV=production bundle exec rails db:migrate
66
    RAILS_ENV=production bundle exec rails assets:precompile
67
    exit
68
69
Enfin, il peut être nécessaire d'upgrader npm ; dans ce cas, avant de fetch Mastodon, faire :
70
71
    npm cache clean -f
72
    npm install -g n
73
    n stable
74
75
Si tout s'est bien passé, on relance les services :
76
77
    systemctl start mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
78
79
Et on checke que tout est au vert :
80
81
    systemctl status mastodon-web.service mastodon-sidekiq.service mastodon-streaming.service
82
83
On peut ensuite informer les utilisateurs du retour à la normale et que la mise à jour a bien été effectuée \!
84
85
## Certificat Let's Encrypt
86
87
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.
88
89
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 :
90
91
    sudo certbot renew
92
    sudo service nginx reload
93
94
Si cela ne semble pas fonctionner, rallonger comme suit :
95
96
    certbot certonly -n --cert-name toot.aquilenet.fr --webroot -w /srv/letsencrypt/ -d toot.aquilenet.fr
97
    sudo service nginx reload
98
99
Si cela ne fonctionne toujours pas, passer en root et carrément créer un nouveau certificat en écrasant l'ancien :
100
101
    service nginx stop
102
    letsencrypt certonly -d toot.aquilenet.fr --agree-tos -m admin@aquilenet.fr --rsa-key-size 4096 --standalone
103
    service nginx start
104
105
### Backups
106
107
Actuellement, une backup du nécessaire (Postgres + Ruby) est faire par BackupNinja.
108
109 47 loris.hilaire
## Stockage et maintenance
110 46
111
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.
112 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.
113 46
114 47 loris.hilaire
### Supprimer les vieux médias distants
115
116 46
Une task a été créée pour Mastodon et ajoutée dans le cron de l'utilisateur mastodon (lancé quotidiennement) :
117
118 47 loris.hilaire
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove
119 46
120
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.
121 47 loris.hilaire
122
### Supprimer les médias orphelins
123
124
Des médias locaux sans lien avec quoi que ce soit peuvent continuer à occuper de l'espace. Ils peuvent être supprimés automatiquement avec :
125
126
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl media remove-orphans
127
128
### Supprimer de la BDD les comptes n'existant plus
129
130
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 :
131
132
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/cull remote accounts
133
134
### Supprimer de la BDD les pouets distants et sans engagement
135
136
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.
137
138
    cd /home/mastodon/live && RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec /home/mastodon/live/bin/tootctl status remove