⚠ SITE EN TRAVAUX ⚠

Ce site suit une démarche éco-responsable. Il est développé en "dark mode", avec des illustrations minimalistes et détourées, pour se cultiver tout en minimisant son empreinte carbone.

Installer Jitsi sur votre NAS Synology via Docker

 Jitsi est une application open source de visioconférence (de messagerie instantanée et voix sur IP)

Ref :         https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker

        Visioconférence privée Jitsi sur Synology NAS – Virtualconfusion

  1.          Prérequis

  1. Avoir un NAS Synology qui supporte le paquet Container Manager (centre de téléchargement).

Modèles compatibles sur la page du site de Synology.

Ou pour les modèles en version DSM 6.2 sur la page du site de Synology.

  1. Avoir un nom de domaine (le mien est chez OVH moins de 10€/an). Ex : mondomaine.fr, monsite.com

  1. Avoir configuré un certificat Let's Encrypt pour votre sous domaine meet.mondomaine.fr[a]. Pour cela allez sur votre NAS => panneau de configuration => Sécurité => Certificat

  1. Créer un dossier partagé sur votre NAS : docker

B)         Démarrage rapide

Afin d'exécuter rapidement Jitsi Meet sur une machine exécutant Docker et Docker Compose, suivez ces étapes :

  1. Créer les répertoires : docker-jitsi-config et docker-jitsi-meet-master dans le répertoire partagé docker

  1. Créer les répertoires : jibri, jicofo,   docker-jitsi-config

  1. Téléchargez le fichier zip suivant docker-jitsi-meet-maste.zip.

  1. Extrayez sur votre NAS le contenu du fichier zip, dans le dossier /docker/docker-jitsi-meet-master (dossier créé au point A-1)

  1. Allez dans le dossier /docker/docker-jitsi-meet-master et faite une copie du fichier env.example dans un fichier avec pour nom .env

  1. Ouvrez une console SSH sur votre NAS

  1. Allez dans le dossier que vous venez de créer, la commande sera quelque chose comme (selon le nom de votre volume, ici le mien est volume1) :

  cd /volume1/docker/docker-jitsi-meet-master

  1. Lancer le script suivant (il va générer automatiquement des mots de passe dans le fichier .env pour sécuriser les communications entre les différents services qui sont utilisés par JITSI)  :

   ./gen-passwords.sh

  1. Dans le dossier docker-jitsi-config, créez les sous-dossiers dans lequel stocker les fichiers de configuration :

  1. Dans le dossier prosody, créez les sous-dossiers :

Cette ligne horizontale signifie que je me suis arrêté là le tuto, et la suite est la traduction google du site en anglais dont je me sert pour faire le tuto. Je continue petit à petit. Pour me contacter => yohan.aloe@hotmail.fr


  1. Modifiez le fichier .env et remplacez la ligne CONFIG=~/.jitsi-meet-cfg par CONFIG=/volume1/docker/docker-jitsi-config

  1. Activez l’authentification, l’accès invité et l’authentification interne :

  1. ENABLE_AUTH=1

  1. ENABLE_GUESTS=1

  1. AUTH_TYPE=internal

  1. Personnalisez les lignes liées à votre environnement et à l’adresse IP de l’hôte docker (votre interface NAS). J’utilise le DNS effrayé pour acheminer mon domaine personnel vers l’adresse IP publique de mon NAS.
  2. PUBLIC_URL=https://meet.mydomain.com
  3. DOCKER_HOST_ADDRESS=192.168.X.X
  4. Vous pouvez maintenant créer et exécuter les conteneurs docker :
  5. docker-compose up -d
  6. Pour protéger l’accès à votre solution de réunion, connectez-vous au conteneur Prosody :
  7. docker exec -it docker-jitsi-meet-master_prosody_1 /bin/bash
  8. et créez l’enregistrement de votre utilisateur :
  9. prosodyctl --config /config/prosody.cfg.lua register TheDesiredUsername meet.jitsi TheDesiredPassword
  10. Vous pouvez utiliser le proxy inverse Synology NAS pour rediriger votre domaine HTTPS vers votre conteneur sur le port 8443 (Application Portal > Reverse Proxy > Create). C’est obligatoire pour disposer d’une solution entièrement fonctionnelle. (éviter les problèmes avec le contenu vidéo)
  11. Vous devez également générer un certificat et l’installer sur votre NAS (Security > Certificates > Create)
  12. J’utilise un certificat letsencrypt mais vous pouvez aussi en importer un.
  13. Configurer le certificat à présenter pour meet.mydomain.com (Certificats de > de sécurité > Configurer)
  14. Une fois ces étapes terminées, vous devriez disposer d’une solution de visioconférence privée fonctionnelle, avec un accès hôte et invité authentifié activé sur votre Synology NAS.
  15. Définissez des mots de passe forts dans les options de la section de sécurité du .env fichier en exécutant le script bash suivant
  16. ./gen-passwords.sh
  17. Créer CONFIG les répertoires requis
  1. mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
  1. echo web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri | % { mkdir "~/.jitsi-meet-cfg/$_" }
  2. Courir docker-compose up -d
  3. Accédez à l'interface utilisateur Web sur https://localhost:8443(ou sur un autre port, au cas où vous auriez modifié le .env fichier).

