Mastodon

Updated 2 Août 2021

Installation et configuration de Mastodon

Mastodon est une plateforme de microblogging libre et distribuée, qui fonctionne sur un réseau fédéré.

Préparer un conteneur LXC

Nous vous recommandons d'installer Mastodon dans un conteneur séparé en le configurant selon les instructions.

Installation et configuration de PostgreSQL

Installez et configurez PostgreSQL selon le wiki.

Configurez l'autorisation peer uniquement pour les connexions locales:

/etc/postgresql-12/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     all                                     trust
#host    replication     all             127.0.0.1/32            trust
#host    replication     all             ::1/128                 trust

Créer un utilisateur mastodon avec le droit de créer une base de données:

su postgres -c psql
psql (12.2)
Type "help" for help.

postgres=# CREATE USER mastodon CREATEDB;
CREATE ROLE
postgres=# \q

Installation de Mastodon

Installation des paquets système

Installez les logiciel:

emerge -a dev-db/redis dev-libs/icu dev-libs/protobuf dev-python/nodeenv dev-util/pkgconfig media-gfx/imagemagick media-video/ffmpeg net-dns/libidn

Démarrer Redis

Lancez Redis et ajoutez-le au démarrage automatique :

/etc/init.d/redis start

rc-update add redis

Création d'un utilisateur système

Créez un utilisateur système appelé mastodon:

mkdir -p /var/calculate/www

useradd -d /var/calculate/www/mastodon mastodon

Installation et configuration de rbenv et rbenv-build

Installez et configurez rbenv et rbenv-build dans le répertoire de l'utilisateur:

su mastodon

cd

git clone https://github.com/rbenv/rbenv.git ~/.rbenv

cd ~/.rbenv && src/configure && make -C src

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

exec bash

git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

Installation de Ruby

Installez la version requise de Ruby, 2.7.2 dans notre cas :

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install2.7.2

rbenv global2.7.2

La version par défaut de gem associée à ruby_2.7.2 n'est pas compatible avec la dernière version de bundler. Mettez donc à jour gem :

gem update --system

et installer bundler :

gem install bundler -f --no-document

Installation de Node.js et de Yarn

Installez-Node.js et Yarn dans le répertoire de l'utilisateur:

nodeenv --node=12.22.4 .node-12

ln -sfT .node-12 .node-live

source .node-live/bin/activate

npm install -g yarn

echo 'source ~/.node-live/bin/activate' >> ~/.bashrc

Chargement du référentiel Git pour Mastodon

Installez le code source sur le serveur:

git clone https://github.com/tootsuite/mastodon.git live

cd live

git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Définir les dépendances Ruby et Node.js

Installez les dépendances de Ruby :

bundle install -j$(getconf _NPROCESSORS_ONLN) --deployment --without development test

Installer les dépendances Node.js :

yarn install --pure-lockfile

Installation et configuration de Mastodon

Générer la configuration de mastodon.example.org en exécutant la commande:

RAILS_ENV=production bundle exec rake mastodon:setup
Your instance is identified by its domain name. Changing it afterward will break things.
Domain name: mastodon.example.org

Single user mode disables registrations and redirects the landing page to your public profile.
Do you want to enable single user mode? No

Are you using Docker to run Mastodon? no

PostgreSQL host: /var/run/postgresql
PostgreSQL port: 5432
Name of PostgreSQL database: mastodon_production
Name of PostgreSQL user: mastodon
Password of PostgreSQL user:
Database configuration works! 🎆

Redis host: localhost
Redis port: 6379
Redis password:
Redis configuration works! 🎆

Do you want to store uploaded files on the cloud? No

Do you want to send e-mails from localhost? No
SMTP server: mail.example.org
SMTP port: 465
SMTP username:
SMTP password:
SMTP authentication: starttls
SMTP OpenSSL verify mode: none
E-mail address to send e-mails "from": Mastodon 
Send a test e-mail with this configuration right now? Yes
Send test e-mail to: admin@example.org

This configuration will be written to .env.production
Save configuration? Yes

Now that configuration is saved, the database schema must be loaded.
If the database already exists, this will erase its contents.
Prepare the database now? Yes
Running `RAILS_ENV=production rails db:setup` ...

Created database 'mastodon_production'
...
Done!

The final step is compiling CSS/JS assets.
This may take a while and consume a lot of RAM.
Compile the assets now? Yes
Running `RAILS_ENV=production rails assets:precompile` ...

yarn install v1.15.2
...
Done!

All done! You can now power on the Mastodon server 🐘

