geek/Pleroma dans un container

04 août 2023 Rédigé par Linuxine

A la demande générale - au moins deux personnes me l'ont demandé sur Mastodon ! ;)  - voici un petit post pour expliquer comment je fais tourner mon instance Pleroma, social.linuxine.net, dans un container lancé via podman-compose.

Un petit rappel sur Pleroma : il s'agit d'un logiciel permettant d'installer un serveur de microblogging qui peut se fédérer (donc parler) à tout serveur utilisant lui aussi le protocole ActivityPub, comme par exemple d'autres serveurs Pleroma, tous les serveurs Mastodon, mais aussi PeerTube, PixelFed, etc. On parle souvent de "Fedivers" pour désigner l'ensemble des logiciels de serveurs qui peuvent se fédérer entre eux.

Je viens de m'apercevoir que si j'avais bien parlé sur ce blog, en 2017, du fait que j'avais quitté Twitter pour Mastodon (sur les serveurs de Framasoft, Framapiaf, à l'époque), je n'avais pas parlé de l'étape d'après, c'est à dire quand j'ai décidé carrément d'héberger ma propre instance sur mon serveur.

Il s'était avéré à l'époque que Mastodon était horriblement lourd à installer et maintenir, et surtout que, même pour une instance mono utilisateur comme la mienne, il nécessitait des ressources bien trop importantes pour ma machine. Je crois d'ailleurs que c'est toujours le cas de nos jours hélas.

J'avais donc cherché s'il existait des alternatives moins gourmandes en ressources, et j'avais découvert Pleroma. Il était alors en phase de développement, pas encore très stable, mais il était relativement simple à installer et ne consommait quasiment aucune ressource. J'avais alors procédé à une installation "classique" en local sur mon serveur CentOS, avec une base PostgreSQL.

Tout a bien fonctionné pendant quelques temps, mais en voulant faire des mises à jour de Pleroma, j'ai commencé à avoir des difficultés dues au fait que mon serveur n'avait pas toujours les dernières librairies disponibles. Comme je travaillais de plus en plus avec des containers, je me suis dit que c'était l'occasion de tester si cela pouvait résoudre mon souci.

Build du container

Le repo gitlab de Pleroma indique qu'ils ne fournissent pas de fichier Dockerfile pour builder un container, mais donne des liens vers les repo d'autres personnes qui en proposent. Le souci, dans me cas, est que ces personnes supposent qu'on aura un container pour faire tourner Pleroma, et un autre pour la base de données. Or, comme je possédais déjà ma base en local, je voulais continuer à l'utiliser, à la fois pour ne pas avoir à perdre mon historique, ou devoir tenter une migration, et surtout parce que j'avais déjà toutes mes procédures de sauvegardes configurées.

Je suis donc partie du Dockerfile qui est disponible à la racine du repo (mais qui n'est donc pas officiellement là si on en croit leur readme ^^) pour builder mon container. J'ai utilisé la branche develop, car à l'époque le Dockerfile fourni dans les branches stables ne fonctionnait pas chez moi. Depuis je n'ai pas essayé de changer de version, je ne sais donc pas si cela pourrait fonctionner sur une branche stable.

Je lance un build de container très basique, avec la commande suivante :

 $ docker build -t <tag> -f Dockerfile

Le build est un peu long car le fichier fait appel à un container pour compiler le code source, puis en créé un autre contenant uniquement le code compilé. Ensuite, on va démarrer ce container via un fichier compose.

Fichier compose

Le contenu de mon fichier pour podman-compose est le suivant:

version: '1'
services:
  pleroma:
    container_name: pleroma_container
    image: localhost/<tag>
    privileged: true
    environment:
      - DOMAIN=<domain>
      - DB_USER=<user>
      - DB_PASS=<pass>
      - DB_NAME=<name>
      - DB_HOST=<host>
    ports:
      - xxx:xxxx
    volumes:
      - /xx/xx/uploads:/var/lib/pleroma/uploads:rw
      - /xx/xx/priv/static:/var/lib/pleroma/static

Bien sur la partie environnement concernant la base de données n'est pas indispensable et est très spécifique à mon cas, puisque je réutilise ma base locale. Remplacez bien sur tout ce qui est entre des chevrons par votre propres valeurs si besoin, et remplacez les xxx par vos ports et vos chemins vers l'endroit où vous souhaitez stocker les fichiers statiques et les médias uploadés. Attention, l'utilisateur qui lance le container doit pouvoir écrire dans ces répertoires.

Ensuite, on peut simplement lancer le container avec la commande suivante:

$ podman-compose -f pleroma-compose.yml up -d

Il faut ensuite prévoir un ProxyPass Apache, ou son équivalent nginx pour pouvoir servir le container depuis l'URL de l'instance (ici, le <domain>) et ça tourne ! Pour stopper proprement le container, on lancera:

$ podman-compose -f pleroma-compose.yml down

 

Et pour répondre à l'interrogation de départ: oui, cette façon de faire permet de s'affranchir des problèmes de librairies pour la compilation, puisque tout est compilé sur une Alpine, et donc plus à jour qu'une CentOS. Et oui, pour le moment (croisement de doigts) ça marche plutôt bien !

Écrire un commentaire