NOTE

HTTP (et non HTTPS) est également disponible (sur le port 8000, par défaut), mais c'est par exemple pour une configuration de proxy inverse ; l'accès direct via HTTP au lieu de HTTPS entraîne des erreurs WebRTC telles que Échec de l'accès à votre microphone/caméra : impossible d'utiliser le microphone/la caméra pour une raison inconnue. Impossible de lire la propriété « getUserMedia » de undefined ou navigator.mediaDevices est undefined .

Si vous souhaitez également utiliser jigasi, configurez d'abord votre fichier env avec les informations d'identification SIP, puis exécutez Docker Compose comme suit :

docker-compose -f docker-compose.yml -f jigasi.yml up

Si vous souhaitez activer le partage de documents via Etherpad , configurez-le et exécutez Docker Compose comme suit :

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

Si vous souhaitez également utiliser jibri, configurez d'abord un hôte comme décrit dans la section de configuration de JItsi BRoadcasting Infrastructure, puis exécutez Docker Compose comme suit :

docker-compose -f docker-compose.yml -f jibri.yml up -d

ou pour utiliser jigasi aussi :

docker-compose -f docker-compose.yml -f jigasi.yml -f jibri.yml up -d

Développement de tests / builds

Téléchargez le dernier code :

git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet

NOTE

Le code master est conçu pour fonctionner avec les images instables. Ne l'exécutez pas avec les images de version.

Courez docker-compose up comme d'habitude.

Chaque jour, une nouvelle version d'image "instable" est téléchargée.

Construire vos propres images

Téléchargez le dernier code :

git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet

Le fourni Makefilefournit un moyen complet de créer la pile entière ou des images individuelles.

Pour créer toutes les images :

make

