Publiez sur votre blog XMPP depuis Libervia ou jp (SàT)

goffi 24. 3. 2016 17:55 jabber-xmpp projet GNU-Linux planet-libre SàT seenthis Libre Tutorial Libervia_installation

Articles précédents de la série : Installer une instance de Libervia (SàT) en moins de 10 min, Configuration avancée du conteneur Libervia et Importer un blog Dotclear dans XMPP.

Pour ce dernier article de la mini série sur l'installation d'un blog XMPP avec Libervia, je vais vous expliquer comment publier sur le blog que nous avons mis en place. Ceci fonctionnera également si vous avez un compte Movim (testé), et devrait fonctionner avec Jappix (non testé).

Je vais décrire 2 méthodes : via Libervia, l'interface web, qui est graphique, et la deuxième, pour les utilisateurs avancés, qui se fait via jp, l'interface en ligne de commande.

D'abord quelques explications

Avec XMPP, les blogs sont diffusés en texte pur ou en XHTML, aucun autre langage de balisage n'est utilisé à l'heure actuelle.

Dans SàT, nous faisons la distinction entre billet de blog et microblog avec l'utilisation du titre : nous considérons comme billet de blog un article ayant un titre, et supposé être travaillé, tandis qu'un message court (ou pas, nous n'avons pas de limite artificielle de caractères comme d'autres) sera plus une pensée « sur l'instant », et n'aura pas de titre. À terme nous fournirons sans doute plusieurs flux Atom pour suivre soit la totalité des messages, soit uniquement les billets de blog ou de microblog. Pour le moment les flux diffusent la totalité des messages (ou uniquement ceux correspondant à une étiquette).

D'autre part, nous avons un système permettant d'utiliser n'importe quelle syntaxe pour rédiger un billet. Comme nous ne voulions pas rester bloquer sur telle ou telle syntaxe à la mode, nous permettons la conversion d'une syntaxe à une autre et publions le résultat final en XHTML.

Évidemment la conversion d'une syntaxe à une autre peut provoquer de la perte d'informations de formatage, mais en pratique ça fonctionne relativement bien, et nous comptons faire des améliorations par la suite notamment pour garder le brouillon dans la syntaxe d'origine.

Aujourd'hui, vous pouvez utiliser XHTML bien sûr, mais également Markdown (par défaut) ou la syntaxe wiki de Dotclear pour rédiger un article.

Enfin, tout est unicode avec XMPP, vous pouvez donc utiliser les caractères spéciaux que vous voulez.

Publication via Libervia

La méthode la plus simple pour publier. Dans l'interface de Libervia, sélectionner un « panneau » blog (le panneau que vous voyez à l'ouverture en est un), et cliquez sur la zone de saisie tout en haut. Par défaut vous êtes en mode microblog et en texte simple, il vous suffit de taper votre message et d'appuyer sur [Majuscule] + [entrée] ou de cliquer sur le lien en bas à gauche pour publier votre message.

publication d'un microbillet

Pour un billet plus avancé, vous avez le lien en bas à droite « switch to blog » (passer en mode « blog »). Vous allez ainsi accéder à une zone plus élaborée, avec possibilité de mettre un titre, des étiquettes (« tags ») ou de faire de la mise en forme. Par défaut la syntaxe Markdown est utilisée, mais il est facile de changer dans les préférences via le menu Settings/Parameters/Composition

publication d'un billet de blog

Enfin, notez la case à cocher « preview » (aperçu), qui permet de taper avec un rendu direct un peu comme sur un traitement de texte, fonctionnalité associée à l'acronyme barbare « WYSIWYG ». Voici ce que vous obtenez en cliquant dessus :

publication d'un billet de blog avec aperçu

Une fois satisfait du résultat, vous n'avez plus qu'à cliquer sur « Send message ». En cas d'erreur pas de problème, il est possible d'éditer le message quand vous voulez. En effet les 3 icones sur la droite permettent respectivement de répondre, modifier ou supprimer le message.

icones du message

Tout ce qui vient d'être dit s'applique également aux commentaires.

Les billets que nous venons de publier sont publics, visible par tout le monde y compris les personnes qui n'ont pas de compte XMPP. Mais, spécificité de SàT dans le monde XMPP, il est possible de ne publier que pour un groupe de votre liste de contacts. Pour cela il suffit de cliquer sur le groupe désiré, ou de faire un glissé/déposé de groupe vers la zone des widgets. Un nouveau panneau dédié à ce groupe apparaîtra, vous n'aurez plus qu'à écrire dedans comme précédemment. Il est ainsi facile de ne publier que pour ses amis, ses collègues ou sa famille.

Méthode avancée : publication avec jp

Passons maintenant à la méthode « avancée ». Ici il vaut mieux avoir une version installée normalement plutôt qu'utiliser l'image Docker, car vous pourrez utiliser votre éditeur courant avec sa configuration. Une alternative est de modifier vous-même l'image Docker de jp (salutatoi/jp) en installant votre éditeur favori et en le configurant.

Cette méthode utilise jp, l'interface en ligne de commande de SàT, et donc demande de savoir utiliser un shell, mais elle offre un avantage indéniable de rapidité et d'efficacité : en une commande vous êtes dans votre éditeur de texte favori en train de rédiger votre billet.

