Memo : Configurer OpenStack Swift pour Mastodon

Un billet technique pour changer. J'ai profité de ce moment de confinement pour réinstaller mon infrastructure de serveurs au propre dont mon serveur Mastodon. Je suis satisfait car j'ai maintenant un playbook Ansible qui fonctionne bien mais j'ai quand même passé une bonne journée à chercher à comprendre pourquoi les images ne s'affichaient pas. J'ai choisi d'écrire cet article pour que d'autres personnes ne répètent pas les mêmes erreurs.

Je décris un peu le contexte. Mastodon est un logiciel de micro-blogging libre que l'on peut héberger soi-même tout en étant relié au Fediverse avec les instances Mastodon hébergées par d'autres personnes. Il s'agit d'un service équivalent à Twitter mais décentralisé et je gère mon propre serveur chez l'hébergeur OVH.

Mon instance Mastodon était auparavant hébergée sur un VPS OVH et j'ai choisi de fiabiliser un peu plus mon infrastructure de serveurs en migrant sur un serveur du Public Cloud d'OVH pour être au sein d'un réseau privé avec d'autres de mes serveurs.

Concernant plus précisément OpenStack Swift, il s'agit d'un service open source pour stocker des fichiers, équivalent à AWS S3, qui est notamment hébergé et proposé par OVH. Dans le cas de l'hébergement de Mastodon c'est très intéressant pour stocker les images des utilisateurs du réseau. En effet, devoir stocker tous les fichiers multimédia sur un serveur prend beaucoup d'espace alors qu'OpenStack Swift propose un stockage important à un coût limité. De plus, séparer le stockage de l'application Mastodon permet de plus facilement réinstaller le serveur en cas de besoin ou de le migrer comme ce fut le cas pour moi.

Une erreur d'interprétation

J'ai perdu beaucoup de temps à comprendre pourquoi les images ne s'affichaient pas sur la nouvelle instance de Mastodon. Ce fut la faute d'une seule lettre majuscule. En effet, dans la configuration de Mastodon il faut spécifier plusieurs paramètres pour activer le stockage sur Swift. Il faut notamment ce paramètre:

SWIFT_ENABLED=true

Devinez quoi ? Comme j'utilise Ansible pour installer mes serveurs et que j'ai choisi de déclarer mes variables au format YAML, j'ai écrit dans mon playbook Ansible ceci :

SWIFT_ENABLED: true

Or, YAML s'est permit d'interpréter la valeur true que j'ai écrite en True. Ce qui résulte en

SWIFT_ENABLED=True

dans le fichier de configuration. Et tout simplement Mastodon ne comprenait pas.

Donc une chose à savoir: YAML interprète les valeurs booléennes et si on souhaite qu'il se limite strictement à ce qu'on écrit, il faut donner une valeur en chaine de caractères comme ceci :

SWIFT_ENABLED: 'true'

Aussi un indice pour savoir si Mastodon utilise le stockage distant pour les images : lorsque vous êtes sur votre page Mastodon, les URLs des images doivent correspondre au domaine du stockage distant et non au domaine de votre instance Mastodon.

OpenStack Keystone v3

OVH est en train de rendre obsolète le service d'authentification Keystone v2 et encourage vivement à ce que les services soient migrés vers Keystone v3.

Ma configuration Mastodon pour Swift était un peu bancale avant la migration de mon serveur Mastodon car j'avais tenté de migrer vers Keystone v3 mais je n'étais pas sûr de si ça avait marché. De plus, après avoir fait des recherches, ce n'est pas évident.

Comme la précédente configuration était

SWIFT_AUTH_URL=https://auth.cloud.ovh.net/v2.0

Je pensais en toute logique qu'il fallait simplement changer de chiffre pour mettre à jour l'URL du service d'authentification à Keystone V3. Comme ceci :

SWIFT_AUTH_URL=https://auth.cloud.ovh.net/v3.0

Sauf que nenni. Comme je l'ai appris sur le forum Discourse des administrateurs de serveurs Mastodon, la bibliothèque fog-openstack se permet sa propre interprétation de l'URL. Si on définit une variable SWIFT_TENANT, la bibliothèque va automatiquement ajouter /2.0 à l'URL comme s'il s'agissait de Keysone V2.

Après plusieurs essais, j'ai compris que :

  1. Il ne faut pas définir SWIFT_TENANT
  2. Il faut définir SWIFT_PROJECT_ID
  3. Il n'est pas nécessaire de spécifier la version Keystone dans l'URL

Donc pour Keystone v3 il faut ceci :

SWIFT_PROJECT_ID=un-long-identifiant-pour-le-projet
SWIFT_AUTH_URL=https://auth.cloud.ovh.net

La configuration OpenStack Swift d'OVH pour Mastodon

Au final, si vous utilisez OpenStack Swift proposé par OVH, voici la configuration qui vous est nécessaire pour faire fonctionner Mastodon avec.

SWIFT_ENABLED=true

SWIFT_USERNAME=votre-nom-dutilisateur-Horizon
SWIFT_PASSWORD=le-mot-de-passe-Horizon
SWIFT_PROJECT_ID=un-long-identifiant-pour-le-projet
SWIFT_AUTH_URL=https://auth.cloud.ovh.net
SWIFT_CONTAINER=le-nom-de-votre-conteneur
SWIFT_OBJECT_URL=https://storage.la-region.cloud.ovh.net/v1/AUTH_un-long-identifiant-pour-le-projet/le-nom-de-votre-conteneur
SWIFT_REGION=la-region(GRA ou SBG par exemple, sans chiffre)

J'espère que ce petit memo sera utile à d'autres personnes.

Bonne installation de Mastodon !

Mots-clés : Mastodon, Swift, OpenStack, OVH

Un commentaire ?

Vous avez repéré une erreur dans l'article ? Un point d'amélioration ? Vous pouvez envoyer vos commentaires par email à « blog arobase killiankemps.fr » avec pour objet « [Comment][fr][Memo : Configurer OpenStack Swift pour Mastodon] ».
(Le « @ » a été remplacé par « arobase » afin que des robots malveillants ne puissent pas récupérer l'adresse email)

Envoyer un commentaire par email