Pour construire une image spécifique (l'image web par exemple) :

make build_web

Une fois que votre version locale est prête, assurez-vous de l'ajouter JITSI_IMAGE_VERSION=latest à votre .env fichier.

Note de sécurité

Cette configuration avait auparavant des mots de passe par défaut pour les comptes internes utilisés dans tous les composants. Afin de sécuriser la configuration par défaut, ceux-ci ont été supprimés et les conteneurs respectifs ne démarreront pas sans avoir défini un mot de passe.

Des mots de passe forts peuvent être générés comme suit : ./gen-passwords.sh Cela modifiera votre .env fichier (une sauvegarde est enregistrée dans .env.bak) et définira des mots de passe forts pour chacune des options requises. Les mots de passe sont générés à l'aide de openssl rand -hex 16.

NE réutilisez AUCUN des mots de passe.

Architecture

Une installation Jitsi Meet peut être décomposée en les composants suivants :

Le diagramme montre un déploiement typique dans un hôte exécutant Docker. Ce projet sépare chacun des composants ci-dessus dans des conteneurs interconnectés. À cette fin, plusieurs images de conteneurs sont fournies.

Ports externes

Les ports externes suivants doivent être ouverts sur un pare-feu :

Également 20000-20050/udppour jigasi, au cas où vous choisiriez de le déployer pour faciliter l'accès SIP.

Par exemple, sur un serveur CentOS/Fedora, cela se ferait comme ceci (sans accès SIP) :

sudo firewall-cmd --permanent --add-port=80/tcp

sudo firewall-cmd --permanent --add-port=443/tcp

sudo firewall-cmd --permanent --add-port=10000/udp

sudo firewall-cmd --reload

Consultez la section correspondante dans le guide de configuration manuelle .

Images

Considérations de conception

Jitsi Meet utilise XMPP pour la signalisation, d'où la nécessité du serveur XMPP. La configuration fournie par ces conteneurs n'expose pas le serveur XMPP au monde extérieur. Au lieu de cela, il reste complètement scellé et le routage du trafic XMPP s'effectue uniquement sur un réseau défini par l'utilisateur.

Le serveur XMPP peut être exposé au monde extérieur, mais cela sort du cadre de ce projet.

Configuration

La configuration s'effectue via des variables d'environnement contenues dans un .envfichier. Vous pouvez copier le env.examplefichier fourni comme référence.

Variable

Description

Exemple

CONFIG

Répertoire où toute la configuration sera stockée

/opt/jitsi-meet-cfg

TZ

Fuseau horaire du système

Europe/Amsterdam

HTTP_PORT

Port exposé pour le trafic HTTP

8000

HTTPS_PORT

Port exposé pour le trafic HTTPS

8443

JVB_ADVERTISE_IPS

Adresses IP de l'hôte Docker (séparées par des virgules), nécessaires pour les environnements LAN

192.168.1.1

PUBLIC_URL

URL publique du service Web

https://meet.example.com

NOTE

Les applications mobiles ne fonctionneront pas avec des certificats auto-signés (valeur par défaut). Voir ci-dessous pour obtenir des instructions sur la façon d'obtenir un certificat approprié avec Let's Encrypt.

Configuration TLS

Chiffrons la configuration

Si vous souhaitez exposer votre instance Jitsi Meet directement au trafic extérieur, mais que vous ne possédez pas de certificat TLS approprié, vous avez de la chance car la prise en charge de Let's Encrypt est intégrée. Voici les options requises :

Variable

Description

Exemple

ENABLE_LETSENCRYPT

Activer la génération de certificat Let's Encrypt

1

LETSENCRYPT_DOMAIN

Domaine pour lequel générer le certificat

rencontre.exemple.com

LETSENCRYPT_EMAIL

E-Mail pour recevoir des notifications importantes sur votre compte (obligatoire)

alice@atlanta.net

De plus, vous devrez définir HTTP_PORTà 80 et HTTPS_PORTà 443 et PUBLIC_URL votre domaine. Vous pouvez également envisager de rediriger le trafic HTTP vers HTTPS en définissant ENABLE_HTTP_REDIRECT=1.

Avertissement de limite de débit de Let's Encrypt : Let's Encrypt a une limite au nombre de fois que vous pouvez soumettre une demande de nouveau certificat pour votre nom de domaine. Au moment de la rédaction de cet article, la limite actuelle est de cinq nouveaux certificats (en double) pour le même nom de domaine tous les sept jours. Pour cette raison, il est recommandé de désactiver les variables d'environnement Let's Encrypt .env si vous envisagez de supprimer le .jitsi-meet-cfg dossier. Sinon, vous souhaiterez peut-être envisager de déplacer le .jitsi-meet-cfg dossier vers un autre emplacement afin de disposer d'un endroit sûr pour trouver le certificat déjà émis par Let's Encrypt. Ou effectuez les tests initiaux avec Let's Encrypt désactivé, puis réactivez Let's Encrypt une fois les tests terminés.

NOTE

Lorsque vous quittez LETSENCRYPT_USE_STAGING, vous devrez effacer manuellement les certificats de .jitsi-meet-cfg/web.

Pour plus d'informations sur les limites de débit de Let's Encrypt, visitez : https://letsencrypt.org/docs/rate-limits/

Utilisation du certificat et de la clé

Si vous possédez un certificat TLS approprié et n'avez pas besoin d'un certificat Let's Encrypt, vous pouvez configurer le conteneur Jitsi Meet pour l'utiliser.

Contrairement aux certificats Let's Encrypt, cela n'est pas configuré via le .env fichier, mais en indiquant web au service de Jitsi Meet de monter les deux volumes suivants :

Le faire dans docker-compose.ymlun fichier devrait ressembler à ceci :

services:

   web:

       ...

       volumes:

           ...

           - /path/to/your/cert.fullchain:/config/keys/cert.crt

           - /path/to/your/cert.key:/config/keys/cert.key

Configuration des fonctionnalités (config.js )

Variable

Description

Exemple

TOOLBAR_BUTTONS

Configurez les boutons de la barre d'outils. Ajoutez le nom des boutons séparé par une virgule (pas d'espace entre les virgules)