Cette commande c'est :

      jp blog edit

    

Une fois validée, vous allez voir votre éditeur s'ouvrir avec le contenu de votre billet dans la syntaxe renseignée dans vos préférences. Un deuxième fichier est créé, avec le même nom que le billet mais qui se termine par « _metadata.json », qui contient les métadonnées de l'article, c'est à dire les informations comme son titre, les étiquettes utilisées, est-ce qu'il faut autoriser les commentaires, etc. Si vous utilisez un éditeur comme Vim ou Emacs, ce deuxième fichier devrait s'ouvrir automatiquement à côté du contenu. Une option particulièrement utile est « publish », que vous pouvez mettre à « false » pour interdire la publication de l'article, évitant toute publication accidentelle tant que votre article n'est pas fini. Une fois satisfait, vous n'aurez qu'à supprimer la ligne et quitter votre éditeur pour voir votre billet publié.

Ci-dessous, une capture de cet article pendant que je le rédige sous Vim :

édition depuis vim

Si vous voulez utiliser un autre éditeur, il suffit de le spécifier avec la variable d’environnement EDITOR, voici par exemple comment éditer avec kate :

      EDITOR=kate jp blog edit

    

Il est également possible de spécifier la commande à utiliser dans sat.conf, avec l'option « editor » dans la section « [jp] ».

En plus de créer un nouveau billet, il est possible d'éditer un billet existant, ou de continuer un brouillon non publié. 3 mots clefs sont utilisables à l'heure actuelle :

  • new permet de créer un nouveau billet, c'est l'option par défaut et nous venons donc de l'utiliser

  • last édite le dernier billet publié, particulièrement pratique pour corriger une faute

  • current édite le brouillon en cours (billet avec la métadonnée « publish » mise sur « false »)

ainsi pour faire une mise à jour du dernier billet, il suffit d'entrer:

      jp blog edit last

    

Plutôt simple non ?

Prévisualisation

Passons la plupart des options pour indiquer titre ou étiquette — il vous suffit de taper « jp blog edit --help » pour les connaître — et attardons-nous sur l'option « --preview ».

jp est capable d'ouvrir le brouillon en cours et d'afficher une prévisualisation dans le navigateur par défaut, et il va le mettre à jour à chaque enregistrement du fichier.

Par défaut, un nouvel onglet sera ouvert à chaque enregistrement, pas très pratique. Il est cependant possible de mettre à jour l'onglet en cours, soit via D-Bus pour un navigateur comme Konqueror (qui a la bonne idée de permettre ainsi de rafraîchir la page), soit via un outil externe, « xdotool » qui permet de piloter une application sur un serveur X (il faut donc installer cet outil pour que cela fonctionne).

2 options dans sat.conf sont prévues pour contrôler la prévisualisation : blog_preview_open_cmd pour l'ouverture du fichier, et blog_preview_update_cmd pour la mise à jour. Ces 2 options demandent des commandes shell, dans lesquelles {url} sera substituées par L'URL du fichier (de la forme file:…) et {preview_file} sera substitué par le chemin vers le fichier de prévisualisation.

Voici la recette pour une prévisualisation automatique avec Konqueror (qdbus doit être installé), à mettre dans sat.conf section [jp] :

      blog_preview_open_cmd = konqueror {url}
blog_preview_update_cmd = /bin/sh -c "qdbus $(qdbus org.kde.konqueror\*) /konqueror/MainWindow_1 reload"

    

Et celle pour Firefox (ou autre, changez « Mozilla Firefox » par ce qui vous intéresse) :

      blog_preview_open_cmd = firefox -new-tab {url}
blog_preview_update_cmd = /bin/sh -c "WID=$(xdotool search --name 'Mozilla Firefox' | head -1); xdotool windowactivate $WID; xdotool key F5"

    

Vous pouvez maintenant tester avec jp blog edit --preview. Si vous avez oublié le --preview, vous pouvez lancer la prévisualisation après coup grâce à jp blog preview.

Éditer un billet déjà publié

Si vous voulez éditer un billet déjà publié (et autre que le dernier, sinon last suffira), vous pouvez entrer directement son URL XMPP. Ainsi, si je veux éditer le premier article de cette série, je n'ai qu'à faire :

      jp blog edit --preview "xmpp:goffi@goffi.org?;node=urn%3Axmpp%3Amicroblog%3A0;item=067646bd-9439-430a-98c2-c655f5a63e40"

    

Mais il y a encore plus simple ! Vous pouvez entrer directement l'URL HTTP(S), et si le client XMPP fournir l'URL xmpp: dans la page (ce qui est le cas de Libervia), jp retrouvera le billet. Ainsi je peux entrer directement :

      jp blog edit --preview "http://www.goffi.org/blog/goffi/067646bd-9439-430a-98c2-c655f5a63e40"

    

Oui ça semble assez magique, c'est la standardisation qui permet cette magie !

Conclusion

