Installez Jappix, votre réseau social auto-hébergé à base de XMPP

Logo Jappix

Je poursuis mes aventures en matière de XMPP avec aujourd’hui l’installation d’un client web XMPP : Jappix.

Tout d’abord il faut savoir que Jappix est bien plus qu’un simple client XMPP puisqu’il propose des fonctions avancées qui font de lui un outil parfait pour mettre en place un réseau social d’entreprise robuste par exemple. C’est le cas chez mon employeur actuel, qui a récemment fait le choix de délaisser Skype pour XMPP en auto-hébergé avec succès : messagerie instantanée, appels audio et vidéo sont maintenant gérés par ce biais !

Mais comme tous le monde ne peut pas forcément toujours accéder au serveur XMPP de l’entreprise (ou même vous à votre propre serveur), écoutant sur le port 5222, il peut être utile de mettre à disposition une interface web, sur les ports classiques HTTP(S). C’est ce que nous allons mettre en place grâce à Jappix !

Pré-requis

Jappix étant développé en PHP, il va donc nous falloir un serveur web avec PHP >= 5.3.5. Je vous renvoie vers Nginx et PHP-FPM si vous n’avez rien sous la main, ou tout simplement Apache.

Il va aussi nous falloir les extensions PHP suivantes :

sudo apt-get install php5-gd php5-curl

De plus, pour communiquer avec notre serveur XMPP, Mêtronôme, on va avoir besoin d’une passerelle qui va faire le lien entre les requêtes HTTP de Jappix et les flux attendus par Mêtronôme. C’est le rôle d’un élément appelé serveur BOSH.

BOSH signifie Bidirectional-streams Over Synchronous HTTP. C’est un standard encore en développement mais qui fonctionne déjà plutôt bien. Son rôle est de mettre en place une connexion HTTP pour des communications XMPP.
Les références sont ici (XEP-0124) et ici (XEP-0206).

Comme les choses sont bien faites, sachez que Mêtronôme embarque nativement un serveur BOSH, que nous avions configuré avec les paramètres suivants :

-- /usr/local/etc/metronome/metronome.cfg.lua
modules_enabled = {
  "bosh";
}
 
https_ports = { 5281 };
 
bosh_ports = {
  {
    port = 5281;
    path = "http-bind";
  }
}
force_https_bosh = true
cross_domain_bosh = true
bosh_max_inactivity = 30
consider_bosh_secure = true
 
Component "bosh.mon-domaine.fr" "http"
        modules_enabled = { "bosh" };

Le serveur BOSH va donc écouter le port 5281 et plus particulièrement l’URI /http-bind. Si vous avez modifié la configuration de Mêtronôme, pensez à redémarrer.

Installation et configuration de Jappix

Mise en place du server-block Nginx

Mon serveur web étant propulsé par Nginx, je vous propose un server block qui rend Jappix accessible à l’URL « jappix.mon-domaine.fr ».

server {
        listen  80;
        server_name jappix.mon-domaine.fr;
        return 301 https://jappix.mon-domaine.fr$request_uri;
}
 
server {
        listen 443 ssl;
        server_name jappix.mon-domaine.fr;
        root /var/www/jappix;
        index index.html index.php;
 
        access_log /var/log/nginx/jappix-access.log;
        error_log /var/log/nginx/jappix-error.log;
 
        # Configuration SSL
        # Support du HSTS (HTTP Strict Transport Security)
        add_header Strict-Transport-Security "max-age=315360000; includeSubdomains";
 
        # Configuration SSL
        ssl_certificate                 /etc/nginx/certificates/common-ssl.cert;
        ssl_certificate_key             /etc/nginx/certificates/common-ssl.key;
        ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers       on;
        ssl_ciphers                     "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
 
        location / {
                try_files $uri $uri/ /index.php?$args;
        }
 
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_index index.php;
                fastcgi_pass php5-fpm-sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
                fastcgi_param PHP_VALUE "upload_max_filesize = 25M \n
                                         post_max_size = 25M \n
                                         max_execution_time = 600";
        }
 
        location ~ /(app|i18n|log|test|tmp|tools)/ {
                deny all;
        }
}

On active et on redémarre Nginx, comme d’habitude :

