Outils pour utilisateurs

Outils du site


meet_jitsi_docker_reverse_proxy_nginx

Ceci est une ancienne révision du document !


Meet Jitsi dans un Docker et reverse-proxy avec Nginx

Tutoriel en cours d'écriture

Le but ici est d'avoir un container Docker pour Jitsi Meet, et de créer un reverse proxy dans Nginx vers ce container tout en ayant un certificat SSL.

Meet Jitsi sera accessible via l'url visio.mondomaine.org.

Install

Install nginx

apt install nginx

Install Docker

Voir la doc.

apt-get install ca-certificates curl gnupg
 
install -m 0755 -d /etc/apt/keyrings
 
curl -fsSL https://download.docker.com/linux/debian/gpg |gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 
chmod a+r /etc/apt/keyrings/docker.gpg
 
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |tee /etc/apt/sources.list.d/docker.list > /dev/null
 
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Install Certbot

apt install certbot python3-certbot-nginx

Config

Config et démarrage du container de Jitsi

Doc officielle d'install via Docker.

On se place par exemple dans un home dédié à Jitsi, histoire de séparer les choses : /home/jitsi

On télécharge la dernière version, par exemple en ZIP et on décompresse.

Entrer dans le dossier obtenu, par exemple docker-jitsi-meet-stable-9111.

On copie le fichier env.example en .env :

cp env.example .env

Dans ce fichier .env, modifier les valeurs des variables suivantes :

TZ=Europe/Paris
PUBLIC_URL=https://visio.mondomaine.org

On génère des passwords forts, qui seront ajoutés dans le fichier .env précédent :

./gen-passwords.sh

On crée le dossier recevant la config de Jitsi (en dehors du container) et tous ses sous-dossiers (remarquer que le dossier est un dossier caché : .jitsi-meet-cfg) :

mkdir -p /home/jitsi/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

Toujours depuis le dossier docker-jitsi-meet-stable-9111, démarrer le container :

docker compose up -d

Création du vhost temporaire

D'abord, on crée un vhost sur le port 80 qui permettra d'initialiser let's encrypt et de récupérer un certificat pour le sous domaine visio.mondomaine.org.

On veut que le certificat soit validé depuis un répertoire exterieur au Docker de Jistsi, on choisit : /var/www/certbot (créer le dossier).

Et pour le moment, on fait pointer le root du vhost sur /var/www/html.

Dans le dossier /etc/nginx/sites-available, créer un fichier visio.mondomaine.org qui contient donc :

server {
        listen [::]:80;
        listen 80;
 
        server_name visio.mondomaine.org;
 
        # Temporaire
        root /var/www/html;
        index index.html;
 
        location ~ /.well-known/acme-challenge/ {
                default_type "text/plain";
                root /var/www/certbot;
        }
}

Activer ce vhost :

ln -s /etc/nginx/sites-available/visio.mondomaine.org /etc/nginx/sites-enabled/visio.mondomaine.org

Rédemarrer nginx :

systemctl restart nginx.service

Création du certificat SSL

D'abord, lancer une demande de certificat automatisée pour générer les fichiers nécessaires : en lançant certbot avec le plugin nginx, cela créera 2 fichiers qui seront à inclure dans tous les les vhosts :

  • /etc/letsencrypt/options-ssl-nginx.conf
  • /etc/letsencrypt/ssl-dhparams.pem

Attention : en lançant cette commande, annuler le choix d'un vhost, on veut juste que les fichiers ci-dessus soient créés :

certbot --nginx

Lancer ensuite la commande créant les certificats SSL pour notre nom de domaine, en passant par nginx (`–webroot`) mais sans modifier le vhost (`certonly`). On pointe bien vers le dossier spécial configuré dans le vhost pour que certbot fasse sa vérification :

certbot certonly --webroot -w /var/www/certbot -d visio.mondomaine.org

Par ailleurs, il faut rédémarrer nginx lorsqu'un certificat est recréé. Pour ça, on ajoute un “post hook” qui s'éxecute après chaque recréation de certificat.

Aller dans /etc/letsencrypt/renewal-hooks/post et créer le fichier 01-restart-nginx (lui donner les droits 755) avec dedans :

#!/bin/bash
 
systemctl restart nginx.service

Modification du vhost

On va pouvoir finaliser le vhost pour :

  • accepter les requêtes sur le port 443 (SSL)
  • rediriger les requêtes sur le port 80 vers le 443
  • ajouter les certificats et la config de let's encrypt
  • créer des proxies vers le docker Jitsi pour tous les services

Le vhost doit ressembler à ça désormais :

# Port 443
server {
	# IPv6 then IPv4
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        listen 443 ssl; # managed by Certbot
 
        server_name visio.mondomaine.org;
 
	# For Certbot renew (outside Docker)
        location ~ /.well-known/acme-challenge/ {
                allow all;
                root /var/www/certbot;
        }
 
	# All traffic goes to Docker Jitsi
        location / {
                proxy_pass  https://localhost:8443;
        }
 
	# For websocket
        location /xmpp-websocket {
                proxy_pass https://localhost:8443;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
 
	# For websocket too
        location /colibri-ws {
                proxy_pass https://localhost:8443;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
 
	# SSL
        ssl_certificate /etc/letsencrypt/live/visio.mondomaine.org/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/visio.mondomaine.org/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
 
        # Logs
        access_log /var/log/nginx/visio.mondomaine.org.access.log;
        error_log /var/log/nginx/visio.mondomaine.org.error.log;
}
 
# Port 80
server {
	# IPv6 then IPv4
        listen [::]:80;
        listen 80;
 
        server_name visio.mondomaine.org;
 
	# For Certbot renew (outside Docker)
        location ~ /.well-known/acme-challenge/ {
                allow all;
                root /var/www/certbot;
        }
 
	# Redirect to https
        if ($host = visio.mondomaine.org) {
                return 301 https://$host$request_uri;
        } # managed by Certbot
 
	# Everything else not expected
        return 404; # managed by Certbot
 
}

Rédemarrer nginx :

systemctl restart nginx.service

Normalement Jitsi est visible sur https://visio.mondomaine.org.

Installer un Firewall

On utilise ufw :

apt install ufw

On autorise les ports :

ufw allow XXX

Remplacer XXX par :

  • 22 (SSH ou autre c'est mieux)
  • 80 (http)
  • 443 (https)
  • 3478 (requêtes vers serveur STUN)
  • 5349 (fallback TCP si 10000 UDP est bloqué)
  • 10000 (audio / video network)
meet_jitsi_docker_reverse_proxy_nginx.1701481961.txt.gz · Dernière modification : 2023/12/02 01:52 de n1c0