Voilà qui conclut cette petite série sur l'installation d'un blog XMPP. La dernière partie est clairement pour utilisateurs avancés, mais il semblait intéressant de la mettre pour montrer une partie des possibilités de SàT. Par la suite je ferai des articles de temps en temps quand une fonctionnalité intéressante aura été ajoutée.

Si vous avez installé un blog XMPP, que ce soit avec Libervia ou autre, n'hésitez pas à me contacter que je vous ajoute dans mes contacts (ou ajoutez-moi directement ! goffi@jabber.fr, ce blog est sur une autre adresse : goffi@goffi.org).

Les prochains articles — en dehors d'un épisode de « parlons XMPP » en attente de publication — parleront très probablement de l'avancement sur « Cagou », la future interface bureau/Android, promise suite au succès de notre financement participatif, à bientôt !

X

xavier 15. 4. 2016 20:54

Je crois que, au dela de libervia, je trouve jp excellent !

Installer une instance de Libervia (SàT) en moins de 10 min

goffi 10. 3. 2016 18:51 jabber-xmpp projet GNU-Linux planet-libre SàT seenthis Libre Tutorial Libervia_installation

Bon avouons le tout de suite, je triche, 2 fois. La première c'est que nous allons utiliser les images Docker autrement dit des versions pré-installées et qui facilitent la vie. La deuxième c'est que quand je dis « moins de 10 min », je ne compte pas le temps de téléchargement de ces images, qui peut bien évidemment varier selon la vitesse de votre connexion.

Ceci dit, voyons comment avoir une instance de Libervia, l'interface web du projet « Salut à Toi », fonctionnelle de manière triviale. Pour mémoire il s'agit d'un outil de communication (d'aucuns parlent de « réseau social ») basé sur le protocole standard et ouvert « XMPP », et donc compatible avec la multitude de logiciels déjà existants.

Préparatifs

Docker

Il vous faut essentiellement avoir Docker installé sur votre machine. Sur une Debian ou dérivée (Ubuntu, Linux Mint – attention dans ce dernier cas, elle a récemment été compromise –, etc) il suffit de faire :

# apt-get install docker.io

En tant que root (c.-à-d. précédez de « sudo » si nécessaire). Dans les autres cas, reportez-vous à la documentation officielle.

Il faut ensuite vous ajouter au groupe « docker », ce qui devrait pouvoir se faire avec

# adduser <votre_nom_d_utilisateur> docker && newgrp docker