Do you want to create an admin user straight away? Yes
Username: admin
E-mail: admin@example.org
You can login with the password: e3b316f78cbc2ec0bde5118c68414d73
You can change your password once you login.

Terminez la session utilisateur:

exit

Obtention d'un certificat Let's Encrypt

Obtenez un certificat de domaine mastodon.example.org pour Nginx selon le manuel.

Installation et configuration de Nginx

Installez et configurez votre serveur web Nginx en tant que mandataire inverse (reverse proxy) conformément au manuel.

Copiez l'exemple de configuration Nginx pour Mastodon :

cp /var/calculate/www/mastodon/live/dist/nginx.conf /etc/nginx/sites-enabled/mastodon.conf

Indiquez les chemins d'accès et le nom du serveur, mastodon.example.org :

/etc/nginx/sites-enabled/mastodon.conf
server {
  listen 80;
  listen [::]:80;
  server_name mastodon.example.org;
  root /var/calculate/www/mastodon/live/public;
  location /.well-known/acme-challenge/ { allow all; }
  location / { return 301 https://$host$request_uri; }
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name mastodon.example.org;

  # Uncomment these lines once you acquire a certificate:
  ssl_certificate /etc/letsencrypt/live/mastodon.example.org/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/mastodon.example.org/privkey.pem;
  ...
  root /var/calculate/www/mastodon/live/public;
  ...
}

Démarrer Mastodon

Créez des scripts OpenRC pour la gestion des services:

Script de démarrage Mastodon Web:

/etc/init.d/mastodon-web
#!/sbin/openrc-run

name="Mastodon Web daemon"
description=""
pidfile=/run/mastodon-web.pid
extra_commands="reload"
command_user=mastodon
output_log=/var/log/mastodon-web.log
error_log=/var/log/mastodon-web.log
directory=/var/calculate/www/mastodon/live
start_stop_daemon_args="-e RAILS_ENV=production -e PORT=3000"
command=/var/calculate/www/mastodon/.rbenv/shims/bundle
command_args="exec puma -C config/puma.rb"
command_background=true

depend() {
    use postgresql net redis
}

start_pre() {
    checkpath -f -o mastodon -m 0600 /var/log/mastodon-web.log
}

reload() {
    einfo "Reload $name"
    kill -USR1 $(cat $pidfile)
}

Voici un script pour démarrer Mastodon Streaming:

/etc/init.d/mastodon-streaming
#!/sbin/openrc-run
name="Mastodon streaming daemon"
description=""
pidfile=/run/mastodon-streaming.pid
command_user=mastodon
output_log=/var/log/mastodon-streaming.log
error_log=/var/log/mastodon-streaming.log
directory=/var/calculate/www/mastodon/live
start_stop_daemon_args="-e NODE_ENV=production -e PORT=4000 -e STREAMING_CLUSTER_NUM=1"
command=/var/calculate/www/mastodon/.node-live/bin/node
command_args="./streaming"
command_background=true

depend() {
    use postgresql net redis
}

start_pre() {
        checkpath -f -o mastodon -m 0600 /var/log/mastodon-streaming.log
}

et celui pour démarrer Mastodon Sidekiq:

/etc/init.d/mastodon-sidekiq
#!/sbin/openrc-run

name="Mastodon Sidekiq daemon"
description=""
pidfile=/run/mastodon-sidekiq.pid
command_user=mastodon
output_log=/var/log/mastodon-sidekiq.log
error_log=/var/log/mastodon-sidekiq.log
directory=/var/calculate/www/mastodon/live
start_stop_daemon_args="-e RAILS_ENV=production -e DB_POOL=25 -e MALLOC_ARENA_MAX=2"
command=/var/calculate/www/mastodon/.rbenv/shims/bundle
command_args="exec sidekiq -c 25"
command_background=true

depend() {
    use postgresql net redis
}

start_pre() {
    checkpath -f -o mastodon -m 0600 /var/log/mastodon-sidekiq.log
}

Définissez les permissions pour exécuter les services Mastodon:

chmod 0755 /etc/init.d/mastodon-*

Lancez les services de Mastodon:

/etc/init.d/mastodon-web start

/etc/init.d/mastodon-streaming start

/etc/init.d/mastodon-sidekiq start

Ajoutez-les au démarrage automatique :

rc-update add mastodon-web

rc-update add mastodon-streaming

rc-update add mastodon-sidekiq

Mettre à jour Mastodon

Mise à jour du référentiel Git

Mettez à jour le dépôt Git, où est stocké le code source de Mastodon :

su - mastodon

cd ~/live

git fetch --tags

git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Assurez-vous que la version du code source a changé :

git status
HEAD detached at v2.8.0
nothing to commit, no changes detected

Mettre à jour Ruby

À ce jour, Mastodon utilise Ruby 2.7.2. Si vous avez une version inférieure de Ruby, veuillez la mettre à jour.

Connectez-vous à la session utilisateur :

su - mastodon

Mettez à jour l'environnement de contrôle pour Ruby :

cd ~/.rbenv && git pull

cd ~/.rbenv/plugins/ruby-build && git pull

cd

Installez la version requise de Ruby, 2.7.2 dans notre cas :

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install2.7.2

rbenv global2.7.2

La version par défaut de gem associée à ruby_2.7.2 n'est pas compatible avec la dernière version de bundler. Mettez donc à jour gem :

gem update --system

et installer bundler :

gem install bundler -f --no-document

Rendez-vous dans le répertoire Mastodon pour vérifier que l'application utilise la version 2.6.6 :

cd ~/live && cat .ruby-version

2.7.2

Pour mettre à jour les dépendances de Ruby, exécutez :

bundle install --deployment --without development test

Terminez la session utilisateur:

exit

Mettre à jour Node.js

Si vous mettez à jour une version de Mastodon inférieure à 3.4, veillez utiliser Node.js 12 minimum :

node -v
v12.22.4

Pour une version antérieure à 12, installez la 12.22.4 dans le nouvel environnement .node-12 et indiquez-la comme version actuelle :

nodeenv --node=12.22.4 .node-12

ln -sfT .node-12 .node-live

Mise à jour du chemin d'accès lors d'une migration à partir de node-8

Si vous avez utilisé la version précédente de ce manuel pour configurer Mastodon, modifiez les scripts /var/calculate/www/mastodon et /etc/init.d/mastodon-streaming en remplaçant .node-8 par .node-live.

Mettez à jour les dépendances Ruby et Node.js

Il se peut que vous deviez mettre à jour Ruby et Node.js après être passé à une nouvelle version de Mastodon. Les notes de mise à jour mentionnées ci-dessus vous indiqueront si vous devez procéder jusqu'à la fin de ce chapitre.

Pour mettre à jour les dépendances de Ruby, exécutez :

bundle install --deployment --without development test

Pour mettre à jour les dépendances de Node.js, exécutez :

yarn install --pure-lockfile

Mettre à jour la structure de la base de données

Renouvelez la structure de la base de données à chaque mise à jour, jusqu'à ce que la nouvelle version de Mastodon soit disponible. Cette opération est sûre, puisque la mise à jour sera de toute façon ignorée si la structure ne change pas.

Pour effectuer la migration de la base de données, exécutez :

RAILS_ENV=production bundle exec rails db:migrate

Pré-compilation des ressources mises à jour

Il se peut que vous deviez précompiler les ressources mises à jour après avoir mis à niveau Mastodon. Les notes de mise à jour mentionnées ci-dessus vous indiqueront si vous devez procéder jusqu'à la fin de ce chapitre.

Pour pré-compiler :

RAILS_ENV=production bundle exec rails assets:precompile

Attention

Le précompilateur (Webpacker) peut être gourmand, en particulier en mémoire vive. Si vous constatez que votre serveur n'a pas assez de mémoire vive au moment de la précompilation, vous pouvez arrêter les services Mastodon avant de procéder à la précompilation.

Suppression de cache

Videz le cache :

RAILS_ENV=production bin/tootctl cache clear

[Actions supplémentaires à exécuter pendant la mise à jour] (https://github.com/tootsuite/mastodon/releases/)

Les notes de version peuvent contenir des instructions spéciales avec la marque Non-docker dont vous pourriez avoir besoin lors de la mise à niveau pour toute nouvelle version de Mastodon.

Terminez la session utilisateur:

exit

Rétablir l'environnement Ruby après la mise à jour de paquets système

Connectez-vous à la session utilisateur :

su - mastodon

cd ~/live

Réinstallez les paquets relevant de l'environnement Ruby :

bundle pristine

bundle install --deployment --without development test

Terminez la session utilisateur:

exit

Redémarrer Mastodon

Mastodon fonctionne en mémoire, vous devrez donc le redémarrer pour que l'une des mises à jour précédentes prenne effet. Pour redémarrer, exécutez:

/etc/init.d/mastodon-web restart

/etc/init.d/mastodon-streaming restart

/etc/init.d/mastodon-sidekiq restart