diff --git a/README.md b/README.md index a4e6c6e..a96f3d8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,223 @@ -# social +# Service TOOT + +Service courriel de l'association Libre en communs. + +Responsables : @echolib, @neox + +Déployé sur la machine `toot` (voir la [documentation spécifique](https://git.a-lec.org/a-lec/commissions/infrastructure/doc-infra/-/blob/master/Machines%20virtuelles/toot.md)). + +## 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.2.2 avec `rbenv` + +``` +RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.3 +rbenv global 3.2.3 +``` + +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 social.chalec.org; +``` + +Recharger nginx + +``` +systemctl reload nginx +``` + +### Déployer un certificat SSL + +Utiliser certbot avec le nom de domaine de l'instance + +``` +certbot --nginx -d social.chalec.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 faut se référer aux informations de la [page de versions](https://github.com/mastodon/mastodon/releases). + +**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 +``` + +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 +rbenv global +``` + +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`). + +À 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 +``` + +## Nettoyage des anciens médias +Dans le dossier mastodon : + +``` +# Ceux de + de 7 jours +live/bin/tootctl media remove --days=7 && live/bin/tootctl preview_cards remove --days=7 +``` + +## Installer Soapbox +En tant que super-utilisateur, créer le dossier de Soapbox +``` +mkdir -p /opt/soapbox +``` + +Télécharger Soapbox et décompresser l'archive +``` +curl -O https://dl.soapbox.pub/main/soapbox.zip +busybox unzip soapbox.zip -o -d /opt/soapbox +``` + +## Mettre à jour Saopbox +Recommencer l'étape de téléchargement et de décompression + +