Ou, si vous avez sudo installé et configuré (c'est le cas sur Ubuntu par exemple):

# sudo adduser $(whoami) docker && newgrp docker

À partir de maintenant, il n'est plus besoin d'être root, vous pouvez faire la suite avec votre utilisateur normal, qui vient d'être ajouté au groupe « docker ».

libervia_cont.sh

La deuxième chose à faire est d'installer le script libervia_cont.sh qui aide grandement à la gestion des conteneurs de Libervia. Pour cela, il suffit d'entrer :

wget https://repos.goffi.org/sat_docs/raw-file/tip/docker/libervia_cont.sh && chmod a+x libervia_cont.sh

(si wget n'est pas présent, installez-le, par exemple avec « apt-get install wget »)

Lancement

Pour lancer Libervia, il vous faut maintenant entrer :

./libervia_cont.sh

Et c'est tout ! Si si, je vous assure, le script et Docker se chargent de télécharger les images (ce qui peut prendre un peu de temps selon votre connexion) et de les lancer, À la fin, vous allez voir une liste de ports s'afficher, en particulier vous devez avoir une ligne qui ressemble à :

port 8080 (HTTP):                       0.0.0.0:32771

Le numéro à la fin est le port choisi par Docker pour accéder à Libervia via HTTP, il vous suffit d'ouvrir votre butineur sur http://localhost:32771 (en remplaçant 32771 par le port que vous avez bien sûr) et vous devriez voir apparaître la page d'accueil de Libervia. Le serveur n'est accessible qu'après quelques secondes.

Libervia login

Plutôt simple non ? Bon comme c'était trop facile, voyons voir comment configurer tout ça.

Configuration

ports

Une des options les plus importantes est l'option -p, qui permet de lancer Libervia avec des ports fixes, ainsi vous pourrez atteindre Libervia sur le port 8080 et non un port qui change à chaque lancement.

Vous pouvez spécifier des ports différents grâce aux variables d'environnement SAT_CONT_PORT_xxxxxxxx est le port que vous voulez remplacer. Ainsi si vous voulez utiliser les ports 80 et 443 qui sont les ports standard HTTP et HTTPS, plutôt que 8080 et 8443, il vous suffit de faire, avant de lancer libervia_cont.sh :

export SAT_CONT_PORT_8080=80
export SAT_CONT_PORT_8443=443

nom de domaine

Si vous avez déjà votre nom de domaine (l'obtention d'un nom de domaine et sa configuration dépassent le cadre de cet article, mais les explications ne manquent pas sur le web), vous pouvez le spécifier avec l'argument -d ou avec la variable d'environement SAT_CONT_DOMAIN, exemple :

export SAT_CONT_DOMAIN=goffi.org

éditer les fichiers

Vous pouvez éditer le fichier de configuration de SàT/Libervia en tapant simplement

./libervia_cont.sh config

De même, pour éditer la configuration du Prosody intégré, faites

./libervia_cont.sh config prosody

Sauvegardes

Le script gère également les commandes de sauvegardes. Pour faire une sauvegarde, il suffit de taper

./libervia_cont.sh backup

Ceci crééra un fichier sat_data_backup_<date_de_sauvegarde>.tar.gz. Pour le restaurer plus tard, vous n'aurez qu'à faire

./libervia_cont.sh restore sat_data_backup_<date_de_sauvegarde>.tar.gz

À suivre…

Cet article est le premier d'une petite série où je vais vous expliquer comment mettre en place et publier dans un blog comme le mien (qui tourne désormais avec SàT/Libervia) grâce à ce que nous venons d'installer. La prochaine fois (demain ?) j'expliquerai la configuration avancée (certificat personnalisé, lancement automatique).

Si vous parlez anglais, l'utilisation des images Docker et du script libervia_cont.sh sont documentés sur le wiki.

Nous aimerions beaucoup faciliter l'installation de Libervia avec d'autres méthodes, par exemple avec des scripts pour YunoHost, un peu d'aide serait très appréciée, car nous sommes déjà bien chargés. Si vous pensez pouvoir participer, venez en discuter sur le salon sat@chat.jabberfr.org.

N.B. : comme vous l'avez vu l'image contient un serveur XMPP (Prosody) pré-configuré pour simplifier l'installation. Cependant Salut à Toi et donc Libervia marchent bien évidemment avec tout autre serveur (les fonctionnalités seront juste adaptées selon ce qui est disponible), et vous pouvez créer un profil externe, sur un autre serveur (vous pouvez même entrer directement un jid et un mot de passe existant dans Libervia). Il est probable qu'il existe de futures variantes de ces images sans serveur XMPP pré-installé, ou avec un autre.

S

souliane 11. 3. 2016 12:22

Super ! Un petit « hic » : docker ne s'installe pas (encore) sur les mini-serveurs come OLinuXino ou Raspberry Pi. Ou bien il faut bidouiller, il y a quelques procédures qui trainent sur Internet... ceci dit l'installation normale sans Docker fonctionne bien, c'est juste que ca demande un peu plus de temps. Le compte avec lequel je poste ici est connecté sur une instance de Libervia qui tourne sur un serveur maison OLinuXino.

Importer un blog Dotclear dans XMPP

goffi 23. 3. 2016 11:12 jabber-xmpp projet GNU-Linux planet-libre SàT seenthis Libre Tutorial Libervia_installation

Articles précédents de la série : Installer une instance de Libervia (SàT) en moins de 10 min et Configuration avancée du conteneur Libervia

Pour le troisième article de cette série sur l'installation d'un blog XMPP avec Libervia, je vais vous montrer comment importer un blog Dotclear.

Notez bien que ceci marchera avec Libervia/Salut à Toi, mais devrait fonctionner également avec Movim, ou Jappix, ou autre futur client XMPP gérant le blogage. Aussi, je parle ici de Dotclear, mais nous avons un système générique d'imports avec pour le moment 2 « importeurs » : Dotclear et Dokuwiki. Dotclear a été choisi car c'est celui que j'ai utilisé pour mon blog, mais le principe est le même si vous voulez importer du Dokuwiki.

À terme, et selon la demande (et notre temps disponible — ou les contributions), nous pourrons ajouter d'autres importeurs, Wordpress ou Pelican par exemple.

J'en profite pour remercier les équipes derrière Dotclear, c'est un moteur de blog que j'ai utilisé pendant plusieurs années et qui est vraiment bien fait. Peut-être qu'un jour il communiquera aussi via XMPP, qui sait ?

Préparation des données à importer

La première chose à faire est d'exporter le blog depuis Dotclear. Pour cela il faut vous rendre dans la console d'administration, puis cliquer sur la section maintenance :

maintenance

Ensuite cliquez sur l'onglet « Backup » (Sauvegarde), selectionnez « Download database of current blog » (charger la base de données du blog courant) puis cliquez sur « Execute task » (Lancer la tâche) :

onglet backup

Vous n'avez plus qu'à sélectionner le répertoire où sauvegarder votre fichier, vous devriez avoir un fichier avec un nom similaire à 2016-03-21-15-15-default-backup.txt.

Utilisation de jp avec le conteneur

Pour le moment, seul le frontal en ligne de commande de « Salut à Toi », jp, permet l'import. L'idéal serait de l'avoir installé en local sur votre machine, mais comme jusqu'ici nous avons utilisé les conteneurs Docker, continuons avec.

« Salut à Toi » va avoir besoin d'accéder à la sauvegarde Dotclear que nous avons générée précédemment. Comme les conteneurs sont isolés du système de fichier, nous allons devoir demander à Docker de monter le répertoire parent via SAT_CONT_DK_EXTRA, que nous avons vu dans les précédents articles :

export SAT_CONT_DK_EXTRA="-v /tmp/dotclear_backup:/backup"

remplacez « /tmp/dotclear_backup » par le chemin vers le répertoire où se trouve votre sauvegarde. Il faut ensuite redémarrer les conteneurs pour que cela soit pris en compte :

./libervia_cont.sh restart -p

Comme indiqué sur la page wiki des conteneurs, il est possible d'utiliser jp avec le conteneur « Salut à Toi » en utilisant la commande suivante :

alias jp-docker="docker run --rm -ti --link sat:sat salutatoi/jp:latest"

à utiliser après avoir lancé les conteneurs bien entendu. Par la suite j'utiliserai jp ou jp-docker indifféremment, utilisez l'alias que vous avez défini ici (soit jp-docker si vous avez gardé le même).

Assurons-nous ensuite que cela fonctionne :

% jp-docker --version
jp 0.6.0D (rev fd959c8f64b6 (default 2016-03-18 10:25 +0100)) Copyright (C) 2009-2016 Jérôme Poisson, Adrien Cossa
This program comes with ABSOLUTELY NO WARRANTY;
This is free software, and you are welcome to redistribute it under certain conditions.

Si vous avez bien le message de version qui s'affiche, tout va bien, sinon venez demander de l'aide sur notre salon XMPP.

C'est la commande jp blog import que l'on va utiliser, vous pouvez voir les options disponibles avec jp blog import --help.

Assurez-vous d'avoir créé un profil (en utilisant le dialogue de création de compte de Libervia par exemple). Pour utiliser blog import, votre profil doit être connecté, soit depuis Libervia, soit en demandant à jp de le faire avec les arguments -cp goffi --pwd <mot_de_passe> : -c demande la connexion, -p goffi indique que l'on souhaite utiliser le profil « goffi » (à adapter bien sûr), et « --pwd <mot_de_passe> » est explicite. Une fois votre profil connecté, seule l'option « -p goffi » est nécessaire, sauf si c'est votre profil par défaut (on reviendra sur cette notion une autre fois).

Commençons par voir les importeurs disponibles :

% jp-docker blog import -cp goffi --pwd totototo
dotclear: import posts from Dotclear blog engine
dokuwiki: import posts from Dokuwiki blog engine

Pour avoir des détails sur l'importeur choisi, indiquez son nom tout simplement :

% jp-docker blog import -pgoffi dotclear
dotclear: import posts from Dotclear blog engine

This importer handle Dotclear blog engine.

To use it, you'll need to export your blog to a flat file.
You must go in your admin interface and select Plugins/Maintenance then Backup.
Export only one blog if you have many, i.e. select "Download database of current blog"
Depending on your configuration, your may need to use Import/Export plugin and export as a flat file.

location: you must use the absolute path to your backup for the location parameter

N.B. comme mon profil « goffi » a été connecté avec la commande précédente, je n'utilise plus « -c » ni « --pwd xxx »

Voilà, il n'y a plus qu'à faire l'import, avec la commande suivante (que j'explique ci-dessous) :

jp-docker blog import -pgoffi dotclear /backup/2016-03-21-15-15-default-backup.txt --ignore-tls-errors --host www.goffi.org  -P --upload-ignore-host goffi.org

Explications :

  • jp-docker blog import -pgoffi dotclear /backup/2016-03-21-15-15-default-backup.txt : nous l'avons vu précédemment, on indique d'importer la sauvegarde Dotclear située à /backup/2016-03-21-15-15-default-backup.txt pour le profile « goffi »

  • --ignore-tls-errors indique de ne pas faire d'erreur en cas de certificat invalide, ce qui est le cas de notre certificat auto-signé. Si vous avez installé un certificat valide comme vu dans l'article précédent, vous pouvez ignorer cette option

  • --host www.goffi.org indique le nom du blog originel, c'est nécessaire pour re-construire les chemins relatifs de la sauvegarde

  • -P permet d'afficher une barre de progression

  • --upload-ignore-host goffi.org indique de ne pas téléverser les images en provenance de l'hôte indiqué, en effet par défaut jp blog import va téléverser (« uploader ») via XMPP toutes les images trouvées sur le blog. Ce comportement peut-être désactivé avec l'option --no-images-upload

Et voilà ! À la fin de l'import (qui ne devrait pas être très long sauf si très gros blog, c'est de l'ordre de quelques minutes), vous allez avoir un long texte s'afficher, ce sont les options à copier/coller dans sat.conf (grâce à ./libervia_cont.sh config) dans la section [libervia]. La deuxième option (url_redirections_dict) permet de rediriger les anciennes URL de votre blog vers les nouvelles dans Libervia, évitant ainsi les liens cassés.

Vous pouvez d’ailleurs ajouter vos propres redirections, par exemple j'ai ajoutés celles-là sur mon blog :

url_redirections_dict = {
    "/": "/blog/goffi",
    "/videos": "file:/videos",
    "/feed/atom": "/blog/goffi/atom.xml",
    "/feed/tag/SàT/atom": "/blog/goffi/atom.xml?tag=SàT",
    [ETC]
}

La première redirige la page principale sur mon blog, plutôt que sur la fenêtre de connexion de Libervia. La deuxième permet d'accéder aux vidéos via le chemin absolu /videos (qui est monté comme vu précédemment via SAT_CONT_DK_EXTRA). Enfin les suivantes permettent de garder les liens vers les flux Atom, nécessaire vu que je suis sur plusieurs « planètes » et que je n'avais pas envie de m'amuser à faire changer tous les liens (j'ai tronqué mais vous comprenez le principe).

