Outils pour utilisateurs

Outils du site


meet_jitsi_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 :

Installation du container

On crée un container nommé meet, sous Debian Buster (10) :

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.

On démarre le container :

lxc-start meet

On peut voir les congainers ouverts avec la commande :

lxc-ls -f

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

Entrer dans le container et installer Jitsi comme décrit dans la doc officielle.

Configuration host hostname

Sur le host, ajouter dans /etc/hosts (changer l'IP du container par la votre) :

10.0.3.211 visio.futuretic.fr

Dans le container, ajouter dans /etc/hosts :

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

On crée d'abord le vhost du port 80 qui redirige vers le 443 :

nano /etc/apache2/sites-available/visio.futuretic.fr.conf

Avec dedans :

config
<VirtualHost *:80>
 
        ServerAdmin     user@domaine.tld
        ServerName      visio.futuretic.fr
 
        RewriteEngine on
        RewriteRule ^ https://visio.futuretic.fr%{REQUEST_URI} [END,QSA,R=permanent]
 
</VirtualHost>

Puis le vhost du port 443 :

nano /etc/apache2/sites-available/visio.futuretic.fr-le-ssl.conf

Avec dedans :

config
<IfModule mod_ssl.c>
 
        <VirtualHost *:443>
 
                ServerAdmin     user@domaine.tld
                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>
 
		# SSL config
                SSLEngine on
                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 !
 
                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
                LogLevel error
                CustomLog /var/log/apache2/visio.futuretic.fr.access.log vhost_combined
 
        </VirtualHost>
 
</IfModule>

Réglages Firewall et Réseau

Dans le container

Installer UFW et autoriser les ports suivant :

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

Configurer le videobridge en modifiant le fichier /etc/jitsi/videobridge/sip-communicator.properties :

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

Puis redémarrer videobridge :

 systemctl restart jitsi-videobridge2

Voir ce sujet si embrouilles.

Sur l'hote

Installer UFW et autoriser les ports suivant :

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

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 :

*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

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

Ressources config jitsi

Personnaliser l'interface

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)

    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;
    }

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, vous devez avoir (config enlevée pour container visio en debian 11) :

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' }
      ]

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

Hébergement d'un colloque en ligne de plus de 200 personnes via Jitsi

Une super doc proposée par Indiehosters sur la config à mettre en place avec l'utilisation complémentaire de owncast

Documentations complémentaires

meet_jitsi_un_container_lxc.txt · Dernière modification : 2022/06/17 21:59 de Labomedia