Jitsi Meet is a Self-Hosted audio/video conferencing system that is private and secure. Jitsi is similar in function to Zoom, WebEx, GoTo Meeting, or Google Workspace. Connection to a Jitsi Meet server requires only a web browser without the installation of any special software. There are Jitsi clients available in the Android Play Store and in the Apple App Store.
Although you don’t need a desktop client for a Jitsi Meet meeting, there are Jitsi Electron clients for Windows, MacOS, and Linux. In addition, there are Flatpaks for Jitsi clients on Flathub.
The Jitsi electron clients are here.
I am installing the Jitsi Meet server in a LXD container which is very fast and efficient. A Jitsi server can also be installed in a virtual machine or on a dedicated server. Watch my LXD 101 video here. I also have 50 plus videos on the channel focusing on LXD and networking.
I start by creating a LXD container for my Jitsi Server which is bridged to my LAN.
lxc launch ubuntu:22.04 Jitsi --profile default --profile Bridged-MAIN -c limits.memory=4096MB -c limits.cpu.allowance=20% -c boot.autostart=true
Connect to the container.
lxc exec Jitsi bash
Update the repositories and the software components.
apt update && apt upgrade -y
Add a user account.
adduser scott
Grant the user account sudo privilege.
usermod -aG sudo scott
Move over to the account.
su - scott
Install the dependencies.
sudo apt install curl gnupg2 wget -y
Download the key from the Jitsi site.
curl https://download.jitsi.org/jitsi-key.gpg.key -o jitsi-key.gpg.key
Apply the key.
sudo gpg --output /usr/share/keyrings/jitsi-key.gpg --dearmor jitsi-key.gpg.key
Edit the repository file.
sudo nano /etc/apt/sources.list.d/jitsi-stable.list
Insert the following line in the file and then use a CTRL O and Enter to save and a CTRL X to exit.
deb [signed-by=/usr/share/keyrings/jitsi-key.gpg] https://download.jitsi.org stable/
Download the key for the Prosody component of Jitsi.
curl https://prosody.im/files/prosody-debian-packages.key -o prosody-debian-packages.key
Apply the key.
sudo gpg --output /usr/share/keyrings/prosody-keyring.gpg --dearmor prosody-debian-packages.key
Edit the Prosody repository file.
sudo nano /etc/apt/sources.list.d/prosody.list
Insert the following line in the file and then use a CTRL O and Enter to save and a CTRL X to exit.
deb [signed-by=/usr/share/keyrings/prosody-keyring.gpg] http://packages.prosody.im/debian jammy main
Update the repositories and install Jitsi Meet.
sudo apt update
sudo apt install -y jitsi-meet
During the installation you will be prompted for your subdomain name for your Jitsi Meet server. You will have to add a record at your domain name service provider for the subdomain that you want to use. Then you will type it into the screen below when prompted and then tab to “OK” and press enter.
Later in the installation you will be prompted for how to create a certificate for your Jitsi subdomain. In my example, I am using NginX Proxy Manager and so I select the option to generate a self signed certificate. I then tab to “ok” and press enter.
Now you will need to assign port forwarding on your router to point to the address of where you installed the Jitsi Meet server. In my case, that is the IP address of my LXD container. You will need to define port forwards for the following ports on your router.
Now go over to your instance of NginX Proxy Manager which I have covered before on the channel. I defined a Proxy host as follows. Be sure to enter your domain name and the local address of your Jitsi Server.
Be sure to go to the SSL tab and request a new certificate for your Jitsi instance at the same time.
At this point, your Jitsi server is active and reachable both locally and from the WAN and you can go to your domain name to reach it.
NOTE: Sometimes the Jitsi Meet server will not operate properly in p2p mode behind NginX Reverse Proxy Manager. You will know this if your Jitsi server disconnects repeatedly in meetings with exactly two people. To correct this, you can disable peer to peer mode.
Edit the following file replacing “jitsi.scottibyte.com” with the subdomain of your Jitsi Meet instance:
sudo nano /etc/jitsi/meet/jitsi.scottibyte.com-config.js
Search the file for “p2p” and uncomment the “p2pTestMode” so it appears as follows:
Save the file with CTRL O and Enter and exit the editor with CTRL X.
Your Jitsi server is completely operational at this point, but anyone who knows your URL can create a meeting. The remaining steps show how we can create a configuration where only authorized users are allowed to create meetings. This is optional.
Change to the root user.
sudo su
Move over to the following location.
cd /etc/prosody/conf.avail/
Edit the following configuration file changing the “jitsi.scottibyte.com” portion to your Jitsi subdomain name.
nano jitsi.scottibyte.com.cfg.lua
Search for the “VirtualHost” section with a CTRL W in the editor and change the authentication line from “jitsi-anonymous” to “internal_plain”
Now we want to add a new VirtualHost section before the one that we just edited. It will include the following, remembering to change to your domain “guest.yourdomain.com”.
VirtualHost "guest.jitsi.scottibyte.com"
authentication = "anonymous"
c2s_require_encryption = false
modules_enabled = {
"bosh";
"pubsub";
"ping";
"speakerstats";
"turncredentials";
"conference_duration";
}
At this point, your screen should look like the following, except with your domain name.
Now Write out the file and exit the editor with CTRL O and ENTER and CTRL X.
An optional Prosody module called storage_memory, enables a temporary memory storage for persistent information, including user session data. The module source code is available from Prosody’s Mercurial repository. We want to install it.
sudo apt install -y mercurial
Make a temporary folder and move into it.
mkdir ~/temp && cd ~/temp
Clone the prosody modules repository to a new directory, prosody_modules.
hg clone 'https://hg.prosody.im/prosody-modules/' prosody-modules
Copy the modules to where they are needed.
sudo cp prosody-modules/mod_storage_memory/*.lua /usr/lib/prosody/modules/.
Create a Jitsi anonymous domain and adjust the command to include your domain name
sudo nano /etc/jitsi/meet/jitsi.scottibyte.com-config.js
Look for the config variable in the hosts key add a new key named anonymousdomain, with the value guest.fqdn. Take a look at my editor screen shot below to see this change.
Exit the editor after making the change with a CTRL O and Enter and CTRL X.
Jicofo (Jitsi Conference Focus) is a component of Jitsi Meet that manages user sessions. The following steps are required to configure Jicofo’s SIP (Session Initiation Protocol) to use XMPP authentication.
Edit the following file.
sudo nano /etc/jitsi/jicofo/sip-communicator.properties
Put the following line in it, adjusting for your subdomain again.
org.jitsi.jicofo.auth.URL=XMPP:jitsi.scottibyte.com
Exit the editor after making the change with a CTRL O and Enter and CTRL X.
Now we must create user accounts to be able to create meetings which was the point of all this. The following command is an example where I create a scott account. Remember to change the domain name and the password to what you want. You can execute this command multiple times to create additional users that can create meetings.
sudo prosodyctl register scott jitsi.scottibyte.com pa55word
You may get the following warning, but it is not an issue for now:
To remove a user.
sudo prosodyctl unregister [user] [hostname]
Now that you have an authorized user or whenever you add or remove an authorized user, you need to restart the Jitsi components with the following command.
sudo systemctl restart {prosody,jicofo,jitsi-videobridge2,nginx}
Now only authorized users will be able to create and start Jitsi Meetings. Unprivileged users will will have to wait for the host to join a meeting and will be presented with the following screen.