Il peut également être utile d'ajouter :

allow_registration = false

qui indique à Libervia de ne pas autoriser les enregistrements de nouveaux comptes depuis l'interface, particulièrement intéressant si vous êtes seul sur votre instance, ou si vous voulez créer les nouveaux comptes vous-même uniquement.

À suivre

À ce stade, vous devriez avoir votre blog importé et disponible via Libervia, bienvenu dans le monde des blogs XMPP ! Les avantages d'avoir son blog sur ce standard sont nombreux, et vont aller en grandissant au fur et à mesure que nous ajouterons des fonctionnalités (par exemple la possibilité de mentionner quelqu'un sur un autre blog est à prévoir probablement avant l'été), n'hésitez pas à venir discuter de ça sur notre salon.

Pour le prochain article, sans doute le dernier de cette mini série, je vous expliquerai comment publier sur ce blog.

Configuration avancée du conteneur Libervia

goffi 18. 3. 2016 18:41 jabber-xmpp projet GNU-Linux planet-libre SàT seenthis Libre Tutorial Libervia_installation

Cet article fait suite à l'article de la semaine dernière indiquant comment installer Libervia en moins de 10 min. Nous allons voir aujourd'hui comment utiliser un certificat TLS existant, intégrer le conteneur dans une configuration Apache, ou lancer automatiquement le service au démarrage de la machine.

