Auto-héberger Jitsi Meet avec Docker : installation et configuration

Dans ce tutoriel, nous allons voir comment déployer facilement Jitsi Meet avec Docker afin de disposer d’une solution de visioconférence auto-hébergée, simple à maintenir et rapide à mettre en place. Jitsi Meet est une alternative open source aux solutions de visioconférence propriétaires, permettant d’organiser des réunions en ligne sans dépendre d’un service tiers.

L’utilisation de Docker permet de simplifier considérablement le déploiement de Jitsi en s’appuyant sur des conteneurs prêts à l’emploi, tout en garantissant une installation reproductible et évolutive. En quelques minutes, vous pourrez disposer d’un serveur Jitsi pleinement fonctionnel, adapté aussi bien à un usage personnel que professionnel.

Retour d’expérience

Depuis 2021, nous avons déployé Jitsi Meet en conteneur Docker au sein de notre organisation. Cette solution est utilisée quotidiennement et s’est montrée stable et fiable, sans incident majeur à signaler depuis sa mise en production.

Le choix de Jitsi Meet nous a permis de nous affranchir de solutions propriétaires telles que Microsoft Teams ou Zoom, tout en conservant des fonctionnalités de visioconférence complètes. L’un des principaux avantages est le contrôle total des données et des flux, ceux-ci restant hébergés sur notre propre infrastructure.

Dans une logique de maîtrise des outils et de sécurité, l’utilisation de Jitsi Meet est également imposée lors des échanges avec des partenaires et prestataires externes. Ce choix permet d’éviter la multiplication des solutions de visioconférence, tout en garantissant un cadre maîtrisé et homogène pour l’ensemble des échanges.

L’utilisation de Jitsi Meet se fait exclusivement via un navigateur web, ce qui facilite l’adoption par les utilisateurs internes comme externes. Aucun client n’est à installer, ce qui réduit les contraintes de déploiement, de maintenance et de support côté postes utilisateurs.

Avec le recul, Jitsi Meet s’est imposé comme une solution mature, robuste et adaptée à un usage professionnel, en particulier dans un contexte d’auto-hébergement et de contrôle des données.

Après ce retour d’expérience, voyons maintenant les prérequis nécessaires pour déployer Jitsi Meet avec Docker.

Prérequis

Voici les éléments nécessaires pour un déploiement réussi de Jitsi :

  • Deux enregistrement DNS
    • jitsi.domain.tld : qui va permettre l’accès à la visioconférence
    • turn.domain.tld : qui va pointer sur le serveur TURN pour mettre le passage à travers les réseaux NAT et obtenir l’adresse IP publique des participants.
  • Un serveur Nginx pour le reverse proxy pour la publication de Jitsi et aussi le service Turn
  • Un serveur hôte Docker pour le déploiement de Jitsi et du service Turn
  • Un serveur Active Directory ou LDAP pour gérer les accès

Il est possible d’utiliser 2 serveurs Docker différents pour séparer Jitsi et le serveur Turn, notamment si vous utilisez ce dernier pour d’autre service comme Nextcloud Talk ou Mattermost.

Nous allons également avoir besoin d’un Active Directory afin de gérer l’accès des participants. Par défaut, Jitsi Meet fonctionne en mode public : toute personne disposant de l’URL de votre service peut créer et lancer une visioconférence, ce qui n’est généralement pas souhaité dans un contexte professionnel.

Afin de restreindre la création des salles de visioconférence, nous allons mettre en place une liaison avec l’Active Directory. Seuls les utilisateurs internes authentifiés pourront ainsi créer et ouvrir une salle de réunion, tandis que les participants externes pourront rejoindre la conférence uniquement sur invitation.

Cette approche permet de sécuriser l’accès au service, d’éviter les usages non contrôlés et de conserver une gestion centralisée des identités, en cohérence avec l’infrastructure existante.

Déploiement du serveur Turn

Nous allons commencer par le serveur Turn est indispensable au bon fonctionnement de Jitsi, nous allons aussi utiliser Docker pour déployer ce service.

Un serveur TURN est utilisé pour garantir la connexion audio et vidéo entre les participants lorsque les échanges directs (peer-to-peer) ne sont pas possibles, notamment en présence de NAT ou de pare-feu restrictifs. Il agit comme un serveur relais pour les flux multimédias.
Dans le cas de Jitsi Meet, un serveur TURN correctement configuré améliore la fiabilité des connexions, en particulier pour les utilisateurs distants ou externes. Il est donc fortement recommandé dans un contexte professionnel.

