toot/README.md

5.3 KiB

Service TOOT

Service courriel de l'association Libre en communs.

Responsables : @echolib, @neox

Déployé sur la machine toot (voir la documentation spécifique).

Installation du service

Installation des dépendances

Créer l'utilisateur mastodon

adduser --disabled-login mastodon

En tant que superutilisateur, installer les logiciels de base :

apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates

Installer NodeJS version 16, depuis les dépots nodesource.com

curl -sL https://deb.nodesource.com/setup_16.x | bash -

Mettre à jour les dépôts

apt update

Installer les paquets systèmes :

apt install -y imagemagick ffmpeg libpq-dev libxml2-dev libxslt1-dev file git-core g++ libprotobuf-dev protobuf-compiler pkg-config nodejs gcc autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev nginx redis-server redis-tools postgresql postgresql-contrib certbot python3-certbot-nginx libidn11-dev libicu-dev libjemalloc-dev

Configurer yarn

corepack enable
yarn set version classic

Se connecter en tant que mastodon (les commandes suivantes se feront via le compte mastodon)

su - mastodon

Se placer dans le répertoire /home/mastodon

cd /home/mastodon

Installer rbenv (outil de gestion de version pour Ruby)

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

Installer Ruby 3.0.6 avec rbenv

RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.0.6
rbenv global 3.0.6

Installer bundler

gem install bundler --no-document

Configurer la base de données Postgresql

En tant que superutilisateur, on crée la base de données

sudo -u postgres psql
CREATE USER mastodon CREATEDB;
\q

Installer Mastodon

En tant que mastodon, on récupère le code et on se place sur le dernier tag :

su - mastodon
git clone https://github.com/mastodon/mastodon.git live && cd live
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)

Installer les dépendances dans le dépôt avec bundle et yarn

bundle config deployment 'true'
bundle config without 'development test'
bundle install -j$(getconf _NPROCESSORS_ONLN)
yarn install --pure-lockfile

Configurer Mastodon

En tant que mastodon, dans le dossier de déploiement, exécuter la commande de première configuration, et suivre la configuration interactive (avec le nom de domaine qui va bien) :

su - mastodon
cd /home/mastodon/live
RAILS_ENV=production bundle exec rake mastodon:setup

Configurer nginx

En tant que superutilisateur, copier le fichier par défaut dans la configuration nginx :

cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon
ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon

Éditer le fichier pour effectuer les ajustements nécessaires dans les sections server (proxy_protocol et nom de domaine) :

set_real_ip_from  192.168.0.1;
real_ip_header proxy_protocol;
listen [::]:443 ssl;
listen 444 ssl proxy_protocol;

ssi on;
ssi_last_modified on;

server_name toot.a-lec.org;

Recharger nginx

systemctl reload nginx

Déployer un certificat SSL

Utiliser certbot avec le nom de domaine de l'instance

certbot --nginx -d toot.a-lec.org

Déployer les services systemd

cp /home/mastodon/live/dist/mastodon-*.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now mastodon-web mastodon-sidekiq mastodon-streaming

Mise à jour du service

Le logiciel Mastodon utilise de nombreuses dépendances et ses mises à jour peuvent nécessiter des migrations de base de données. La mise à jour de Mastodon est toujours manuelle et très peu automatisée et n'est donc jamais générique.

Il est fortement déconseillé de mettre à jour en sautant des versions

Aussi, pour mettre à jour mastodon, on utilisera git pour récupérer le code en tant que mastodon:

su - mastodon
cd /home/mastodon/live
git fetch && git checkout <version>

Dans certains cas, la mise à jour de Ruby devra être effectuée en se plaçant dans le dossier de rbenv :

cd /home/mastodon/.rbenv
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install <version-ruby>
rbenv global <version-ruby>

Il est ensuite important de suivre les instructions de déploiement spécifiques de la version, disponible sur la page github de la version (release). Généralement cela consistera en l'exécution dans le dossier live de bundle install et/ou yarn install, suivi ou non d'une migration de base de données (rails exec db:migrate) et/ou d'une précompilation d'assets (rails exec assets:precompile).

A chaque fois qu'il sera demandé dans les instructions de redémarrer les services, la commande suivante sera utilisée (pour éviter au maximum les interruptions) :

systemctl restart mastodon-sidekiq && systemctl reload mastodon-web && systemctl restart mastodon-streaming