HIDE_PREMEETING_BUTTONS

Masquez les boutons sur l’écran de pré-adhésion. Ajoutez le nom des boutons séparé par une virgule

ENABLE_LOBBY

Contrôler si la fonction de lobby doit être activée ou non

1

ENABLE_AV_MODERATION

Contrôler si la modération A/V doit être activée ou non

1

ENABLE_PREJOIN_PAGE

Afficher une page de pré-adhésion avant d'entrer dans une conférence

1

ENABLE_WELCOME_PAGE

Activer la page d'accueil

1

ENABLE_CLOSE_PAGE

Activer la page de fermeture

0

DISABLE_AUDIO_LEVELS

Désactiver la mesure des niveaux audio

0

ENABLE_NOISY_MIC_DETECTION

Activer la détection de micro bruyant

1

ENABLE_BREAKOUT_ROOMS

Activer les salles de sous-commission

1

Configuration de la passerelle Jigasi SIP (audio uniquement)

Si vous souhaitez activer la passerelle SIP, ces options sont requises :

Variable

Description

Exemple

JIGASI_SIP_URI

URI SIP pour les appels entrants/sortants

test@sip2sip.info

JIGASI_SIP_PASSWORD

Mot de passe pour le compte SIP spécifié

<unset>

JIGASI_SIP_SERVER

Serveur SIP (utilisez le domaine du compte SIP en cas de doute)

sip2sip.info

JIGASI_SIP_PORT

Port du serveur SIP

5060

JIGASI_SIP_TRANSPORT

Transport SIP

UDP

Afficher les informations

Variable

Description

Exemple

DIALIN_NUMBERS_URL

URL vers le JSON avec tous les numéros d'appel

https://meet.example.com/dialin.json

CONFCODE_URL

URL vers l'API pour vérifier/générer les codes d'appel

https://jitsi-api.jitsi.net/conferenceMapper

Le JSON avec les numéros d'appel devrait ressembler à ceci :

{"message":"Dial-In numbers:","numbers":{"DE": ["+49-721-0000-0000"]},"numbersEnabled":true}

Configuration d'enregistrement / streaming live avec Jibri

Si vous utilisez une version antérieure à 7439, une configuration supplémentaire est nécessaire.

Si vous souhaitez activer Jibri, ces options sont requises :

Variable

Description

Exemple

ENABLE_RECORDING

Activer l'enregistrement/la diffusion en direct

1

Configuration Jibri étendue :

Variable

Description

Exemple

JIBRI_RECORDER_USER

Utilisateur de l'enregistreur interne pour les connexions client Jibri

enregistreur

JIBRI_RECORDER_PASSWORD

Mot de passe de l'enregistreur interne pour les connexions client Jibri

<unset>

JIBRI_RECORDING_DIR

Répertoire des enregistrements à l'intérieur du conteneur Jibri

/config/enregistrements

JIBRI_FINALIZE_RECORDING_SCRIPT_PATH

Le script de finalisation. S'exécutera une fois l'enregistrement terminé

/config/finalize.sh

JIBRI_XMPP_USER

Utilisateur interne pour les connexions client Jibri.

Jibri

JIBRI_STRIP_DOMAIN_JID

Domaine de préfixe pour la bande à l'intérieur de Jibri (veuillez consulter env.example pour plus de détails)

muc

JIBRI_BREWERY_MUC

Nom MUC pour la piscine Jibri

jibribrasserie

JIBRI_PENDING_TIMEOUT

Expiration du délai de connexion MUC

90

Configuration de Jitsi Meet

CETTE SECTION CONTIENT EN PARTIE DES PARAMÈTRES EN DOUBLE

Certains paramètres de votre docker-compose.ymlfichier START_AUDIO_MUTED seront écrasés si vous suivez le guide ci-dessous.

Jitsi-Meet utilise deux fichiers de configuration pour modifier les paramètres par défaut dans l'interface Web : config.jset interface_config.js. Les fichiers se trouvent dans le CONFIGrépertoire configuré dans votre fichier d'environnement.

Ces fichiers sont recréés à chaque redémarrage du conteneur. Si vous souhaitez fournir vos propres paramètres, créez vos propres fichiers de configuration : custom-config.jset custom-interface_config.js.

Il suffit de fournir uniquement vos paramètres pertinents, les scripts Docker ajouteront vos fichiers personnalisés à ceux par défaut !

Authentification

