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