199 lines
5.3 KiB
Markdown
199 lines
5.3 KiB
Markdown
# 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.2
|
|
rbenv global 3.2.2
|
|
```
|
|
|
|
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`).
|
|
|
|
À 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
|
|
```
|
|
|