En plus d'être utile dans la lutte contre l'épidémie, le confinement est l'occasion pour beaucoup d'entre vous d'essayer le télé-travail. Et par la force des choses, d'adapter les outils utilisés à ce nouveau mode de travail, comme la messagerie instantanée que j'ai déjà abordée avec l'installation de Rocket.Chat. Mais également les services de visioconférence afin de réaliser vos réunions dans les meilleurs conditions possibles.

De nombreux services ont vu ainsi leur popularité exploser ces dernières semaines, et pas uniquement pour les bonnes raisons. Vous aura t-il fallu une polémique autour de Zoom ( https://www.liberation.fr/checknews/2020/03/31/donnees-personnelles-l-application-de-visioconference-zoom-est-elle-intrusive_1783603 ) afin de vous rendre compte que des alternatives existent ?

Afin de ne pas se poser de questions, le plus simple est encore d'utiliser des outils que vous maîtrisez ! C'est pourquoi aujourd'hui je vous propose d'installer ensemble la solution de visioconférence Jitsi Meet.

Tout comme pour Rocket.Chat, son installation étant assez simple, et n'exigeant que peu de  ressources, il est possible d'installer ça très rapidement et à moindre  frais sur un serveur dédié ou VPS.

Je vais détailler au cours de cet article l'installation de Jitsi avec un environnement Docker.

Edit 22/04/2020 : Les images Docker de Jitsi sont mises à jour depuis quelques jours. Je modifie le Quick Start en conséquence.

Pré-requis

Avant de réaliser ce tutoriel, il sera nécessaire d'avoir les éléments suivants à disposition :

Et éventuellement, pensez à sécuriser votre installation avec IPTABLES et en suivant ces règles de bonnes pratiques avec Docker :

🚀 Quick start 🚀

Afin de démarrer rapidement Jitsi Meet sur une machine ou Docker et Docker Compose sont déjà présents, vous pouvez suivre ces étapes :

  • Cloner le répertoire sur votre machine
git clone https://github.com/lfache/awesome-traefik && cd awesome-traefik/traefik
  • Modifiez le fichier traefik.yaml à la ligne 31 :
      email: "foo.bar@mydomain.com"

Vous pouvez ensuite lancer Traefik :

docker-compose up -d

Ensuite nous pouvons configurer Jitsi à l'aide d'un fichier d'environnement que vous pouvez ajuster à votre configuration :

cd ../jitsi && cp env.examples .env

Edit du 22/04/2020 : Vous pouvez maintenant lancer le script gen-passwords.sh présent dans le dossier afin de générer les secrets et mots de passe. Si les mots de passe ne sont pas modifiés, les conteneurs refuseront de se lancer.

Pour un premier démarrage, celui-ci est normalement pré-rempli et ne nécessite quasiment pas de modification. Modifiez éventuellement l'URL publique de votre application :

#PUBLIC_URL=https://meet.example.com

Il est juste nécessaire de modifier la ligne 49 du fichier ̀docker-compose.yaml pour faire correspondre votre nom de domaine :

traefik.http.routers.jitsi.rule: 'Host(`jitsi.grottedubarbu.fr`)'

Vous pouvez lancer Jitsi :

docker-compose up -d 

Voila, votre service est accessible au travers du nom de domaine que vous venez de renseigner préalablement. Dans mon exemple :

https://jisti.grottedubarbu.fr

Edit 22/04/2020 : J'ai retiré la ligne staging du dépôt, ce qui suit n'est plus d'actualité :

Le certificat est délivré par le serveur staging de let's encrypt. Il sera vu comme un certificat non valide par votre navigateur mais il permet de s'assurer du bon fonctionnement de votre configuration sans être rate-limit en cas de problématique. Si tout est correct, supprimez la ligne 29 du fichier traefik.yml :
  caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
Et relancez Traefik et Jistsi ( dans cet ordre ).

Jitsi Meet

Jitsi est un ensemble de projets Open Source qui vous permet de créer et de déployer facilement des solutions de visioconférence sécurisées. Cette solution est 100% Open Source et entièrement chiffrée.

Elle possède de nombreux avantages, comme par exemple son intégration dans d'autres projets ( ex : Rocket.Chat ) mais également une application mobile pour faciliter son utilisation sur smartphone.

Jitsi est donc composer des éléments suivants :

  • Une interface web
  • Un server XMPP
  • Un élément pour la visioconférence
  • Un routeur pour la vidéo
  • Une passerelle SIP
  • Un service de broadcasting pour les enregistrements ou le stream.

Les interactions entre les différents composants sont très bien expliquées par le schéma mis à disposition sur le site de Jitsi :

Enfin je ne vais pas m'attribuer un mérite sur la création des fichiers. Jitsi entretien un dépôt très bien réalisé à l'adresse suivante :

https://github.com/jitsi/docker-jitsi-meet

Vous pourrez y trouver des explications très précises sur les configurations possibles du logiciel. Je n'ai que packagé ces fichiers avec une installation de Traefik en 2.2 !

🚩 Si vous souhaitez réaliser cette installation au sein de votre réseau d'entreprise et tout de même communiquer avec l'extérieur, il sera nécessaire de passer par un service STUN. Google fourni ce genre de service ... Mais je vous conseille d'utiliser votre propre service en créant par exemple une image Docker custom à l'aide de coturn par exemple.

Traefik

J'utilise dans mon fichier, la version 2.2 de Traefik avec ses derniers ajouts :

  • Redirection automatique du HTTP vers HTTPS depuis l'entrypoint :
entryPoints:
  web:
    address: :80
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  • Ajout d'un middleware par défaut dans la déclaration du HTTPS :
  websecure:
    address: :443
    http:
      tls:
        certResolver: myresolver
      middlewares:
      - SecHeaders@file

Celui-ci se trouve dans le dossier custom à la racine du dossier traefik. Il ajoute quelques headers de sécurité :

http:
  middlewares:
    SecHeaders:
      headers:
        frameDeny: true
        contentTypeNosniff: true
        browserXssFilter: true

        forceSTSHeader: true
        stsIncludeSubdomains: true
        stsSeconds: 31536000

        Content-Security-Policy: default-src 'self'; img-src 'self'; object-src 'none'
        referrerPolicy: "same-origin"
        featurePolicy: "vibrate 'self'; geolocation 'self'; midi 'self'; notifications 'self'; push 'self'; microphone 'self'; camera 'self'; magnetometer 'none'; gyroscope 'none'; speaker 'self'; vibrate 'self'; fullscreen 'self'"

Attention, lors de votre première connexion au site : le certificat ne sera pas valide. Il faut vérifier la provenance de celui-ci, l'origine doit être :

CN=Fake LE Intermediate X1

C'est normal car dans la configuration j'utilise le serveur staging de let's encrypt. Cela évite d'être bloqué en cas de tentatives trop nombreuses sur le serveur de production. Si tout est ok, vous pouvez supprimer la ligne 29 du fichier :

  caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"

Ces configurations vous permettront d'obtenir un Rang A sur https://securityheaders.com/ et Rang A+ sur SSLLABS ! 🤩

Vous voila prêt à utiliser Jitsi dans les meilleurs conditions !


Jitsi est donc une solution comprenant plusieurs modules et qui permet notamment de réaliser des visioconférences. Nous n'avons pas vu au cours de cet article certains modules proposés par la solution comme par exemple :

  • Jigasi pour la communication SIP,
  • Etherpad pour le partage de document.

Mais la solution proposée, permettra rapidement d'échanger en visio !

Nous  venons donc de voir ensemble comment installer Jitsi en quelques minutes à l'aide de technologie de conteneurisation. Et vous voila maintenant sans excuse pour utiliser une autre solution open-source afin d'effectuer vos échanges numériques  !

Avez-vous d'autres solutions pour échanger entre collègues au bureau ? La messagerie collaborative est-elle open-source ? Il existe également des solutions très intéressantes dans ce secteur. Promis, un jour je vais vous parlerai de Kopano qui est une très bonne alternative de remplacement à Gmail/Office !

En tout cas  n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter ! C'est toujours un plaisir d'avoir des retours ! 😇