meet_jitsi_un_container_lxc
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
meet_jitsi_un_container_lxc [2021/12/13 22:54] – [Sur l'hote] Benjamin Labomedia | meet_jitsi_un_container_lxc [2022/06/17 21:59] – [Configuration host hostname] 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:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
===== Installation du container ===== | ===== Installation du container ===== | ||
- | [[https:// | + | |
+ | 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 |
- | Utilisation | + | |
- | certbot certonly --webroot -w / | + | |
- | 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 |
- | Ajouter dans le vhost le-ssl.conf les lignes suivantes avant le ProxyPass | + | |
- | < | + | lxc-start meet |
- | # proxy pour cetificat | + | |
- | DocumentRoot / | + | |
- | ProxyPass /.well-known ! | + | |
- | </ | + | On peut voir les congainers ouverts avec la commande : |
- | Faire en sorte que le répertoire / | + | 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 |
- | nano nano /etc/letsencrypt/renewal/ | + | |
- | < | + | Executer cette commande pour générer les certificats |
- | # Options used in the renewal process | + | |
- | [renewalparams] | + | |
- | account = ***************************** | + | |
- | authenticator = webroot | + | |
- | server = https:// | + | |
- | http01_address = 135.181.129.123 | + | |
- | [[webroot_map]] | + | |
- | visio.futuretic.fr = / | + | |
- | </ | + | |
- | Certbot renew devrait être content | + | certbot certonly --webroot -w / |
+ | |||
+ | 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/ | ||
===== Configuration host hostname ===== | ===== Configuration host hostname ===== | ||
- | Sur le host : | + | |
- | nano / | + | 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 / | + | |
- | 127.0.1.1 | + | Dans le container, ajouter dans **/etc/hosts** : |
- | | + | |
- | visio | + | 127.0.1.1 |
+ | | ||
+ | |||
+ | 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' | ||
+ | |||
nano / | nano / | ||
- | <file php config> | + | |
+ | Avec dedans : | ||
+ | |||
+ | <code bash config> | ||
< | < | ||
- | | + | |
- | ServerName visio.futuretic.fr | + | |
+ | ServerName | ||
RewriteEngine on | RewriteEngine on | ||
RewriteRule ^ https:// | RewriteRule ^ https:// | ||
- | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Puis le vhost du port 443 : | ||
nano / | nano / | ||
- | <file php config> | + | |
+ | Avec dedans : | ||
+ | |||
+ | <code bash config> | ||
< | < | ||
< | < | ||
- | ServerAdmin | + | ServerAdmin |
ServerName | ServerName | ||
+ | | ||
+ | # Headers for security | ||
+ | < | ||
+ | # Deja fourni par Jitsi | ||
+ | # Header always set Strict-Transport-Security " | ||
+ | Header set X-XSS-Protection "1; mode=block" | ||
+ | Header set X-Frame-Options " | ||
+ | Header set X-Content-Type-Options " | ||
+ | </ | ||
- | SSLEngine on | + | # SSL config |
- | SSLProxyEngine On | + | |
- | SSLProxyVerify none | + | SSLProxyEngine On |
- | SSLProxyCheckPeerCN off | + | SSLProxyVerify none |
- | SSLProxyCheckPeerName off | + | SSLProxyCheckPeerCN off |
- | SSLProxyCheckPeerExpire off | + | SSLProxyCheckPeerName off |
+ | SSLProxyCheckPeerExpire off | ||
+ | # SSL certificates | ||
SSLCertificateFile / | SSLCertificateFile / | ||
SSLCertificateKeyFile / | SSLCertificateKeyFile / | ||
Include / | Include / | ||
- | ProxyPreserveHost | + | # Proxy base parameters |
- | # | + | |
- | + | ||
- | # proxy pour cetificat | + | # Proxy pour certificat |
DocumentRoot / | DocumentRoot / | ||
ProxyPass / | ProxyPass / | ||
- | | + | |
- | ProxyPassReverse / https:// | + | ProxyPassReverse / https:// |
+ | #ProxyPass "/" | ||
+ | # | ||
- | # For WebSockets | + | # Set WebSockets |
RewriteEngine on | RewriteEngine on | ||
RewriteCond %{HTTP: | RewriteCond %{HTTP: | ||
Ligne 107: | Ligne 137: | ||
#SetEnv proxy-sendchunks 1 | #SetEnv proxy-sendchunks 1 | ||
- | <Proxy *> | + | # Set rights |
- | Order deny, | + | |
- | Allow from all | + | Order deny, |
- | </ | + | Allow from all |
+ | </ | ||
+ | # Logs | ||
ErrorLog / | ErrorLog / | ||
- | LogLevel | + | LogLevel |
CustomLog / | CustomLog / | ||
Ligne 119: | Ligne 151: | ||
</ | </ | ||
+ | </ | ||
- | </ | + | ===== Réglages Firewall et Réseau ===== |
+ | ==== Dans le container ==== | ||
- | ===== Réglages Firewall | + | Installer UFW et autoriser les ports suivant : |
- | ==== Sur l'hote ==== | + | |
- | Ouvrir les ports nécessaires au fonctionnement de jitsi avec ufw : | + | < |
- | < | + | 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 | ||
+ | </ | ||
+ | |||
+ | Configurer le videobridge en modifiant le fichier **/ | ||
+ | |||
+ | <code bash> | ||
+ | org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true | ||
+ | # On ne configure pas de serveur STUN pour le moment | ||
+ | # | ||
+ | # 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' | ||
+ | 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 : | ||
+ | |||
+ | | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | ==== 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 | ||
</ | </ | ||
- | Check du firewall | + | |
+ | Vérifier le status | ||
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) | + | |
- | nano / | + | Il faut transférer certains de ces ports au container jitsi (pour 80 et 443, c' |
- | < | + | Dans le fichier **/ |
+ | |||
+ | < | ||
*nat | *nat | ||
:PREROUTING ACCEPT [0:0] | :PREROUTING ACCEPT [0:0] | ||
# jitsi specific rules | # jitsi specific rules | ||
- | -A PREROUTING -i enp35s0 | + | -A PREROUTING -i enp8s0 |
- | -A PREROUTING -i enp35s0 | + | -A PREROUTING -i enp8s0 |
- | -A PREROUTING -i enp35s0 | + | -A PREROUTING -i enp8s0 |
+ | # General postrouting for LXC containers | ||
+ | -A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE | ||
COMMIT | COMMIT | ||
</ | </ | ||
- | 10.0.3.211 étant l'ip du container | + | 10.0.3.211 étant l'ip du container. Penser à remplacer l' |
Redémarrer ufw avec | Redémarrer ufw avec | ||
+ | |||
sudo ufw disable && sudo ufw enable | sudo ufw disable && sudo ufw enable | ||
+ | | ||
ou | ou | ||
+ | |||
systemctl restart ufw.service | systemctl restart ufw.service | ||
- | ==== Dans le container Jitsi ==== | ||
- | |||
- | Configurer le videobridge | ||
- | nano / | ||
- | < | ||
- | org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true | ||
- | ### | ||
- | # 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 | ||
- | </ | ||
- | |||
- | Redémarrer videobridge | ||
- | | ||
- | |||
- | * [[https:// | ||
- | Si le container ne ping plus l' | ||
- | iptables -t nat -A POSTROUTING -s 10.0.3.0/24 -o eth0 -j MASQUERADE | ||
==== Trouble shooting ==== | ==== Trouble shooting ==== | ||
Redémarrer lxc-net service sur l'hote | Redémarrer lxc-net service sur l'hote | ||
Ligne 196: | Ligne 254: | ||
Notamment | Notamment | ||
nano / | nano / | ||
- | et une redirection pour le logo dans le vhost nginx port 80 | + | et une redirection pour le logo et interface |
< | < | ||
- | | + | location = /body.html { |
- | alias / | + | alias / |
+ | } | ||
+ | location = / | ||
+ | alias / | ||
+ | } | ||
+ | | ||
+ | alias / | ||
} | } | ||
</ | </ | ||
- | ==== Réglages serveur | + | ==== Réglages serveur |
- | | + | |
- | ligne 444 | + | On va utiliser ici le serveur STUN proposé officiellement par Meet Jitsi : meet-jit-si-turnrelay.jitsi.net |
- | { urls: ' | + | |
- | // { urls: ' | + | Dans le container, dans le fichier **/ |
+ | |||
+ | | ||
+ | |||
+ | Puis dans le fichier **/ | ||
+ | |||
+ | <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, | ||
+ | |||
+ | | ||
+ | stunServers: | ||
+ | { urls: ' | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | 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 227: | Ligne 317: | ||
==== Hébergement d'un colloque en ligne de plus de 200 personnes via Jitsi ==== | ==== Hébergement d'un colloque en ligne de plus de 200 personnes via Jitsi ==== | ||
Une [[https:// | Une [[https:// | ||
+ | |||
+ | ==== Documentations complémentaires ==== | ||
+ | * [[https:// | ||
{{tag> bj, serveur, futuretic, lxc, meet_jitsi, jitsi, streaming}} | {{tag> bj, serveur, futuretic, lxc, meet_jitsi, jitsi, streaming}} |
meet_jitsi_un_container_lxc.txt · Dernière modification : 2023/12/01 00:53 de Labomedia