L'authentification peut être contrôlée avec les variables d'environnement ci-dessous. Si l'accès invité est activé, les utilisateurs non authentifiés devront attendre qu'un utilisateur s'authentifie avant de pouvoir rejoindre une salle. Si l'accès invité n'est pas activé, chaque utilisateur devra s'authentifier avant de pouvoir rejoindre.

Si l'authentification est activée, une fois qu'un utilisateur authentifié s'est connecté, il est toujours connecté avant l'expiration du délai de session. Vous pouvez ENABLE_AUTO_LOGIN=0désactiver cette fonctionnalité de connexion automatique par défaut ou limiter JICOFO_AUTH_LIFETIMEla durée de vie de la session.

Variable

Description

Exemple

ENABLE_AUTH

Activer l'authentification

1

ENABLE_GUESTS

Activer l'accès invité

1

AUTH_TYPE

Sélectionnez le type d'authentification (interne, jwt ou ldap)

interne

ENABLE_AUTO_LOGIN

Activer la connexion automatique

1

JICOFO_AUTH_LIFETIME

Sélectionnez la valeur du délai d'expiration de la session pour un utilisateur authentifié

3 heures

Authentification interne

Le mode d'authentification par défaut ( internal) utilise les informations d'identification XMPP pour authentifier les utilisateurs. Pour l'activer, vous devez activer l'authentification avec ENABLE_AUTHet définir AUTH_TYPEsur internal, puis configurer les paramètres que vous pouvez voir ci-dessous.

Les utilisateurs internes doivent être créés avec l' prosodyctlutilitaire dans le prosodyconteneur. Pour ce faire, exécutez d’abord un shell dans le conteneur correspondant :

docker-compose exec prosody /bin/bash

Une fois dans le conteneur, exécutez la commande suivante pour créer un utilisateur :

prosodyctl --config /config/prosody.cfg.lua register TheDesiredUsername meet.jitsi TheDesiredPassword

Notez que la commande ne produit aucune sortie.

Pour supprimer un utilisateur, exécutez la commande suivante dans le conteneur :

prosodyctl --config /config/prosody.cfg.lua unregister TheDesiredUsername meet.jitsi

Pour répertorier tous les utilisateurs, exécutez la commande suivante dans le conteneur :

find /config/data/meet%2ejitsi/accounts -type f -exec basename {} .dat \;

Authentification via LDAP

Vous pouvez utiliser LDAP pour authentifier les utilisateurs. Pour l'activer, vous devez activer l'authentification avec ENABLE_AUTHet définir AUTH_TYPEsur ldap, puis configurer les paramètres que vous pouvez voir ci-dessous.

Variable

Description

Exemple

LDAP_URL

URL pour la connexion LDAP

ldaps://ldap.domain.com/

LDAP_BASE

DN de base LDAP. Peut être vide.

DC=exemple,DC=domaine,DC=com

LDAP_BINDDN

Nom distinctif de l'utilisateur LDAP. Ne spécifiez pas ce paramètre pour la liaison anonyme.

CN=binduser,OU=utilisateurs,DC=exemple,DC=domaine,DC=com

LDAP_BINDPW

Mot de passe de l'utilisateur LDAP. Ne spécifiez pas ce paramètre pour la liaison anonyme.

LdapUserPassw0rd

LDAP_FILTER

Filtre LDAP.

(sAMAccountName=%u)

LDAP_AUTH_METHOD

Méthode d'authentification LDAP.

lier

LDAP_VERSION

Version du protocole LDAP

3

LDAP_USE_TLS

Activer LDAP TLS

1

LDAP_TLS_CIPHERS

Définir la liste des chiffrements TLS pour autoriser

SÉCURISÉ256 : SÉCURISÉ128

LDAP_TLS_CHECK_PEER

Exiger et vérifier le certificat du serveur LDAP

1

LDAP_TLS_CACERT_FILE

Chemin d'accès au fichier de certificat CA. Utilisé lorsque la vérification du certificat du serveur est activée

/etc/ssl/certs/ca-certificates.crt

LDAP_TLS_CACERT_DIR

Chemin d'accès au répertoire des certificats CA. Utilisé lorsque la vérification du certificat du serveur est activée.

/etc/ssl/certs

LDAP_START_TLS

Activer START_TLS, nécessite LDAPv3, l'URL doit être ldap:// et non ldaps://

0

[a]Important remplacer toutes les indications en vert et gras par vos paramètres personnels