[Tuto] Héberger son serveur XMPP + Jappix

Vous l’avez sûrement remarqué, concerné ou non : mon partenaire de toujours, Unixmail.fr, n’est plus. Panne de serveur, pas possible de remplacer la machine dans l’immédiat, bref : un des aléas de l’auto-hébergement. Toujours est-il que @Zilkos me fournissait un des services que j’utilise le plus au quotidien : un compte XMPP (ou Jabber ID, selon comment vous l’appelez). J’ai donc pris mon mulot à deux mains et me suis lancé dans l’installation d’un serveur XMPP de remplacement, en attendant que le phénix Unixmail renaisse de ses cendres. EDIT : c’est chose faite \o/

On va donc installer un serveur XMPP, pour permettre à nos utilisateurs de se connecter depuis n’importe quelle application (Empathy, Pidgin, tout ça), et installer Jappix, une interface web bien pratique quand votre employeur/fournisseur d’accès/autre bloque le port utilisé par XMPP.

On mange quoi, du coup ? Eh bien, je vais partir du principe que vous avez une Debian fraîchement installée, comme moi. Dans mon cas, c’est bien évidemment le Raspberry Pi qui va subir mes essais, il est là pour ça. Au menu, donc :

  • une Debian 7 « Wheezy » que vous avez installée avant de commencer ce tuto ;
  • Metronome, un serveur XMPP basé sur Prosody (bien plus connu), aussi performant en étant plus léger et surtout mieux adapté à Jappix (il a été développé en partie pour ça) :
  • Lighttpd, un serveur web plus léger qu’Apache2 mais bien assez performant pour ce que nous allons en faire. Il est plus léger qu’Apache, tout en possédant un grand nombre des fonctionnalités de son concurrent. Il va servira les pages de Jappix. On aura aussi besoin de PHP, dans une version au moins égale à la 5.3.5, pour des raisons de compatibilité avec Jappix. Pensons un peu au processeur et à la mémoire de notre Pi, c’est pas non plus un Xeon à 16 cœurs 😀 ;
  • Jappix, évidemment.

On va donc installer ça gentiment, configurer l’ensemble, et surtout, vous ne tomberez pas dans les mêmes pièges que moi, qui m’ont valu un peu d’agacement hier soir et pas mal de café ingurgité. C’est parti ? 😉

 

jappix1

 

Installation de Metronome

À l’instar de Prosody, Metronome n’ «aime pas » être lancé en tant que root et essaie par défaut d’utiliser le couple user:group suivant : metronome:metronome. Comme cette paire n’existe pas, créons-la : adduser --no-create-home --disabled-login --gecos 'Metronome' metronome.

Metronome a besoin de quelques dépendances que nous allons installer. Pour avoir les versions les plus récentes et performantes, on va ajouter le dépôt de Prosody (je rappelle qu’ils partagent la même base). Éditons notre sources.list, pourquoi pas avec nano /etc/apt/sources.list, et ajoutons la ligne suivante : deb http://packages.prosody.im/debian wheezy main. Ajoutons la clé de signature associée : wget http://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -.

On peut enfin installer les dépendances requises : apt-get update && apt-get install lua5.1 liblua5.1-dev liblua5.1-filesystem0 libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-bitop lua-socket lua-sec-prosody.

 

On passe à la compilation de Metronome. On va récupérer les sources, pour ça vous devez disposer de Git. Si ce n’est pas le cas, un apt-get install git devrait faire l’affaire. On clone les sources, en se plaçant dans /opt, le répertoire destiné à nos logiciels : cd /opt && git clone https://github.com/maranda/metronome.git metronome. On se place maintenant dans le répertoire cloné (cd metronome), et on compile : ./configure --ostype=debian && make clean && make && make install.

Normalement, pas de raison de rencontrer une erreur quelconque, ça va tout seul.

 

Une interface web est là pour vous faciliter la vie !
Une interface web est là pour vous faciliter la vie !

 

Il nous reste à créer le script de démarrage, afin que le serveur XMPP se lance avec la machine. Pour ça, on va récupérer celui fourni par l’équipe de développement de Jappix, qui fonctionne à merveille. On va se placer dans /tmp pour le téléchargement, puis on copiera le script dans le bon répertoire et avec les bons droits d’exécution. Donc :

  • cd /tmp && wget https://raw.githubusercontent.com/jappix/jappix-tools/master/metronome/configs/init.d_metronome nous permet de rapatrier le script ;
  • mv init.d_metronome /etc/init.d/metronome le renomme et déplace dans le dossier contenant les scripts ;
  • chmod +x /etc/init.d/metronome le rend exécutable (bah oui, sinon il se lance pas, ce serait ballot) ;
  • update-rc.d metronome defaults automatise le chargement du script au démarrage du système.

