💾 Archived View for dryusdan.space › mettre-en-place-les-webmentions captured on 2024-12-17 at 11:48:42. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

Mettre facilement en place les webmentions sur son site

2024-10-17

J'en ai brièvement parlé dans une note, mon site supporte les webmentions. Cela m'a valu quelques questions. Qu'est-ce que c'est ? Qu'est-ce que ça apporte ? Comment on met ça en place ?

une note

Les webmentions c'est un standard web qui permet a différents sites de communiquer entre eux avec diverses évènements bien connu :

standard web

Et encore d'autres. Ça apporte une intercommunication à travers plein de petits sites. Certains outils, tel que Ghost utilisent les webmentions (pour les recommandations). C'est quelque chose de robuste et suffisamment documenté pour être implémentable. J'aime beaucoup, car c'est dans l'optique de revenir sur un web du partage et de la découverte. C'est un peu comme les webrings (présent sur ma page d'accueil), c'est un autre moyen de lutter contre le web de l'addiction, le web du capitalisme. Le but n'est pas de bloquer l'internaute le plus possible sur son site mais de lui faire découvrir d'autres sites.

d'autres

Pour en revenir aux webmentions, il y a tout un tas d'exemple sur mon site (Le web social existe enfin avec son partage, Remplacer ses certificats avec son like, ou encore la note cité plus haut) qui permet de montrer l'utilité et l'interactivité que cela peut générer. Les webmentions "force" également l'auteur qui utilise des sources à les mentionner pour voir son article apparaitre sur les pages des sources cités. L'exemple avec Bloguidien où on aperçoit un article écrit par Barcadi55 et un autre par moi.

Le web social existe enfin

Remplacer ses certificats

Bloguidien

Donc voilà à quoi sert les webmentions : apporter de l'interactivité et du partage à travers le web.

Comment mettre ça en place pour mon site ?

Pour déjà choisir le bon outil, il faut savoir comment fonctionnent grossièrement les webmentions. C'est très basique vous allez voir :

Pour envoyer les webmentions, il faut donc un outil qui les poste uniquement quand l'article est posté et pas avant.

Pour recevoir les webmentions, il faut un outil qui la reçoit, fasse les validations mais si possible pas directement (pour prendre en compte les sites qui génèrent les webmentions avant d'avoir publié la page) et qui possède une API pour automatiser la récupération des données.

Dernier point parce que j'aime bien héberger mes données, il faut que ça soit auto-hébergeable. (Sinon j'aurais utilisé webmentions.io)

J'ai donc pas mal creusé. Il existe un plugin pour Pelican qui génère les webmentions, mais il ne les reçoit pas (logique) et le fait pendant la génération du site, donc les antispams peuvent bloquer. Je cherchais également un outil qui ai une très faible emprunte sur le système, j'ai un site statique pour une question de ressource, c'est pas pour tout flinguer dans des outils annexes.

J'ai cherché des outils en PHP ou compilé. En PHP car s'il n'y a pas de requête, il n'y a que très peu de consommation de ressource. Mais les outils sont très rustiques et très peu documentés. J'ai fini par jeter l'éponge avec PHP.

Au final seul Go-Jamming répond à la faible consommation de ressource (2.5Mo de RAM consommé à vide), qui est maintenu et qui lit les flux RSS. L'API est basique mais fonctionnel. Couplé à un plugin pour Pelican et ça fait des miracles.

Go-Jamming

Mise en place

Tout d'abord, créez un utilisateur nommé jamming avec pour "home" : /opt/jamming. Téléchargez Go-Jamming avec votre utilisateur puis créez un service SystemD dans /etc/systemd/system/jamming.service!

Go-Jamming

useradd --home-dir /opt/jamming --create-home --system jamming
su - jamming
wget https://git.brainbaking.com/wgroeneveld/go-jamming/releases/download/2.0.2/go-jamming-linux-amd64 -O jamming
chmod +x jamming
[Unit]
Description=Go-Jamming
Documentation=https://git.brainbaking.com/wgroeneveld/go-jamming
After=network.target

[Service]
User=jamming
WorkingDirectory=/opt/jamming
ExecStart=/opt/jamming/jamming
SuccessExitStatus=0
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
CapabilityBoundingSet=~CAP_SYS_ADMIN

[Install]
WantedBy=multi-user.target

Si vous avez créé votre utilisateur dans /home, supprimez la ligne ProtectHome=true.

Maintenant il va falloir le configurer un peu. Pour ça, créez un fichier config.json à côté de l'exécutable et ajouter ce qui suit en remplaçant R4d0mS3cr37 par un vrai secret, votre URL et votre domaine.

{
  "baseURL": "https://webmentions.example.tld/",
  "adminEmail": "webmentions@example.tld",
  "port": 1337,
  "token": "R4d0mS3cr37",
  "allowedWebmentionSources": [
      "example.tld",
  ],
  "blacklist": null,
  "whitelist": null
}

Dans une future version whitelist et blacklist vont être remplacés.

future version

Voilà, tout est configuré, maintenant vous lancez le service avec systemctl start jamming et vous pouvez apercevoir Jamming qui écoute sur le port 1337 sur toutes vos interfaces. Ensuite il faut régler votre reverse proxy (Apache, Nginx, Caddy, HAProxy) pour que webmentions.example.tld tape sur jamming.

Bien, passons au site web !

Pour indiquer aux autres sites oĂą vous souhaitez recevoir les webmentions, ajoutez les deux balises suivantes

<link rel="webmention" href="https://webmentions.example.tld/webmention" />
<link rel="pingback" href="https://webmentions.example.tld/pingback" />
Pourquoi pingback ?

Pingback est un autre protocole dans la même veine que les webmentions, moins abouti et surtout plus compliqué à implémenter (selon Indieweb).

Indieweb

Mais Jamming implémente les deux, donc autant l'utiliser !

Une fois ces deux balises misent, votre site est prĂŞt Ă  recevoir les webmentions !

Afficher les webmentions sur mon site

Malheureusement cette partie-là va énormément dépendre de votre moteur de blog. Pour Pelican j'ai développé un plugin pelican-jamming-plugin. Ce dernier récupère les données grâce à l'API et les ajoute dans les métadonnées de l'article. Il ne reste plus qu'à les afficher avec le template grâce aux variables :

pelican-jamming-plugin

(Y a un exemple sur mon thème).

mon thème

Mais pour vous qui n'avez pas Pelican, vous vous demandez sûrement " Comment faire ?"

Récupérez le json généré par https://webmentions.example.tld/webmention/blog.example.tld/S3creT et ajoutez ce petit bout de code dans votre template

{{ $mentions := (where .Site.Data.webmentions "relativeTarget" "==" $.RelPermalink) }}
{{ range $mentions }}
  <p class="p-content p-name">
    {{ .content | safeHTML }}
  </p>
  etc!
{{ end }}

(brainbaking.com) Bon, je n'ai pas testé si cela fonctionne, je n'ai pas Hugo.

brainbaking.com

Et si vous utilisez Jekyll ? Il y a un plugin Jekyll

un plugin Jekyll

Et si vous utilisez Wordpress ? Il y a un plugin Wordpress pour gérer les webmentions sans avoir besoin de s'embêter avec Jamming (Wordpress n'étant pas un site statique, il serait dommage de s'en priver).

un plugin Wordpress

Maintenant l'Ă©tape finale ! Brancher Jamming sur votre flux RSS !

Le problème de Jamming est qu'il ne cherche que les flux RSS suivant :

Mon flux RSS étant localisé à l'URL /feeds/all.rss.xml j'ai dû tricher avec mon .htaccess pour dire que /index.xml c'est mon flux rss sans dupliquer quoique ce soit

/feeds/all.rss.xml

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^rss(/)?$ /feeds/all.rss.xml [NC]
    RewriteRule ^index.xml$ /feeds/all.rss.xml [NC]
</IfModule>

Maintenant j'indique Ă  Jamming de lire le flux RSS et c'est parti pour l'envoie des webmentions

curl -X PUT "https://webmentions.example.tld/blog.example.tld/S3Cre3t"

Limite des webmentions (et de Jamming)

Sur le papier, Jamming est parfait, mais je lui reproche quelques points :

Mais il est en Go, donc son emprunte est minime. Et je n'ai aucune connaissance en Go ni vraiment l'envie d'apprendre à développer en Go, je viens à peine de parfaire mes connaissances en Python. J'hésite à développer mon propre moteur en Python sans interface graphique, avec une CLI à la rigueur. Mais il existe déjà des moteurs de webmentions en Python et ça consomme vite en ressource.

Et les limitations des webmentions ? Comme souvent c'est surtout un manque d'implémentation, c'est encore trop peu utilisé. Ça aurait tout intérêt à être implémenté par Le Journal du Hacker, Ycombinator ou plus généralement sur les outils de microblogging du Fediverse (Mastodon, Pleroma) qui permettent d'avoir des réactions types réponses ou like.

Le Journal du Hacker

Ycombinator

Sur ce, portez-vous bien.

image1

Photo David Clode

David Clode

--------------------------------------------------------------------------------

🏠 Home