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 :
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) :
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 <version>
```
Dans certains cas, la mise à jour de Ruby devra être effectuée en se plaçant dans le dossier de `rbenv` :
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) :