# Service visio.libre-service.eu Le service visio.libre-service.eu est un service de vidéo-conférence basé sur le logiciel libre Jitsi : https://jitsi.org/ # Intallation ## Prérequis Installer les paquets pré-requis : ``` apt-get install gnupg2 apt-transport-https openjdk-11-jre-headless ``` ## Choix du serveur HTTP Jitsi est prévu pour fonctionner avec Nginx ou Apache. Choix de Apache lors de l'installation du système Debian. ## Certificat web Dans sa procédure d'installation, Jitsi laisse le choix soit de générer soi-même le certificat, soit de le faire automatiquement. Choix de gérer nous-même. Installer les pré-requis : ``` apt-get install dehydrated dehydrated-apache2 systemctl reload apache2.service /usr/bin/dehydrated --register --accept-terms ``` Ajouter `visio.libre-service.eu` dans `/etc/dehydrated/domains.txt`. Lancer la génération : ``` /usr/bin/dehydrated -c ``` Activer le module SSL d'Apache : ``` a2enmod ssl ``` Activer un `virtualhost` pour le ssl, puis relancer Apache : ``` systemctl reload apache2.service ``` ## Firewall Ouverture de ports spécifiques : ``` iptables -A INPUT -i $WAN -p udp --dport 10000 -j ACCEPT iptables -A INPUT -i $WAN -p udp --dport 3478 -j ACCEPT iptables -A INPUT -i $WAN -p tcp --dport 5349 -j ACCEPT ``` ## Hostname Généraliser le FQDN : ``` hostnamectl set-hostname visio.libre-service.eu ``` Modifier le fichier `/etc/hosts` : ``` - 127.0.1.1 visio.libre-service.eu visio + 127.0.1.1 visio + 145.239.49.4 visio.libre-service.eu ``` Tester : ``` ping "$(hostname)" PING visio.libre-service.eu (145.239.49.4) 56(84) bytes of data. 64 bytes from visio.libre-service.eu (145.239.49.4): icmp_seq=1 ttl=64 time=0.034 ms ``` ## Paquets Jitsi Pour que le paquet Jitsi configure Apache, il faut neutraliser certains points : ``` a2dissite visio.libre-service.eu.conf a2dismod ssl systemctl reload apache2.service cd /etc/apache2/sites-available/ mv visio.libre-service.eu.conf visio.libre-service.eu.conf.aco ``` Déclarer le dépôt Jitsi : ``` curl https://download.jitsi.org/jitsi-key.gpg.key | sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg' echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null ``` Mettre à jour la liste des paquets : ``` apt update ``` Installer les paquets Jitsi : ``` apt install jitsi-meet ``` Répondre aux questions : ``` Configuration de jitsi-videobridge2 The value for the hostname that is set in Jitsi Videobridge installation. The hostname of the current installation: visio.libre-service.eu SSL certificate for the Jitsi Meet instance Generate a new self-signed certificate (You will later get a chance to obtain a Let's encrypt certificate) I want to use my own certificate <-- select this one Full local server path to the SSL key file: /var/lib/dehydrated/certs/visio.libre-service.eu/privkey.pem Full local server path to the SSL certificate file: /var/lib/dehydrated/certs/visio.libre-service.eu/fullchain.pem ``` Compléter le nouveau fichier de conf généré /etc/apache2/site-available/visio.libre-service.eu.conf` : ``` ServerName visio.libre-service.eu ServerAdmin admins@libre-service.eu CustomLog ${APACHE_LOG_DIR}/visio.libre-service.eu-nossl-access.log combined ErrorLog ${APACHE_LOG_DIR}/visio.libre-service.eu-nossl-error.log LogLevel warn Redirect 302 / https://visio.libre-service.eu/ ServerName visio.libre-service.eu ServerAdmin admins@libre-service.eu CustomLog ${APACHE_LOG_DIR}/visio.libre-service.eu-access.log combined ErrorLog ${APACHE_LOG_DIR}/visio.libre-service.eu-error.log LogLevel warn # enable HTTP/2, if available Protocols h2 http/1.1 SSLEngine on SSLProxyEngine on SSLCertificateFile /var/lib/dehydrated/certs/visio.libre-service.eu/fullchain.pem SSLCertificateKeyFile /var/lib/dehydrated/certs/visio.libre-service.eu/privkey.pem Header always set Strict-Transport-Security "max-age=63072000" DocumentRoot "/usr/share/jitsi-meet" Options Indexes MultiViews Includes FollowSymLinks AddOutputFilter Includes html AllowOverride All Order allow,deny Allow from all ErrorDocument 404 /static/404.html Alias "/config.js" "/etc/jitsi/meet/visio.libre-service.eu-config.js" Require all granted Alias "/external_api.js" "/usr/share/jitsi-meet/libs/external_api.min.js" Require all granted ProxyPreserveHost on ProxyPass /http-bind http://localhost:5280/http-bind ProxyPassReverse /http-bind http://localhost:5280/http-bind ProxyPass /xmpp-websocket ws://localhost:5280/xmpp-websocket ProxyPassReverse /xmpp-websocket ws://localhost:5280/xmpp-websocket ProxyPass /colibri-ws/default-id ws://localhost:9090/colibri-ws/default-id ProxyPassReverse /colibri-ws/default-id ws://localhost:9090/colibri-ws/default-id RewriteEngine on RewriteRule ^/([a-zA-Z0-9]+)$ /index.html # Mozilla Guideline v5.4, Apache 2.4.41, OpenSSL 1.1.1d, intermediate configuration, no OCSP SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 SSLHonorCipherOrder off SSLSessionTickets off ``` Tester l'installation. ## Limiter l'empreinte mémoire Par défaut, la valeur maximale de mémoire allouable est 3072 Mo, ce qui peut paraître beaucoup. Modifier le fichier `/usr/share/jitsi-videobridge/lib/videobridge.rc` : ``` VIDEOBRIDGE_MAX_MEMORY=2048m ``` ## Activation des statistiques Éditer le fichier `/etc/jitsi/videobridge/config` : ``` JVB_OPTS="--apis=rest, " ``` Redémarrer : ``` systemctl restart nginx.service jicofo.service jitsi-videobridge2.service ``` Tester : ``` root@visio.libre-service.eu:/etc# curl http://localhost:8080/about/version {"name":"JVB","version":"2.1.570-gb802be83","os":"Linux"} root@visio.libre-service.eu:/etc# curl http://localhost:8080/colibri/conferences [] root@visio.libre-service.eu:/etc# curl http://localhost:8080/colibri/stats {"inactive_endpoints":0,"inactive_conferences":0,"total_ice_succeeded_relayed":0,… root@visio.libre-service.eu:/etc# curl http://localhost:8080/colibri/stats 2> /dev/null | jshon -e participants -u 9 0 ``` Documentation : * https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest.md * https://github.com/jitsi/jitsi-videobridge/blob/master/doc/statistics.md#implementation * https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-colibri.md ## Autoriser la connexion depuis un ordiphone Éditer le fichier `/etc/jitsi/meet/visio.libre-service.eu-config.js` : ``` // If true, any checks to handoff to another application will be prevented // and instead the app will continue to display in the current browser. // disableDeepLinking: false, + disableDeepLinking: true, ``` Redémarrer : ``` systemctl restart nginx.service jicofo.service jitsi-videobridge2.service ``` Tester depuis un ordiphone, par exemple depuis Firefox sur le Mobian d'un Pinephone :D # Personnalisation ## Espace de fichiers La personnalisation va passer par plusieurs fichiers à délivrer sur demande. Créer un espace des fichiers de personnalisation web : ``` mkdir /var/www/visio.libre-service.eu/ mkdir /var/www/visio.libre-service.eu/images/ ``` Copier le fichier de configuration de l'interface dans l'espace de fichiers personnalisés : ``` cp /usr/share/jitsi-meet/interface_config.js /var/www/visio.libre-service.eu/ ``` Ajouter dans `/etc/nginx/sites-enabled/visio.libre-service.eu` (avant les autres location) : ``` Alias "/interface_config.js" "/var/www/visio.libre-service.eu/interface_config.js" ``` Activer la nouvelle configuration : ``` systemctl reload apache2 ``` ## Parties tiers Dans le fichier `/etc/jitsi/meet/visio.libre-service.eu-config.js`, désactiver les requêtes à des tiers (statistiques…) : ``` disableThirdPartyRequests: true, ``` ## Titres et onglet Modifier le fichier `/var/www/visio.libre-service.eu/interface_config.js` : ``` < APP_NAME: 'Jitsi Meet', < NATIVE_APP_NAME: 'Jitsi Meet', < PROVIDER_NAME: 'Jitsi', --- > APP_NAME: 'Visio.libre-service.eu', > NATIVE_APP_NAME: 'Visio.libre-service.eu', > PROVIDER_NAME: 'Libre-service.eu', ``` ## Retrait pub privateur Dans le fichier `/var/www/visio.libre-service.eu/interface_config.js` : ``` < OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ], --- > OPTIMAL_BROWSERS: [ 'chromium', 'firefox', 'nwjs', 'electron' ], ``` ## Alléger le menu Retirer des entrées inutiles du menu, dans le fichier `/etc/jitsi/meet/` copier/décommenter la section `toolbarButtons` puis retirer les valeurs `livestreaming` et `recording`. ## Francisation Franciser d'un pseudo par défaut dans `/var/www/visio.libre-service.eu/interface_config.js` : ``` < DEFAULT_LOCAL_DISPLAY_NAME: 'me', < DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster', --- > DEFAULT_LOCAL_DISPLAY_NAME: 'moi', > DEFAULT_REMOTE_DISPLAY_NAME: 'Inconnu', ``` ## Watermark Placer l'image au format SVG dans l'espace qui va bien : `/var/www/visio.libre-service.eu/images/`. Ajouter dans `/etc/apache2/sites-enabled/visio.libre-service.eu` (avant les autres location) : ``` Alias "/images/watermark.svg" "/var/www/visio.libre-service.eu/images/watermark.svg" ``` Modifier le fichier /var/www/visio.libre-service.eu/interface_config.js : ``` < JITSI_WATERMARK_LINK: 'https://jitsi.org', --- > JITSI_WATERMARK_LINK: 'https://www.libre-service.eu/', ``` Activer : ``` systemctl restart apache2 jicofo.service jitsi-videobridge2.service ``` ## Favicon Ajouter dans `/etc/nginx/sites-enabled/visio.libre-service.eu` (avant les autres location) : ``` Alias "/images/favicon.ico" "/var/www/visio.libre-service.eu/images/favicon.ico" ``` Activer la nouvelle configuration : ``` systemctl reload apache2 ``` ## Pub privateur Le pied de page de la page d'accueil contient des publicités vers des boutiques d'applications privatrices. Supprimer le code suivant du fichier `/usr/share/jitsi-meet/libs/app.bundle.min.js` : ``` C().createElement("a",{className:"welcome-badge",href:a},C().createElement("img",{alt:e("welcomepage.mobileDownLoadLinkIos"),src:"./images/app-store-badge.png"})),C().createElement("a",{className:"welcome-badge",href:t},C().createElement("img",{al\ t:e("welcomepage.mobileDownLoadLinkAndroid"),src:"./images/google-play-badge.png"})), )), ``` Au besoin, regarder le fichier source `jitsi-meet/react/features/welcome/components/WelcomePage.web.js`. Redémarrer les services Jitsi.