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 [2020/12/04 21:20] 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+Pas d'ip fixe, config réseau par défaut pour le container
 + 
 +On démarre le container : 
 + 
 +  lxc-start meet 
 + 
 +On peut voir les congainers ouverts avec la commande : 
   lxc-ls -f   lxc-ls -f
-  lxc-attach visio +   
-  root@meet+On rentre dans le container avec la commande : 
 +   
 +  lxc-attach meet 
 +   
 +===== Création des certificats SSL letsencrypt =====
  
 +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.
 +
 +Executer cette commande pour générer les certificats :
 +
 +  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
  
-          ProxyPreserveHost       On +                # SSL certificates 
-         ProxyPass https://visio.futuretic.fr/ +                SSLCertificateFile /etc/letsencrypt/live/visio.futuretic.fr/fullchain.pem 
- ProxyPassReverse https://visio.futuretic.fr/+                SSLCertificateKeyFile /etc/letsencrypt/live/visio.futuretic.fr/privkey.pem 
 +                Include /etc/letsencrypt/options-ssl-apache.conf
  
- <Proxy *> + Proxy base parameters 
- Order deny,allow +                ProxyPreserveHost       On 
- Allow from all +                 
- </Proxy>+                # Proxy pour certificat 
 +                DocumentRoot /var/www/html 
 +                ProxyPass /.well-known !
  
 +                ProxyPass / https://visio.futuretic.fr/
 +                ProxyPassReverse / https://visio.futuretic.fr/
 +                #ProxyPass "/" "https://10.0.3.211/"
 +                #ProxyPassReverse "/" "https://10.0.3.211/"
 +
 +                # Set WebSockets
 +                RewriteEngine on
 +                RewriteCond %{HTTP:Connection} Upgrade [NC]
 +                RewriteCond %{HTTP:Upgrade} websocket [NC]
 +                RewriteRule /(.*) wss://visio.futuretic.fr/$1  [P,L]
 +
 +                RequestHeader set X-Forwarded-Proto “https”
 +                RequestHeader set X-Forwarded-Port “443”
 +                #SetEnv proxy-sendchunks 1
 +
 +                # Set rights
 +                <Proxy *>
 +                        Order deny,allow
 +                        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 65: Ligne 151:
  
 </IfModule> </IfModule>
-</file>+</code> 
 + 
 +===== Réglages Firewall et Réseau ===== 
 +==== Dans le container ==== 
 + 
 +Installer UFW et autoriser les ports suivant : 
 + 
 +<code bash> 
 +sudo ufw allow 22/tcp 
 +sudo ufw allow 80/tcp 
 +sudo ufw allow 443/tcp 
 +sudo ufw allow 3478/udp 
 +sudo ufw allow 5349/tcp 
 +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 80/tcp 
 +sudo ufw allow 443/tcp 
 +sudo ufw allow 3478/udp 
 +sudo ufw allow 5349/tcp 
 +sudo ufw allow 10000/udp 
 +sudo ufw enable 
 +</code> 
 + 
 +Vérifier le status du firewall : 
 + 
 +  sudo ufw status verbose 
 +   
 +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). 
 + 
 +Dans le fichier **/etc/ufw/before.rules**, ajouter au début : 
 + 
 +<code bash> 
 +*nat 
 +:PREROUTING ACCEPT [0:0] 
 +# jitsi specific rules 
 +-A PREROUTING -i enp8s0 -p udp --dport 10000 -j DNAT --to-destination 10.0.3.211:10000 
 +-A PREROUTING -i enp8s0 -p udp --dport 3478 -j DNAT --to-destination 10.0.3.211:3478 
 +-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 
 +</code> 
 + 
 +10.0.3.211 étant l'ip du container. Penser à remplacer l'interface réseau **enp8s0** par la votre. 
 + 
 +Redémarrer ufw avec  
 + 
 +  sudo ufw disable && sudo ufw enable 
 +   
 +ou 
 + 
 +  systemctl restart ufw.service  
 + 
 + 
 + 
 +==== Trouble shooting ==== 
 +Redémarrer lxc-net service sur l'hote 
 +  systemctl restart lxc-net.service 
 +   
 +Dans le container 
 +  tail -f /var/log/jitsi/jicofo.log 
 +  tail -f /var/log/jitsi/jvb.log 
 + 
 +===== Configurations complémentaires ===== 
 + 
 +==== Personnaliser l'interface ==== 
 + 
 +  * Voir [[https://framacloud.org/fr/cultiver-son-jardin/jitsi-meet.html|le guide de Framasoft]] 
 +Notamment  
 +  nano /usr/share/jitsi-meet/interface_config.js 
 +et une redirection pour le logo et interface dans le vhost nginx (copier les fichiers correspondants) 
 +<code> 
 +    location = /body.html { 
 +        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> 
 +==== Réglages serveur STUN ==== 
 + 
 +On va utiliser ici le serveur STUN proposé officiellement par Meet Jitsi : meet-jit-si-turnrelay.jitsi.net 
 + 
 +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 mode. When enabled the system will try to 
 +      // establish a direct connection when there are exactly 2 participants 
 +      // in the room. If 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. 
 +      enabled: true, 
 + 
 +      // 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 
 + 
 +==== Désactiver ipv6 ?! ==== 
 + 
 +  nano /etc/sysctl.conf 
 +Ajouter la ligne suivante en fin de fichier 
 +  net.ipv6.conf.all.disable_ipv6 = 1 
 +Appliquer les changements  
 +  sysctl -p 
 +   
 +==== 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.1607116838.txt.gz · Dernière modification : 2020/12/04 21:20 de Benjamin Labomedia