Utiliser votre certificat TLS existant

Au premier lancement des conteneurs, un certificat auto-signé est automatiquement créé pour pouvoir utiliser Prosody ou le serveur HTTPS de Libervia. Ce genre de certificat est très bien pour du test, mais d'une part provoquera un avertissement dans les navigateurs, et d'autre part son authenticité n'est assurée par aucun organisme (les certificats TLS sont signés par des organismes que votre navigateur et/ou système connaissent, ce qui permet de les valider – principe qui n'est pas idéal, mais c'est un autre sujet –).

Pour utiliser votre propre certificat plutôt que celui généré par les conteneurs, il faut utiliser la variable d’environnement SAT_CONT_TLS_DIR avec un chemin absolu vers vos certificats.

Il faut qu'à l'intérieur de ce dossier se trouvent les fichiers « libervia.key » pour votre clef privée, et « libervia.crt » pour votre certificat public. Ces noms de fichiers sont fixés car déjà configurés dans Libervia et Prosody, si vous voulez les changer il faudra changer les 2 configurations à l'aide de ./libervia_cont.sh config et ./libervia_cont.sh config prosody, comme indiqué dans le dernier article.

Au niveau des permissions des certificats, vous pouvez les laisser accessibles uniquement au « group ID » 9999 qui correspond au groupe « tls-cert » sur les conteneurs.

Let's Encrypt

Comme Let's Encrypt est (à juste titre) à la mode, voyons voir de plus près ce cas particulier.

Le but ici est de ne pas avoir à changer la configuration à chaque renouvellement, qui ont lieu au plus tard tous les 3 mois. Let's Encrypt met ses certificats (par défaut, adaptez au besoin) dans /etc/letsencrypt/archive/<votre_nom_de_domaine>, mais les noms de fichiers changent à chaque renouvellement, et met un lien symbolique vers les certificats en cours dans /etc/letsencrypt/live/<votre_nom_de_domaine>.
Vous ne pouvez pas utiliser directement /etc/letsencrypt/live/ car vous auriez des liens symboliques pointant dans le vide, il va falloir monter le dossier archive également.

La variable d'environement SAT_CONT_DK_EXTRA permet de spécifier des paramètres pour la commande « docker run » qui seront utilisés pour tous les conteneurs (sauf sat_data). Nous allons l'utiliser pour monter toute l'arborescence letsencrypt, comme suit :

export SAT_CONT_DK_EXTRA="-v /etc/letsencrypt:/etc/letsencrypt"

Il va falloir éditer les configurations de Libervia et Prosody pour pointer vers les bons fichiers.
Pour Libervia, utilisez ./libervia_cont.sh config puis spécifiez dans la section [libervia] :

[libervia]
tls_private_key = /etc/letsencrypt/live/<nom_domaine>/privkey.pem 
tls_certificate = /etc/letsencrypt/live/<nom_domaine>/cert.pem 
tls_chain = /etc/letsencrypt/live/<nom_domaine>/chain.pem

N'oubliez pas l'option tls_chain qui permet de spécifier la chaîne de validation.

Pour prosody, c'est ./libervia_cont.sh config prosody qu'il faut utiliser, vous devez avoir modifié votre option ssl pour qu'elle ressemble à :

ssl = {
        key = "/etc/letsencrypt/live/<nom_domaine>/privkey.pem";
        certificate = "/etc/letsencrypt/live/<nom_domaine>/fullchain.pem";
}

dans les 2 cas il faut bien évidemment remplacer <nom_domaine> par votre nom de domaine tel qu'il apparaît dans /etc/letsencrypt/live. Assurez vous aussi que les permissions sont correctes, vous verrez si Prosody ou Libervia n'arrivent pas à lire les fichiers à l'aide de docker logs -f prosody et docker logs -f libervia respectivement.

