--- title: "Jitsi" date: 2021-07-31 icon: "jitsi.svg" tags: ['service'] short_desc: "Video-chat software." --- Jitsi is a set of open-source projects that allows you to easily build and deploy secure video conferencing solutions. Is really easy to install, and also a really good private, federated and libre alternative to Zoom or other video conferencing software. You can create calls just by typing the URL, and loging-in is not necessary. ## Dependencies and Installation First, install some dependencies: ```sh apt install gpg apt-transport-https nginx python3-certbot-nginx ``` Jitsi has its own package repository, so let\'s add it. ```bash curl https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list apt update -y ``` Ok. So now we can install Jitsi, but before we do that, let\'s setup the firewall `ufw`, in case you have it enabled, and the SSL certificate. ## Enable Required Ports If you are using [ufw](/ufw) or another firewall, there are several ports we need to ensure are open: ```sh ufw allow 80/tcp ufw allow 443/tcp ufw allow 10000/udp ufw allow 3478/udp ufw allow 5349/tcp ufw enable ``` For your information, these allow the following: - 80 TCP -- Certbot. - 443 TCP -- General access to Jitsi Meet. - 10000 UDP -- General network video/audio communications. - 3478 UDP -- Quering the stun server ([Coturn](/coturn), optional, needs config.js change to enable it). - 5349 TCP -- Fallback network video/audio communications over TCP (when UDP is blocked for example), served by [Coturn](/coturn). ## SSL certificate I\'ll be using [certbot](/basic/certbot) and [Nginx](/basic/nginx) to generate a certificate for the Jitsi subdomain to allow encrypted connections. ```sh certbot --nginx certonly -d {{}}meet.example.org{{}} ``` We will not create an Nginx config file for Jitsi because the Jitsi package we will be installing will do that automatically. ## Installation To begin the installation process, just run: ```sh apt install jitsi-meet ``` It will ask you for your `hostname`; there you\'ll need to input the subdomain you have just added to Nginx, like `{{}}meet.example.org{{}}`. For the SSL certificate, choose `I want to use my own certificate`. When it ask you for the certification key and cert files, input `/etc/letsencrypt/live/{{}}meet.example.org{{}}/privkey.pem` and `/etc/letsencrypt/live/{{}}meet.example.org{{}}/fullchain.pem` respectively. ## Using Jitsi {{< img alt="Jitsi once installed" src="/pix/jitsi-01.webp" >}} Jitsi can be used in a browser by then just going to `{{}}meet.example.org{{}}`. Note that there are also Jitsi clients for all major platforms: - [Desktop](https://desktop.jitsi.org/Main/Download.html) (Windows, MacOS, GNU/Linux) - Android ([F-Droid](https://f-droid.org/en/packages/org.jitsi.meet/) and [Google Play](https://play.google.com/store/apps/details?id=org.jitsi.meet)) - [iPhone/iOS](https://apps.apple.com/us/app/jitsi-meet/id1165103905) **When using a Jitsi app for the first time, remember to go to the \"Settings\" menu and change your server name to the Jitsi site you just created.** When you create a video chatroom, its address will appear as `meet.example.org/yourvideochatname` and can be shared as such. ## Security By default, anyone who has access to **meet.example.org** will be able to create a chatroom. You probably don\'t want that, so you\'ll need to set up some authentication. The simplest option is to handle authentication through the local [Prosody](/prosody) user database. ### Prosody configuration First, we need to enable password authentication in [Prosody](/prosody). Edit `/etc/prosody/conf.avail/{{}}meet.example.org{{}}.cfg.lua`, and locate this block: ```lua VirtualHost "{{}}meet.example.org{{}}" authentication = "anonymous" ``` And change the authentication mode from `"anonymous"` to `"internal_hashed"`. Then, to enable guests to login and join your chatrooms, add the following block **after** the one you just edited: ```lua VirtualHost "guest.{{}}meet.example.org{{}}" authentication = "anonymous" c2s_require_encryption = false ``` ### Jitsi Meet configuration Next, in `/etc/jitsi/meet/{{}}meet.example.org{{}}-config.js`, uncomment the following line: ```js var config = { hosts: { // anonymousdomain: 'guest.jitsi-meet.example.com', }, } ``` And change `'guest.jitsi-meet.example.com'` to `'{{}}guest.meet.example.org{{}}'` (your Jitsi domain preceded by `meet.`). ### Jicofo configuration Finally, we configure Jicofo to only allow the creation of conferences when the request is coming from an authenticated user. To do so, add the following `authentication` section to `/etc/jitsi/jicofo/jicofo.conf`: ```yaml jicofo { authentication: { enabled: true type: XMPP login-url: {{}}meet.example.org{{}} } ``` ### Create users in Prosody and restart the services You now need to register some users in [Prosody](/prosody), you can do so manually using `prosodyctl`: ```sh prosodyctl register meet.example.org ``` Finally, restart `prosody`, `jicofo`, and `jitsi-videobridge2`: ```sh systemctl restart prosody systemctl restart jicofo systemctl restart jitsi-videobridge2 ``` ## More info This article is based on [the original documentation](https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-quickstart). There you can find more details and configurations. - Written by [Jose Fabio.](https://josefabio.com) Donate Monero: `484RLdsXQCDGSthNatGApRPTyqcCbM3PkM97axXezEuPZppimXmwWegiF3Et4BHBgjWR7sVXuEUoAeVNpBiVznhoDLqLV7j` [\[QR\]](https://josefabio.com/figures/monero.jpg) - Edited and revised by [Luke](https://lukesmith.xyz).