Outils pour utilisateurs

Outils du site


meet_jitsi_un_container_lxc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
meet_jitsi_un_container_lxc [2021/02/11 22:35] – [Génération des certificats ssl letencrypt] Benjamin Labomediameet_jitsi_un_container_lxc [2023/12/01 00:53] (Version actuelle) – [Ressources config jitsi] Labomedia
Ligne 1: Ligne 1:
 ====== Meet jitsi dans un container LXC ====== ====== Meet jitsi dans un container LXC ======
 +
 +On suppose que LXC et certbot sont installés, et que l'on veut installer Meet Jitsi sur visio.futuretic.fr.
 +
 +Inspirations :
 +
 +  * [[https://wiki.pielo.net/jitsi-meet-sur-lxc|Jitsi Meet sur LXC]]
 +  * [[https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart|Installer Jitsi sur Debian (doc officielle)]]
 +  * [[https://debamax.com/fr/blog/2020/03/18/installing-jitsi-behind-a-reverse-proxy/|Installer Meet Jitsi derrière un proxy apache]]
 +
 +
  
 ===== Installation du container ===== ===== Installation du container =====
-[[https://wiki.pielo.net/jitsi-meet-sur-lxc|En suivant ce déroulé]]+ 
 +On crée un container nommé **meet**, sous Debian Buster (10) : 
   lxc-create -t download -n meet -- -d debian -r buster -a amd64   lxc-create -t download -n meet -- -d debian -r buster -a amd64
-Pas d'ip fixe, config réseau par défaut pour le container 
-  lxc-start visio 
-  lxc-ls -f 
-  lxc-attach visio 
-  root@meet 
  
-===== Génération des certificats ssl letencrypt ===== +Pas d'ip fixe, config réseau par défaut pour le container.
-Utilisation d'un vhost générique activé pour l'occasion pointant sur un répertoire du host accessible d'apache +
-  certbot certonly --webroot -w /home/adminbox/www/ynh.futuretic.fr -d visio.futuretic.fr +
-bien sale, on génére le certificat la première fois après renouvelement auto, dans le vhost suivant, on utilise le certificat généré+
  
-**Plus propre !** +On démarre le container :
-Ajouter dans le vhost le-ssl.conf les lignes suivantes avant le ProxyPass +
  
-<code> +  lxc-start meet
-                # proxy pour cetificat +
-                DocumentRoot /var/www/html +
-                ProxyPass /.well-known !+
  
-</code>+On peut voir les congainers ouverts avec la commande :
  
-Faire en sorte que le répertoire /var/www/html soit accessible à www-data+  lxc-ls -f 
 +   
 +On rentre dans le container avec la commande : 
 +   
 +  lxc-attach meet 
 +   
 +===== Création des certificats SSL letsencrypt =====
  
-Et modifier la configuration du renouvellement de let'sencrcypt pour correspondre à ce vhost comme suit : +On utilise le virtual host par défaut d'apache écoutant le port 80 et pointant vers un dossier accessible par apache **/var/www/html**Il servira à amorcer la création des certificats.
-  nano nano /etc/letsencrypt/renewal/visio.futuretic.fr.conf+
  
-<code> +Executer cette commande pour générer les certificats :
-# Options used in the renewal process +
-[renewalparams] +
-account = ***************************** +
-authenticator = webroot +
-server = https://acme-v02.api.letsencrypt.org/directory +
-http01_address = 135.181.129.123 +
-[[webroot_map]] +
-visio.futuretic.fr = /var/www/html +
-</code>+
  
-Certbot renew devrait être content+  certbot certonly --webroot -w /var/www/html -d visio.futuretic.fr 
 +   
 +Maintenant que les certificats sont créés, la création des virtual hosts sur les ports 80 (http) et 443 (https) sera abordé plus bas.
 ===== Installation de meet jitsi ===== ===== Installation de meet jitsi =====
-[[https://wiki.pielo.net/jitsi-meet-sur-lxc|En suivant ce déroulé]]+ 
 +Entrer dans le container et installer Jitsi comme décrit dans la [[https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart|doc officielle]].
  
 ===== Configuration host hostname ===== ===== Configuration host hostname =====
-Sur le host + 
-  nano /etc/hosts +Sur le host, ajouter dans **/etc/hosts** (changer l'IP du container par la votre) : 
-  10.0.3.250 visio.futuretic.fr + 
-Dans le container +  10.0.3.211 visio.futuretic.fr 
-  nano /etc/hosts +   
-  127.0.1.1       meet visio visio.futuretic.fr +Dans le container, ajouter dans **/etc/hosts** : 
-  root@meet /home # hostname + 
-  visio+  127.0.1.1       visio visio.futuretic.fr 
 +  10.0.3.211      visio.futuretic.fr 
 +   
 +et dans le fichier **/etc/hostname** : 
 +   
 +  visio.futuretic.fr
  
 ===== Création des vhost apache pour proxy le traffic vers le container ===== ===== Création des vhost apache pour proxy le traffic vers le container =====
 +
 +On crée d'abord le vhost du port 80 qui redirige vers le 443 :
 +
   nano /etc/apache2/sites-available/visio.futuretic.fr.conf   nano /etc/apache2/sites-available/visio.futuretic.fr.conf
-<file php config>+   
 +Avec dedans : 
 + 
 +<code bash config>
 <VirtualHost *:80> <VirtualHost *:80>
-        ServerAdmin tech@futuretic.fr + 
-        ServerName visio.futuretic.fr+        ServerAdmin     user@domaine.tld 
 +        ServerName      visio.futuretic.fr
  
         RewriteEngine on         RewriteEngine on
         RewriteRule ^ https://visio.futuretic.fr%{REQUEST_URI} [END,QSA,R=permanent]         RewriteRule ^ https://visio.futuretic.fr%{REQUEST_URI} [END,QSA,R=permanent]
-</file> 
  
 +</VirtualHost>
 +</code>
 +
 +Puis le vhost du port 443 :
  
   nano /etc/apache2/sites-available/visio.futuretic.fr-le-ssl.conf   nano /etc/apache2/sites-available/visio.futuretic.fr-le-ssl.conf
-<file php config>+   
 +Avec dedans : 
 +   
 +<code bash config>
 <IfModule mod_ssl.c> <IfModule mod_ssl.c>
 +
         <VirtualHost *:443>         <VirtualHost *:443>
-               ServerAdmin     tech@futuretic.fr 
-               ServerName      visio.futuretic.fr 
  
-               SSLEngine on +                ServerAdmin     user@domaine.tld 
-               SSLProxyEngine On+                ServerName      visio.futuretic.fr 
 +                 
 +                # Headers for security 
 +                <IfModule mod_headers.c> 
 +                        # Deja fourni par Jitsi 
 +                        # Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" 
 +                        Header set X-XSS-Protection "1; mode=block" 
 +                        Header set X-Frame-Options "sameorigin" 
 +                        Header set X-Content-Type-Options "nosniff" 
 +                </IfModule>
  
-               SSLCertificateFile /etc/letsencrypt/live/visio.futuretic.fr/fullchain.pem + # SSL config 
-               SSLCertificateKeyFile /etc/letsencrypt/live/visio.futuretic.fr/privkey.pem +                SSLEngine on 
-               Include /etc/letsencrypt/options-ssl-apache.conf+                SSLProxyEngine On 
 +                SSLProxyVerify none 
 +                SSLProxyCheckPeerCN off 
 +                SSLProxyCheckPeerName off 
 +                SSLProxyCheckPeerExpire off 
 + 
 +                # SSL certificates 
 +                SSLCertificateFile /etc/letsencrypt/live/visio.futuretic.fr/fullchain.pem 
 +                SSLCertificateKeyFile /etc/letsencrypt/live/visio.futuretic.fr/privkey.pem 
 +                Include /etc/letsencrypt/options-ssl-apache.conf 
 + 
 + # Proxy base parameters 
 +                ProxyPreserveHost       On 
 +                 
 +                # Proxy pour certificat 
 +                DocumentRoot /var/www/html 
 +                ProxyPass /.well-known !
  
-          ProxyPreserveHost       On +                ProxyPass / https://visio.futuretic.fr/ 
-         ProxyPass / https://visio.futuretic.fr/ +                ProxyPassReverse / https://visio.futuretic.fr/ 
- ProxyPassReverse / https://visio.futuretic.fr/+                #ProxyPass "/" "https://10.0.3.211/" 
 +                #ProxyPassReverse "/" "https://10.0.3.211/"
  
-                # For WebSockets+                # Set WebSockets
                 RewriteEngine on                 RewriteEngine on
                 RewriteCond %{HTTP:Connection} Upgrade [NC]                 RewriteCond %{HTTP:Connection} Upgrade [NC]
Ligne 95: Ligne 137:
                 #SetEnv proxy-sendchunks 1                 #SetEnv proxy-sendchunks 1
  
- <Proxy *> +                # Set rights 
- Order deny,allow +                <Proxy *> 
- Allow from all +                        Order deny,allow 
- </Proxy>+                        Allow from all 
 +                </Proxy>
  
 +                # Logs
                 ErrorLog /var/log/apache2/visio.futuretic.fr.error.log                 ErrorLog /var/log/apache2/visio.futuretic.fr.error.log
                 LogLevel error                 LogLevel error
Ligne 107: Ligne 151:
  
 </IfModule> </IfModule>
-</file>+</code>
  
-===== Réglages Firewall et réseau pour container LXC ===== +===== Réglages Firewall et Réseau ===== 
-==== Sur l'hote ====+==== Dans le container ====
  
-Ouvrir les ports nécessaires au fonctionnement de jitsi avec ufw +Installer UFW et autoriser les ports suivant : 
-<code>+ 
 +<code bash> 
 +sudo ufw allow 22/tcp
 sudo ufw allow 80/tcp sudo ufw allow 80/tcp
 sudo ufw allow 443/tcp sudo ufw allow 443/tcp
 +sudo ufw allow 3478/udp
 +sudo ufw allow 5349/tcp
 sudo ufw allow 10000/udp sudo ufw allow 10000/udp
 +sudo ufw enable
 +</code>
 +
 +Configurer le videobridge en modifiant le fichier **/etc/jitsi/videobridge/sip-communicator.properties** :
 +
 +<code bash>
 +org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
 +# On ne configure pas de serveur STUN pour le moment
 +#org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443
 +# Apparemment c'est bien de mettre cette instruction aussi : 
 +org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
 +# Pour faire fonctionner dans un container LXC, on précise l'IP locale et publique
 +org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=10.0.3.211
 +# Remplacer XXX.XXX.XXX.XXX par votre IP publique de l'hote, pas du container
 +org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=XXX.XXX.XXX.XXX
 +org.jitsi.videobridge.ENABLE_STATISTICS=true
 +org.jitsi.videobridge.STATISTICS_TRANSPORT=muc
 +org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=localhost
 +</code>
 +
 +Puis redémarrer videobridge :
 +
 +   systemctl restart jitsi-videobridge2
 +
 +[[https://community.jitsi.org/t/jitsi-users-getting-jitsi-meet-to-work-in-a-container-behind-double-nat/11446/5|Voir ce sujet si embrouilles]].
 +
 +==== Sur l'hote ====
 +
 +Installer UFW et autoriser les ports suivant :
 +
 +<code bash>
 sudo ufw allow 22/tcp sudo ufw allow 22/tcp
 +sudo ufw allow 80/tcp
 +sudo ufw allow 443/tcp
 sudo ufw allow 3478/udp sudo ufw allow 3478/udp
 sudo ufw allow 5349/tcp sudo ufw allow 5349/tcp
 +sudo ufw allow 10000/udp
 sudo ufw enable sudo ufw enable
 </code> </code>
-Check du firewall status+ 
 +Vérifier le status du firewall 
   sudo ufw status verbose   sudo ufw status verbose
-Il faut transférer certains de ces ports au container jitsi (pour 80 et 443, c'est l'apache du host qui fait le proxy vers le container) : ajouter en début de fichier  +   
-  nano /etc/ufw/before.rules+Il faut transférer certains de ces ports au container jitsi (pour 80 et 443, c'est apache sur l'hote qui fait le proxy vers le container).
  
-<code>+Dans le fichier **/etc/ufw/before.rules**, ajouter au début : 
 + 
 +<code bash>
 *nat *nat
 :PREROUTING ACCEPT [0:0] :PREROUTING ACCEPT [0:0]
 # jitsi specific rules # jitsi specific rules
--A PREROUTING -i enp35s0 -p udp --dport 10000 -j DNAT --to 10.0.3.211:10000 +-A PREROUTING -i enp8s0 -p udp --dport 10000 -j DNAT --to-destination 10.0.3.211:10000 
--A PREROUTING -i enp35s0 -p tcp --dport 3478 -j DNAT --to 10.0.3.211:3478 +-A PREROUTING -i enp8s0 -p udp --dport 3478 -j DNAT --to-destination 10.0.3.211:3478 
--A PREROUTING -i enp35s0 -p tcp --dport 5349 -j DNAT --to 10.0.3.211:5349+-A PREROUTING -i enp8s0 -p tcp --dport 5349 -j DNAT --to-destination 10.0.3.211:5349 
 +# General postrouting for LXC containers 
 +-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
 COMMIT COMMIT
 </code> </code>
  
-10.0.3.211 étant l'ip du container+10.0.3.211 étant l'ip du container. Penser à remplacer l'interface réseau **enp8s0** par la votre.
  
 Redémarrer ufw avec  Redémarrer ufw avec 
 +
   sudo ufw disable && sudo ufw enable   sudo ufw disable && sudo ufw enable
 +  
 +ou
 +
 +  systemctl restart ufw.service 
  
-==== Dans le container Jitsi ==== 
-  
-Configurer le videobridge 
-  nano /etc/jitsi/videobridge/sip-communicator.properties 
-<code> 
-org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true 
-###org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443 
-# from forum  
-org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false 
-# add to make it work inside the container 
-org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=10.0.3.211 
-org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=135.181.129.123 
-</code> 
  
-Redémarrer videobridge  
-   systemctl restart jitsi-videobridge2 
  
- * [[https://community.jitsi.org/t/jitsi-users-getting-jitsi-meet-to-work-in-a-container-behind-double-nat/11446/5|voir ce sujet pour embrouilles]]  
 ==== Trouble shooting ==== ==== Trouble shooting ====
 Redémarrer lxc-net service sur l'hote Redémarrer lxc-net service sur l'hote
Ligne 169: Ligne 246:
  
 ===== Configurations complémentaires ===== ===== Configurations complémentaires =====
-==== Ressources config jitsi ==== 
-  * https://gitlab.com/guifi-exo/wiki/-/blob/master/howto/real-time-media/jitsi-meet.md 
  
 ==== Personnaliser l'interface ==== ==== Personnaliser l'interface ====
Ligne 177: Ligne 252:
 Notamment  Notamment 
   nano /usr/share/jitsi-meet/interface_config.js   nano /usr/share/jitsi-meet/interface_config.js
-et une redirection pour le logo dans le vhost nginx port 80+et une redirection pour le logo et interface dans le vhost nginx (copier les fichiers correspondants)
 <code> <code>
-   location = /images/watermark.png { +    location = /body.html { 
-    alias /var/www/jitsi-custom/logo-futuretic-3.png;+        alias /var/www/jitsi-custom/body.html; 
 +    } 
 +    location = /interface_config.js { 
 +        alias /var/www/jitsi-custom/interface_config.js; 
 +    } 
 +    location = /images/watermark.png { 
 +        alias /var/www/jitsi-custom/images/logo-futuretic.png;
     }     }
 </code> </code>
-==== Réglages serveur stun ==== +==== Réglages serveur STUN ==== 
-  nano /etc/jitsi/meet/visio.futuretic.fr-config.js + 
-ligne 444 +On va utiliser ici le serveur STUN proposé officiellement par Meet Jitsi : meet-jit-si-turnrelay.jitsi.net 
-  { urls'stun:visio.futuretic.fr:3478' } + 
-  // { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }+Dans le container, dans le fichier **/etc/jitsi/videobridge/sip-communicator.properties**, veiller à décommenter cette instruction : 
 + 
 +  org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443 
 + 
 +Puis dans le fichier **/etc/jitsi/meet/visio.futuretic.fr-config.js**, dans la section **p2p**, <del>vous devez avoir</del> (config enlevée pour container visio en debian 11) : 
 + 
 +<code bash> 
 +p2p
 +      // Enables peer to peer modeWhen enabled the system will try to 
 +      // establish a direct connection when there are exactly 2 participants 
 +      // in the roomIf that succeeds the conference will stop sending data 
 +      // through the JVB and use the peer to peer connection instead. When a 
 +      // 3rd participant joins the conference will be moved back to the JVB 
 +      // connection. 
 +      enabledtrue, 
 + 
 +      // The STUN servers that will be used in the peer to peer connections 
 +      stunServers:
 +         { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' } 
 +      ] 
 +</code> 
 + 
 +Enfin, on redémarre le videobridge et jicofo : 
 + 
 +  systemctl restart jitsi-videobridge2.service && systemctl restart jicofo.service 
 + 
 +Pour voir si le serveur STUN est utilisé, toujours dans le container, executer la commande : 
 + 
 +  tcpdump host meet-jit-si-turnrelay.jitsi.net
  
-  systemctl restart jitsi-videobridge2.service 
-  systemctl restart jicofo.service 
 ==== Désactiver ipv6 ?! ==== ==== Désactiver ipv6 ?! ====
  
Ligne 199: Ligne 306:
   sysctl -p   sysctl -p
      
-{{tag> bj, serveur, futuretic, lxc, meet_jitsi}}+==== Permettre la diffusion en direct vers autre chose que youtube ==== 
 +  * Possible de faire de la [[https://community.jitsi.org/t/stream-to-any-or-multiple-rtmp-destinations-record-simultaneously/51943|multi-diffusion via le vhost nginx]] 
 +  * D'après la documentation, il est possible de [[https://docs.joinpeertube.org/use-create-upload-video?id=with-jitsi-meet|mettre l'adresse rtmp, d'un serveur Peertube par exemple, et la clef de stream directement]] à la place de la clef de youtube (pas réussi à faire marcher) 
 +  * Apparemment [[https://github.com/jitsi/jitsi-meet/issues/2829|avec cette technique ça marche]] !!! 
 + 
 +{{::jitsistream.png|}} 
 + 
 +==== Hébergement d'un colloque en ligne de plus de 200 personnes via Jitsi ==== 
 +Une [[https://indiehosters.net/blog/2021/10/12/retour-experience-visioconference-jitsi-owncast-ingenium.html|super doc proposée par Indiehosters]] sur la config à mettre en place avec l'utilisation complémentaire de [[https://owncast.online/|owncast]] 
 + 
 +==== Documentations complémentaires ==== 
 +  * [[https://wiki.hadoly.fr/documentation_technique:jitsi|Voir la doc d'un chaton]] avec un jitsi derrière un proxy 
 + 
 +{{tag> bj, serveur, futuretic, lxc, meet_jitsi, jitsi, streaming}}
meet_jitsi_un_container_lxc.1613082913.txt.gz · Dernière modification : 2021/02/11 22:35 de Benjamin Labomedia