Facile, un peu, non ? Pour le moment 😉

Maintenant, il faut configurer Metronome. Et c’est là que ça se gâte : le fichier de conf fourni est pas terrible, mais long, du coup quand on ne connaît pas, c’est galère. Mais… magie : l’équipe de Jappix.com met le sien à disposition, et on est à peu près sûr qu’il fonctionne ! 😛

On va le récupérer et l’adapter : wget https://raw.githubusercontent.com/jappix/jappix-tools/master/metronome/configs/config_metronome.cfg.lua && mv config_metronome.cfg.lua /usr/local/etc/metronome/metronome.cfg.lua

Maintenant, il vous suffit de l’éditer, et de remplacer jappix.com par votre domaine. 🙂

 

 

Sécurisons un peu la chose

Je ne peux que vous conseiller d’utiliser des connexions sécurisées pour l’authentification et les échanges. Vous noterez donc qu’il est fait référence à un certificat dans le fichier de configuration qu’on a récupéré : il « suffit » de créer le nôtre et de l’appeler dans la configuration de Metronome.

Si vous avez votre propre certificat signé et tout, vous n’avez probablement pas besoin de ce paragraphe, mais si comme moi vous n’avez rien sous le coude à part une flemme monumentale d’aller demander à CACert ou StartSSL de signer un certificat pour vous, on va générer notre certificat auto-signé. Oui, ça va couiner dans le navigateur, mais bon : je ne vais pas ouvrir le serveur pour des centaines de personnes, c’est principalement pour mon propre usage et celui de mes amis. Si je leur dis qu’il faut accepter le certificat, ils le feront. :mrgreen:

Générons la chose. Personnellement j’ai mis les certificats dans le dossier de Metronome, mais libre à vous de faire comme vous le souhaitez : cd /usr/local/etc/metronome && openssl req -new -x509 -days 365 -nodes -out "metronome.crt" -newkey rsa:2048 -keyout "metronome.key". Répondez honnêtement aux questions, et faites attention à bien indiquer votre nom de domaine (ou sous-domaine) exact lorsqu’il vous est demandé (le FQDN).

Vous l’avez compris, on a généré un certificat SSL de type RSA, et de longueur 2048 bits, valable 1 an.

Adaptons les droits sur ces certificats, afin que Metronome puisse les lire : sudo chown -R metronome:metronome /usr/local/var/lib/metronome /usr/local/etc/metronome. OK, là j’ai fait ça comme un gros barbare, mais bon, ça fonctionne. Ah, explications : le premier répertoire, c’est celui où Metronome «range » ses données, dont les utilisateurs. S’il ne peut pas y écrire, il vous insultera à la moindre tentative de création d’un compte (et ça m’est arrivé — vous voyez, encore un piège évité !). Le second, c’est la configuration.

 

Vous avez tout configuré comme il faut ? Cool ! Lançons le serveur, maintenant : /etc/init.d/metronome start ne devrait pas retourner d’erreur. Essayons de créer un compte : metronomectl adduser demo@domaine.tld (adaptez à votre cas hein !). Entrez deux fois le mot de passe, et si tout est correctement configuré, ça devrait se faire sans souci !

 

Installation de Lighttpd

On passe maintenant à l’installation du serveur web. J’ai choisi Lighty, mais c’est tout à fait faisable avec Apache, ou NGinx (bien que je le connaisse moins). On a aussi besoin de PHP5, et tant qu’à faire, on va installer les librairies requises par Jappix, ça vous évitera de le faire quand il râlera qu’elles sont absentes.

Encore une fois, simple comme bonjour : apt-get install lighttpd php5-cgi php5-gd php5-curl. On va activer fastcgi et fastcgi-php pour que Lighty mange les scripts PHP comme il faut, puis recharger la configuration : lighty-enable-mod fastcgi && lighty-enable-mod fastcgi-php && service lighttpd force-reload.

Ben… c’est installé. :mrgreen:

 

Un ajustement à faire dans le fichier de configuration, cependant : activer le support du SSL (pour le fameux HTTPS). On édite donc : nano /etc/lighttpd/lighttpd.conf, et on ajoute à la fin le code suivant :