Intégration à un serveur Apache

Si vous avez déjà un serveur Apache qui tourne, vous préfèrez sans doute intégrer Libervia à la configuration existante plutôt que sur un port séparé.

Pour cela nous allons utiliser un « proxy inverse » (reverse proxy) qui va rediriger une adresse de votre domaine sur le serveur de Libervia.

Si vous avez une configuration HTTPS, elle sera gérée par Apache lui-même, donc commençons par désactiver le serveur HTTPS de Libervia, et par supprimer le message d'avertissement en cas de connexion HTTP. Éditez sat.conf à l'aide de ./libervia_cont.sh config, et mettez ceci dans la section [libervia] :

[libervia]
connection_type = http
security_warning = 0

Désormais seul le port HTTP sera disponible.

Maintenant, nous allons configurer apache pour qu'il redirige les URL correspondant à votre instance de Libervia vers le serveur. Dans le répertoire /etc/apache2/mods-available/ créez un fichier libervia.conf qui ressemble à peu près à ça :

<VirtualHost *:80>
    ServerName www.<votre-serveur.tld>
    ServerAlias <votre-serveur.tld> libervia.<votre-serveur.tld>
    ServerAdmin webmaster@votre-server.tld
    ErrorLog /var/log/apache2/libervia-error.log
    CustomLog /var/log/apache2/libervia-access.log
    ProxyPass / http://127.0.0.1:8080/ nocanon
    ProxyPassReverse / 127.0.0.1
    AllowEncodedSlashes On
    RequestHeader set X-Forwarded-Proto "http"

    <proxy *>
        Require all granted
    </proxy>
</VirtualHost>

Il faut bien entendu remplacer <votre-serveur.tld> par votre nom de domaine, adapter SeverName et ServerAlias à ce que vous souhaitez utiliser, ainsi que les ports pour qu'ils correspondent à ceux que vous utilisez en pratique (si vous avez tout laissé par défaut, les ports indiqués sont valables).

Quelques explications sur la configuration : Passons sur les premières lignes et VirtualHost qui sont des classiques de configuration Apache, vous trouverez les informations nécessaires facilement sur le web au besoin. Les directives qui nous intéressent ici sont à partir de ProxyPass.

  • ProxyPass indique à Apache de rediriger les connexions sur le serveur local au port 8080, soit l'instance en cours de Libervia. Notez bien le « nocanon » qui est très important, il indique à Apache de ne pas utiliser des adresses canoniques, soit en d'autres terme de ne pas modifier les URLs envoyées à Libervia.
  • ProxyPassReverse concerne les redirections
  • AllowEncodedSlashes est nécessaire pour accepter les URLs contenant des « / » (%2F), qui sont utilisées dans Libervia.
  • RequestHeader permet d'ajouter l'en-tête « X-Forwarded-Proto » indiquant à Libervia le protocol utilisé au niveau du proxy

Quand un proxy est utilisé, l'adresse utilisée « vue » de l'extérieur (http(s)://www.<votre-serveur.tld>/[…]) n'est pas la même que celle utilisée pour accéder par Libervia, qui est ici http://127.0.0.1:8080. Or Libervia a besoin de connaître cette adresse pour construire des chemins absolus vers les documents, par exemple dans le flux Atom.
Normalement, ceci est fait automatiquement et vous n'avez besoin de toucher à rien pour que Libervia utilise les bonnes URL ; mais si jamais les URL produites n'étaient pas correctes, vous pourriez utiliser l'option « base_url_ext » pour forcer l'utilisation de la base indiquée. Ainsi pour forcer l'utilisation de http://www.goffi.org, je peux indiquer ceci dans ma configuration Libervia :

base_url_ext = http://www.goffi.org

Ou même « //www.goffi.org » pour laisser Libervia gérer le schema (c.-à-d. le protocol : http ou https). Encore une fois tout ceci devrait être géré automatiquement (*), et il est très peu probable que vous ayez à utiliser cette option. Venez me contacter sur sat@chat.jabberfr.org pour plus d'explications si nécessaire.

Une fois la configuration faite, il vous suffit pour activer le proxy de demander à Apache de prendre en compte la nouvelle configuration. Nous allons également nous assurer que le mode proxy_http est activé, aussi nous allons utiliser les commandes suivantes (en root) :

# a2enmod headers
# a2enmod proxy_http
# a2ensite libervia.cont
# systemctl reload apache2

(*) si vous avez téléchargé les images la dernière fois, ce comportement a été modifié depuis, c'est l'occasion de tester « ./libervia_cont.sh update ».

Utilisation d'un cache

Apache a des modules permettant la gestion d'un cache, qui permettra à la fois d'économiser les ressources, et de fournir la dernière page connue en cas d'indisponibilité du serveur (lors d'une maintenance par exemple). Dans le cas de Libervia, c'est principalement utile pour le blog statique.

Assurez-vous d'abord que le cache est activé à l'aide de :

 # a2enmod cache_disk

qui activera à la fois les modules cache et cache_disk. Ensuite à l'intérieur de la configuration du VirtualHost que nous avons faites plus haut :