Sur un hôte Docker, commencer par créer un dossier pour héberger le service Turn :

mkdir -p /containers/turn

Aller dans le dossier :

cd /containers/turn

Créer un fichier docker-compose.yml et aller le contenu ci-dessous :

services:
  coturn:
    image: coturn/coturn
    restart: always
    network_mode: host
    ports:
      - "3478:3478"
      - "3478:3478/udp"
      #- "8080:8080"
    volumes:
      - ./turnserver.conf:/etc/coturn/turnserver.conf

Maintenant faire de même avec le fichier configuration turnserver.conf, le fichier de configuration étant plus conséquent, celui-ci est disponible ici : https://git.rdr-it.com/root/docker-compose/-/tree/main/Coturn

Dans le fichier éditer les lignes 244 (static-auth-secret) et 359 (realm).

static-auth-secret=dqzv2DgOsLSGfdcTkP3EiwYp5XJt5f97bUqxqID7kwyQm3bqib2Pi16M6kYBra0o
realm=domain.tld

Démarrer le serveur Turn :

docker compose up -d

Si votre serveur est DMZ, faire une publication sur le port 3478 en TCP et UPD.

Déploiement de Jitsi avec Docker

Pour le déploiement de Jitsi, nous allons utiliser l’archive officiel qui contient tous les fichiers nécessaires qui est disponible ici : https://github.com/jitsi/docker-jitsi-meet

Sur le serveur hôte Docker, télécharger la dernier release disponible dans le dossier /containers/.

wget https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/stable-10710.tar.gz

Décompresser l’archive :

tar -xzf stable-10710.tar.gz

L’archive crée un dossier docker-jitsi-meet-stable-XXXXX.
Pour simplifier les mises à jour et disposer d’un rollback rapide en cas d’incident, je choisis de conserver le nom du dossier tel qu’il est généré à l’extraction.

Aller dans le dossier créé et on va maintenant passer à la configuration, copier le fichier env.example en le nommant .env

cp env.example .env

Commencer par exécuter le fichier gen-password.sh qui va générer les mots de passe pour les différents services :

./gen-password.sh

Ensuite éditer le fichier .env pour ajuster les paramètres que vous souhaitez, à titre d’exemple voici ma configuration.

# System time zone
TZ=Europe/Paris
# Bloc note partage
ETHERPAD_URL_BASE=http://etherpad.meet.jitsi:9001
# Tableau blanc
WHITEBOARD_COLLAB_SERVER_URL_BASE=http://whiteboard.meet.jitsi

# Authentification
ENABLE_AUTH=1
ENABLE_GUESTS=1
AUTH_TYPE=ldap
LDAP_URL=ldap://ldap.domain.tld
LDAP_BASE=OU=UTILISATEURS,DC=domain,DC=tld
LDAP_BINDDN=CN=jitsi,OU=ACCOUNTS-SERVICE,DC=domain,DC=tld
LDAP_BINDPW=My$EcretP@ssw0rd
LDAP_FILTER=(mail=%u*)
LDAP_AUTH_METHOD=bind
LDAP_VERSION=3
LDAP_USE_TLS=0
LDAP_START_TLS=0

ENABLE_SCTP=1
ENABLE_COLIBRI_WEBSOCKET=0
ENABLE_XMPP_WEBSOCKET=0
DOCKER_HOST_ADDRESS=IP-DOCKER-HOST
JVB_STUN_SERVERS=turn.domain.tld:3478
# valeur de static-auth-secret du fichier turnserver.conf
TURN_CREDENTIALS=dqzv2DgOsLSGfdcTkP3EiwYp5XJt5f97bUqxqID7kwyQm3bqib2Pi16M6kYBra0o
TURN_HOST=turn.domain.tld
TURN_PORT=3478
TURN_TRANSPORT=tcp

Afin de retrouver facilement les paramètres, j’ai mis toute ma configuration à la fin du fichier en laissant commenter les exemples.

Pour finir la configuration entrer la commande ci-dessous pour créer les dossiers nécessaires au bon fonctionnement de Jitsi :

mkdir -p ./.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

Pour ma part, je n’ai jamais créer ces dossiers et je n’ai aucun problème, car la configuration est générée par les variables d’environnement de Docker.

Démarrer maintenant les conteneurs :

docker compose -f docker-compose.yml -f etherpad.yml -f whiteboard.yml up -d

Configuration du virtualhost pour Nginx