1
2
3
4
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/certs/lighttpd.pem"
}

On va bien évidemment générer ce certificat et lui donner les droits qui vont bien. On se place dans le répertoire: cd /etc/lighttpd && mkdir certs && cd certs, et puis on génère le certificat, comme tout à l’heure : openssl req -new -x509 -keyout lighttpd.pem -out lighttpd.pem -days 365 -nodes. Pour les droits : chmod 400 lighttpd.pem. On relance Lighty, pour tout prendre en compte : service lighttpd restart.

 

 

Installation de Jappix

Dernière étape, yeah ! 🙂

On récupère l’archive depuis le site officiel. Chez moi, ça couine sur le certificat, donc vous pouvez vous aussi forcer le téléchargement après avoir vérifié que vous ne récupérez pas n’importe quoi : cd /var/www && https://download.jappix.org/1.0.5/jappix-1.0.5-one.zip. On peut alors extraire le contenu : unzip jappix* && mv -R jappix/* . && rm -Rf jappix/ pour tout replacer à la racine du serveur web. Je garde l’archive  d’installation sous le coude, par habitude. On redonne les droits à l’utilisateur qui lance Lighty : chown -R www-data:www-data *.

 

Eh bien… il n’y a plus qu’à vous rendre sur la page d’installation de Jappix, et à tout remplir. Si vous avez correctement adapté le fichier de configuration de Metronome, il ne devrait pas y avoir de soucis. Je vous conseille de tout forcer en HTTPS. Dans mon cas, pas de pubs bien entendu, et plus important, je cache les ressources, mais sans compression : cela prend trop de temps pour mon petit Raspberry Pi, et PHP timeout avant la fin de la tâche, donc rien ne fonctionne. J’utilise donc le cache, c’est quasiment aussi rapide puisque ce sont des ressources statiques qui sont servies par Lighty, et qu’il est très performant pour ça.

Un des paramètres les plus importants, c’est l’URL du serveur BOSH. Vous pouvez la tester : si vous entrez dans votre navigateur l’adresse http://votredomaine.tld:5280/http-bind, vous devriez tomber sur une page qui vous informe que « It works! Now point your BOSH client to this URL to connect to the XMPP Server. ». Attention, vérifiez que dans le fichier de conf de Metronome, il n’y a pas que 127.0.0.1 qui est autorisé ! 🙂

 

Après ça, normalement, à vous les joies de la messagerie instantanée avec vos amis, sans flicage de la part de Google, Facebook et autres !

 

Conversations, un client XMPP pour Android
Conversations, un client XMPP pour Android

 

Conclusion

Je vais être honnête, comme à chaque fois : je me suis bien pris la tête à installer tout ça. Déjà parce que pensant faire simple, j’ai fait une première tentative avec Prosody, Apache2 et la compression HTTP activée, donc rien ne fonctionnait côté Jappix, alors que Prosody tournait bien pour les « vrais » clients. Réinstallation de Raspbian, et on recommence. Je ne parle pas des précédentes tentatives avec ejabberd.

J’espère que cette fois, c’est clair pour tout le monde, et que celles/ceux qui veulent se lancer trouveront ici l’aide, le soutien et le réconfort qu’ils cherchaient désespérément sur la toile.

N’hésitez pas à me corriger, ou à enrichir ce petit guide !

Et puis, si vous avez besoin d’un compte XMPP, n’hésitez pas, hein. Juste, c’est encore en tests, donc je ne garantis pas la disponibilité ! 😉

 

Liens utiles

Parce que ça peut toujours servir… ça a été le cas pour moi, toujours 😉

 

Bonus

Utiliser Jappix, c’est sûr que c’est bien et pratique, mais un client « lourd » à installer sur votre machine ou tablette/smartphone, c’est encore mieux !

  • Empathy, un client libre (GPL), partie du bureau GNOME, qui supporte XMPP ainsi que d’autres protocoles. Je l’utilise tous les jours 🙂
  • Pidgin, un client lui aussi libre (GPL), multi plate-formes (dont Mac OS et Windows) et multi protocoles.
  • Xabber, un client libre (GPLv3) pour Android. Lui aussi, je m’en sers tous les jours ! Disponible sur F-Droid.
  • Conversations, client libre (GPLv3) pour Android 4.0+. Supporte l’OTR et le chiffrement via OpenPGP. Je l’utilise de plus en plus, en remplacement de Xabber. Disponible sur F-Droid.