sudo ln -vs /etc/nginx/sites-available/jappix /etc/nginx/sites-enabled/jappix
sudo service nginx reload

Déploiement de Jappix

Jappix s’installe comme toute application PHP : on récupère les sources et on les place dans le dossier qui va bien.

cd /var/www
sudo wget https://download.jappix.org/1.1.0/jappix-1.1.0-primo.zip
sudo unzip jappix-1.1.0-primo.zip
sudo chown -R www-data: jappix  && sudo chmod -R 775 jappix

Et rendez-vous sur https://jappix.mon-domaine.fr !

Installation de Jappix

Allez je suis gentil, je vous prends par la main 🙂

Installation de Jappix 1 sur 6

Installation de Jappix 2 sur 6

Installation de Jappix 3 sur 6

Installation de Jappix 4 sur 6

Installation de Jappix 5 sur 6

Installation de Jappix 6 sur 6

Si vous avez des questions sur les différents paramètres, n’hésitez pas à aller faire un tour sur la documentation de Jappix, ou posez-moi vos questions dans les commentaires de cet article !

J’utilise XMPP pour un usage personnel, mon installation est donc fermée au public. Mais sachez qu’à travers le mode anonyme ou public, vous pouvez ouvrir votre Jappix et votre serveur Mêtronôme au monde là dehors 🙂

L’heure du test !

C’est le moment ! Allez sur https://jappix.mon-domaine.fr et testez ! Si vous avez suivi mes précédents tutoriels vous devez pouvoir vous connecter avec votre compte.

Annexe : gestion de votre zone DNS pour Jappix

Pour que Jappix fonctionne correctement vous allez avoir besoin d’ajouter un certain nombre d’entrées à votre zone DNS. Nous en avions déjà configuré un certain nombre lors de l’installation de Mêtronôme :

_xmpp-client._tcp        IN SRV    5 0 5222 mon-domaine.fr.
_xmpp-server._tcp        IN SRV    5 0 5269 mon-domaine.fr.
muc                      IN A      XXX.XXX.XXX.XXX
pubsub                   IN A      XXX.XXX.XXX.XXX
vjud                     IN A      XXX.XXX.XXX.XXX

Les trois dernières (muc, pubsub et vjud) sont utiles si vous utilisez les fonctionnalités qui leur sont liées, néanmoins nous devrions au moins ajouter les suivantes :

jappix                   IN A      XXX.XXX.XXX.XXX
bosh                     IN A      XXX.XXX.XXX.XXX

Si vous souhaitez permettre la découverte du service BOSH sur votre réseau, vous pouvez aussi utiliser l’enregistrement suivant :

bosh            86400    CNAME   xmpp
_xmppconnect    86400    TXT "_xmpp-client-xbosh=https://bosh.mon-domaine.fr:5281/http-bind"

Annexe 2 : proxy BOSH avec Nginx

Dans l’état actuel des choses, notre serveur BOSH écoute le port 5281. Il faut donc que celui-ci soit ouvert au niveau de votre pare-feu. Pour une raison X ou Y vous pourriez préférer conserver ce port fermé et utiliser le 443 par exemple.

Sachez qu’il est tout à fait possible d’utiliser Nginx pour qu’il agisse comme proxy entre le monde extérieur et votre serveur BOSH. Exemple avec un server block qui attend une adresse du type bosh.mon-domaine.fr

server {
        listen 80;
        server_name bosh.mon-domaine.fr;
        return 301 https://bosh.mon-domaine.fr$request_uri;
}
 
server {
        listen 443 ssl;
        server_name bosh.mon-domaine.fr;
 
        access_log off;
        error_log /var/log/nginx/metronome-error.log;
 
        location /http-bind {
                tcp_nodelay on;
                proxy_buffering off;
                proxy_set_header Host $host;
                proxy_pass https://127.0.0.1:5281/http-bind;
        }
}

Votre serveur BOSH est maintenant accessible à https://bosh.mon-domaine.fr/http-bind.

Voilà j’espère que je ne vous ai pas trop perdu et que je n’ai rien oublié… Sinon je mettrai l’article à jour. Le seul souci que je rencontre avec Jappix à l’heure actuelle c’est qu’il ne met pas à jour le statut de mes utilisateurs… Ils peuvent interagir normalement mais restent désespérément hors-ligne…

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email