<IfModule mod_cache_disk.c>
    CacheEnable disk /
    CacheRoot "/var/cache/apache2/mod_cache_disk/libervia/"
    CacheDirLevels 3
    CacheDirLength 5
    CacheIgnoreHeaders Set-Cookie
    CacheMaxFileSize 200000000
    CacheIgnoreNoLastMod On
    CacheDefaultExpire 300
</IfModule>

Vous pourrez vous reporter à la documentation pour la plupart des directives utilisées ici, mais il est nécessaire d’en préciser quelques-unes :

  • CacheIgnoreHeaders Set-Cookie évitera de mettre en cache les cookies qui sont utilisés pour la session dynamique de Libervia, cette directive est essentielle pour la sécurité
  • CacheIgnoreNoLastMod On permet de mettre en cache des documents qui ne possèdent pas de date de dernière modification, ce qui est le cas actuellement des pages servies par Libervia
  • CacheDefaultExpire indique un cache qui expire après 10 min. Libervia ne gère pas (encore) les indications nécessaires à une gestion automatique du cache, aussi on indique ici la durée voulue. Le cache étant essentiellement utilisé pour le blog statique, j'ai mis 10 min pour qu'une mise à jour apparaîsse suffisament vite.

À moins d'avoir un site extrêmement populaire, il ne devrait pas y avoir de problème de performance pour le blog statique même sans cache, il est à mon sens surtout utile ici pour continuer à servir les pages pendant les maintenances.

Utilisation de tls

L'utilisation de TLS n'est pas plus compliquée que pour un autre site Apache.
Voici à quoi peut ressembler une configuration si vous activez le proxy, le chiffrement TLS, et un cache :

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName www.<votre_site.tld>
        ServerAlias <votre_site.tld> libervia.<votre_site.tld>
        ServerAdmin webmaster@<votre_site.tld>
        LogFormat "h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %{cache-status}e" with_cache
        ErrorLog /var/log/apache2/libervia-error.log
        CustomLog /var/log/apache2/libervia-access.log with_cache
        ProxyPass / http://127.0.0.1:8080/ nocanon
        ProxyPassReverse / http://127.0.0.1:8080/
        AllowEncodedSlashes On

        <proxy *>
                Require all granted
        </proxy>
        SSLCertificateFile /etc/letsencrypt/live/<votre_site.tld>/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/<votre_site.tld>/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateChainFile /etc/letsencrypt/live/<votre_site.tld>/chain.pem

        <IfModule mod_cache_disk.c>
                CacheEnable disk /
                CacheRoot "/var/cache/apache2/mod_cache_disk/libervia/"
                CacheDirLevels 3
                CacheDirLength 5
                CacheIgnoreHeaders Set-Cookie
                CacheMaxFileSize 200000000
                CacheIgnoreNoLastMod On
                CacheDefaultExpire 300
        </IfModule>

</VirtualHost>
</IfModule>

Notez que le « RequestHeader set X-Forwarded-Proto » a désormais la valeur "https" ainsi que le « with_cache » dans les logs, ajoutant des informations utiles (est-ce que la page est servie par le cache ou Libervia ?).

Pour le reste, reportez-vous à la documentation Apache.

Démarrage automatique

Dernier point de cette partie sur la configuration avancée, nous allons voir comment lancer automatiquement notre instance de Libervia au démarrage de la machine. Nous allons pour cela utiliser SystemD qui est désormais le gestionnaire de démarrage par défaut de la plupart des distributions, donc probablement de la vôtre.
Il vous suffit d'utiliser une configuration similaire à la suivante, dans un fichier libervia.service à placer dans /etc/systemd/system :

[Unit]
Description=Libervia (Salut à Toi) XMPP Docker service
After=docker.service
Requires=docker.service

[Service]
User=libervia

Environment= \
SAT_CONT_DOMAIN=votre_domain.tld \
SAT_CONT_PORT_8080=8000

ExecStartPre=/home/goffi/dev/sat_docs/docker/libervia_cont.sh start -p
ExecStart=/usr/bin/docker wait libervia
ExecStop=/home/goffi/dev/sat_docs/docker/libervia_cont.sh stop

[Install]
WantedBy=multi-user.target

Ce fichier indique que le containeur doit attendre que Docker soit lancé. L'utilisateur ici est libervia, changez-le pour celui que vous avez ajouté au groupe « docker ».
Environment vous permet de configurer les options comme le port ou le nom de domaine utilisé, notez bien le "\" en fin de ligne (dernier caractère avant le retour à la ligne, sans espace) qui indique de considérer la ligne suivante comme la suite de la commande.

Le serveur est en fait lancé avec la directive ExecStartPre, afin de pouvoir connaître sont état avec « docker wait ». C'est une petite astuce qui évite des complications, car les conteneurs sont lancés par le démon Docker et non le script lui-même.

À suivre…

Voilà pour cette seconde partie de la série sur l'installation d'un blog Libervia. Ce n'était pas la partie la plus amusante, mais vous n'avez a priori à faire cette configuration qu'une seule fois, et elle n'est pas si compliquée que cela.

La prochaine fois nous importerons un blog depuis Dotclear.