Pour finir, la configuration, je vais vous donner la configuration du mon virtualhost sur un reverse proxy Nginx.

upstream jitsiserver {
    server IP-DOCKER-HOST:8443;
}

server {
    server_name jitsi.domain.tld;
    access_log /var/log/nginx/jitsi.domain.tld_access.log;
    error_log /var/log/nginx/jitsi.domain.tld_error.log;

    # Remove HEADER
    more_clear_headers Server;
    more_clear_headers X-Powered-By;

    listen 443 ssl;
    http2 on;

    ssl_certificate /etc/nginx/ssl/domaintld.cert;
    ssl_certificate_key /etc/nginx/ssl/domaintld.key;

     location / {  
        proxy_pass https://jitsiserver;
        proxy_set_header X-Forwarded-For $remote_addr; 
        proxy_set_header Host $http_host;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    } 

    location /xmpp-websocket {
        proxy_pass https://jitsiserver;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_ssl_verify off;
    }
    location /colibri-ws {
        proxy_pass https://jitsiserver;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_ssl_verify off;
    }
}

server {
	listen 80;
    server_name jitsi.domain.tld;
    return 301 https://jitsi.domain.tld/$request_uri;
}

Mise à jour de Jitsi

Pour la mise à jour, procéder de la même façon :

  • Télécharger l’archive de le release
  • Décompresser l’archive
  • Copier le .env de la release actuelle dans la nouvelle
  • Arrêter les conteneurs dans la version acutelle
  • Aller dans le dossier de la nouvelle version et démarrer le conteneur

Utilisation de Jitsi

Aller sur l’URL que vous avez configurer, sur la page d’accueil, entrer le nom de la conférence et cliquer sur Démarrer la conférence.

Entrer votre nom et cliquer sur Rejoindre la réunion.

Cliquer ensuite sur Je suis l’hôte et entrer vos identifiants Active Directory pour ouvrir la conférence.

Vous êtes ensuite connecté à la conférence, vous aurez aussi accéder au tableau blanc et bloc note.

Si vous souhaitez partager un lien de réunion dans un e-mail, il suffit de mettre le nom de la conférence avec le / de l’url : https://jitsi.domain.tld/ma-conference, il n’est pas nécessaire de la créer en amont depuis la page d’accueil.

FAQ

Jitsi Meet est-il adapté à un usage professionnel ?

Oui. Jitsi Meet est une solution mature et éprouvée, parfaitement adaptée à un usage professionnel, y compris en production. Utilisé en auto-hébergement, il permet de garder le contrôle total des données et de s’affranchir des solutions propriétaires.

Docker est-il obligatoire pour déployer Jitsi Meet ?

Non, Jitsi Meet peut être installé de manière classique. Cependant, l’utilisation de Docker simplifie fortement le déploiement, la maintenance et les mises à jour, tout en garantissant une installation reproductible

Peut-on restreindre l’accès aux salles de visioconférence ?

Oui. Par défaut, Jitsi Meet est public, mais il est possible de restreindre la création des salles via une authentification (Active Directory, LDAP, SSO, etc.). Seuls les utilisateurs autorisés peuvent alors ouvrir une conférence.

Les participants externes peuvent-ils rejoindre une réunion ?

Oui. Une fois la salle créée par un utilisateur authentifié, les participants externes peuvent rejoindre la réunion via un simple lien, sans authentification ni installation de client.

Un serveur TURN est-il indispensable ?

Il n’est pas strictement obligatoire, mais il est fortement recommandé dans un contexte professionnel. Un serveur TURN améliore la fiabilité des connexions, notamment pour les utilisateurs derrière des pare-feu ou des NAT restrictifs.

Conclusion

Le déploiement de Jitsi Meet avec Docker permet de mettre en place rapidement une solution de visioconférence auto-hébergée, sécurisée et maîtrisée, adaptée à un usage professionnel. Couplé à une authentification via Active Directory et à un serveur TURN, Jitsi devient une alternative crédible et efficace aux solutions propriétaires du marché.

Ce tutoriel se concentre volontairement sur le déploiement et les bases de la configuration. Certains aspects plus avancés n’ont pas été abordés, comme la collecte de statistiques, la supervision, l’optimisation des performances ou encore les configurations avancées.

Pour aller plus loin, il est recommandé de consulter la documentation officielle de Jitsi Meet, qui couvre l’ensemble de ces sujets en détail : https://jitsi.github.io/handbook/docs/intro

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

Laisser un commentaire