Install Jitsi Meet on Ubuntu 22.04 – Self-Hosted Video Conferencing

This tutorial is going to show you how to install Jitsi Meet on Ubuntu 22.04 server. Jitsi Meet is a free open-source video conferencing software that works on Linux, macOS, Windows, iOS, and Android. If you don’t trust Zoom, you can run your own video conferencing platform on your own server.

Features of Jitsi Meet

  • Completely free of charge
  • Share your computer screen with others.
  • The presenter mode allows you to share your screen and camera at the same time, so attendees can see the presenter and their body language throughout the presentation.
  • You can share the system audio while sharing your screen.
  • You can assign authorized users as moderators. A moderator can mute every participant with one click.
  • Communication over the network is encrypted using DTLS-SRTP.
  • End-to-end encryption (work in progress)
  • You can set a password for your conference to prevent random strangers from coming in.
  • Record the meeting/conference and save it to Dropbox.
  • Stream to YouTube Live and store the recording on YouTube.
  • Android and iOS apps
  • Text chatting
  • Share text document
  • Telephone dial-in to a conference
  • Dial-out to a telephone participant
  • You can embed a Jits Meet call into any webpage with just a few lines of code.

Requirements of Installing Jitsi Meet on Ubuntu 22.04

To run Jitsi Meet, you need a server with at least 1GB RAM. If you are looking for a virtual private server (VPS), I recommend Kamatera VPS, which features:

  • 30 days free trial.
  • Starts at $4/month (1GB RAM)
  • High-performance KVM-based VPS
  • 9 data centers around the world, including the United States, Canada, UK, Germany, The Netherlands, Hong Kong, and Isreal.

Follow the tutorial linked below to create your Linux VPS server at Kamatera. The server should be close to your users, or the latency will be noticeable during online meetings.

When you have dozens of users, consider upgrading your server hardware.

You also need a domain name. I registered my domain name at NameCheap because the price is low and they give whois privacy protection free for life.

Step 1: Install Jitsi Meet from the Official Package Repository

Jitsi Meet isn’t included in the default Ubuntu repository. We can install it from the official Jitsi package repository, which also contains several other useful software packages. Log into your server via SSH, then run the following command to add the official Jitsi repository.

echo 'deb stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list

Import the Jitsi public key, so the APT package manager can verifiy the integrity of packages downloaded from this repository.

wget -qO - | sudo apt-key add -

Because the Jitsi repository requires HTTPS connection so we need to install apt-transport-https package to make APT establish HTTPS connection to the Jitsi repository.

sudo apt install apt-transport-https

Next, update local package index and install Jitsi Meet on Ubuntu.

sudo apt update 
sudo apt install jitsi-meet

During the installation, you need to enter a hostname for your Jitsi instance. This is the hostname that will appear in the web browser address bar when attendees join your video conference. You can use a descriptive hostname like


In the next screen, you can choose to generate a new self-signed TLS certificate, so later you can obtain and install a trusted Let’s Encryption certificate.


The installation process will configure some Linux kernel parameters, which is saved to the /etc/sysctl.d/20-jvb-udp-buffers.conf file. Once the installation is complete, Jitsi Meet will automatically start. You can check its status with:

systemctl status jitsi-videobridge2

Sample Output:

 jitsi-videobridge2.service - Jitsi Videobridge
     Loaded: loaded (/lib/systemd/system/jitsi-videobridge2.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-07-15 19:34:00 HKT; 41s ago
    Process: 22568 ExecStartPost=/bin/bash -c echo $MAINPID > /var/run/jitsi-videobridge/jitsi-videobridg>
   Main PID: 22567 (java)
      Tasks: 56 (limit: 65000)
     Memory: 224.3M
        CPU: 17.815s
     CGroup: /system.slice/jitsi-videobridge2.service

Hint: If the above command doesn’t quit immediately, you can press the Q key to make it quit.

The jitsi-meet package also installs other packages as dependencies, such as

  • openjdk-8-jre-headless: Java runtime environment. It’s needed because Jitsi Meet is written in the Java language.
  • jicofo: Jitsi conference Focus (systemctl status jicofo)
  • prosody: Lightweight Jabber/XMPP server (systemctl status prosody)
  • coturn: TURN and STUN server for VoIP
  • Nginx: /etc/nginx/sites-enabled/

Step 2: Install Coturn Server

Coturn is a free open-source TURN and STUN server for VoIP. Jitsi doesn’t install cotorn automatically on Ubuntu 22.04. We need to install it manually.

Download coturn deb package.


Install it with apt.

sudo apt install ./coturn_4.5.2-3.1_amd64.deb

Install the jitsi-meet-turnserver package.

sudo apt install jitsi-meet-turnserver

During installation, Jitsi will automatically configure coturn server (/etc/turnserver.conf).

Step 3: Open Ports in Firewall

Jitsi Meet listens on several UDP ports. To allow attendees to join a video conference from a web browser, you need to open TCP port 80 and 443. And to transfer video over the network, open UDP port 10000 and TCP port 5349. The Coturn server also needs to open the UDP 3478 port.

If you are using the UFW firewall, then run the following command to open these ports.

sudo ufw allow 22,80,443,5349/tcp

sudo ufw allow 10000,3478/udp

Step 4: Obtain a Trusted Let’s Encrypt TLS Certificate

Go to your DNS hosting service (usually your domain registrar) to create DNS A record for your Jitsi hostname ( Then run the following script to obtain a trusted Let’s Encrypt TLS certificate:

sudo /usr/share/jitsi-meet/scripts/

Enter your email address to receive important account notifications. Then it will install certbot and obtain TLS certificate.


If everything is ok, you will see the following message, indicating the TLS certificate has been successfully obtained and installed.

jitsi meet https letsencrypt certbot

Note that this script uses the http-01 challenge, which means your Apache or Nginx web server needs to listen on port 80 of the public IP address. If your server environment doesn’t support the http-01 challenge, then you should not run the above script. You need to use other challenge types. In my case, I use the DNS challenge.

sudo certbot --agree-tos -a dns-cloudflare -i nginx --redirect --hsts --staple-ocsp --email [email protected] -d


  • --agree-tos: Agree to terms of service.
  • -a dns-cloudflare: I use the cloudflare DNS plugin to authenticate because I use Cloudflare DNS service.
  • -i nginx: Use the nginx plugin to install the TLS certificate. If you use Apache, you need to replace nginx with apache.
  • --redirect: Force HTTPS by 301 redirect.
  • --hsts: Add the Strict-Transport-Security header to every HTTP response. Forcing browser to always use TLS for the domain. Defends against SSL/TLS Stripping.
  • --staple-ocsp: Enables OCSP Stapling. A valid OCSP response is stapled to the certificate that the server offers during TLS.

If you obtain TLS certificate by running the certbot command, then you need to update the TLS certificate and key file in

  • /etc/nginx/sites-enabled/
  •  /etc/turnserver.conf
  • /etc/prosody/conf.d/

Make sure the prosody, jicofo and jvb user can read the TLS certificate files.

sudo apt install acl
sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/live /etc/letsencrypt/archive/
sudo setfacl -R -m u:jicofo:rx /etc/letsencrypt/live /etc/letsencrypt/archive/
sudo setfacl -R -m u:jvb:rx /etc/letsencrypt/live /etc/letsencrypt/archive/

Don’t forget to restart these services.

sudo systemctl restart nginx coturn prosody jitsi-videobridge2 jicofo

Step 5: Enable HTTP2

HTTP2 can improve web page loading speed. To enable HTTP2 in Nginx, edit the virtual host config file.

sudo nano /etc/nginx/sites-enabled/

Find the following two lines.

listen 443 ssl;
listen [::]:443 ssl;

Add http2 at the end.

listen 443 ssl http2;
listen [::]:443 ssl http2;

By default, the Jitsi Meet virtual host logs to the standard Nginx log files (/var/log/nginx/access.log). It’s recommended to use a separate log file by adding the following two lines.

access_log /var/log/nginx/jitsi-meet.access
error_log /var/log/nginx/jitsi-meet.error

Save and close the file. Then reload Nginx for the change to take effect.

sudo systemctl reload nginx

Step 5: Start a New Online Meeting

Now visit and you will be able to start a conference. To transfer audio, you need to allow the web browser to use your microphone. And to tranfer video, you need to allow the web browser to access your camera.

Jitsi-meet-self-hosted online meeting

Give your meeting a name and click the Go button. After the meeting is started, you can optionally choose to set a password for your meeting.

Troubleshooting Tips

If you encounter errors, you can check the error log to find out what’s wrong.

  • /var/log/nginx/jitsi-meet.access
  • /var/log/nginx/jitsi-meet.error
  • /var/log/jitsi/jicofo.log
  • /var/log/jitsi/jvb.log

You can also check the logs of the systemd services.

sudo journalctl -eu jitsi-videobridge2 
sudo journalctl -eu prosody 
sudo journalctl -eu jicofo
sudo journalctl -eu coturn

For example, you might see the following error in the Prosody journal logs.

prosody[71580]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
prosody[71580]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281

You need to edit the /etc/prosody/conf.d/ file.

sudo nano /etc/prosody/conf.d/

Find the following lines.

ssl = {
    protocol = "tlsv1_2+";

Add the TLS certificate and key file.

ssl = {
    protocol = "tlsv1_2+";
    certificate = "/etc/letsencrypt/live/";
    key = "/etc/letsencrypt/live/";

Save and close the file. Then restart Prosody.

sudo systemctl restart prosody

Hint: Some folks forget to replace with their real Jisti Meet hostname, which can also cause errors.

Step 6: Set Up User Authentication

By default, anyone can go to your Jitsi Meet instance, create a room and start a meeting. To set up user authentication, edit the Prosody configuration file.

sudo nano /etc/prosody/conf.d/

Find the following line.

authentication = "anonymous"

Change it to the following, which will require the user to enter username and password to start a conference.

authentication = "internal_hashed"

However, we don’t want attendees to enter username and password when joining the conference, so we need to create an anonymous login for guests, by adding the following lines at the end of this file. Note that you don’t need to create DNS A record for

VirtualHost ""
    authentication = "anonymous"
    c2s_require_encryption = false

jitsi meet prosody user authentication

Save and close the file.

Next, edit the Jitsi Meet configuration file.

sudo nano /etc/jitsi/meet/

Find the following line,

// anonymousdomain: '',

Remove the double slashes and change the guest domain. Replace with your real Jitsi Meet hostname.

anonymousdomain: '',

Save and close the file.

Then edit the Jicofo configuration file.

sudo nano /etc/jitsi/jicofo/jicofo.conf

Add the following lines in this file.

  authentication: {
    enabled: true
    type: XMPP

Jisti Meet enable authentication

Save and close the file. Restart the systemd services for the changes to take effect.

sudo systemctl restart jitsi-videobridge2 prosody jicofo

To create user accounts in Jisi Meet, run the following command. You will be prompted to enter a password for the new user.

sudo prosodyctl register username

If you encounter this error: Account creation/modification not supported, it’s probably because the authentication parameter is still set to anonymous, or the virtual host name is wrong.

Now if you create a room in Jitsi Meet, you need to click the I am the host button.

jitsi meet waiting for the host

Then enter a username and password.

jitsi meet user authentication

Optional: Set Up Jigasi For Telephone Dial-in or Dial-Out

Jitsi offers a telephony interface that allows users to dial into a conference or place dial-out reminder calls. Install the jigasi package (Jitsi gateway for SIP).

sudo apt install jigasi

During the installation, you will need to enter your SIP username and password. If you don’t have one, you can create a free SIP account at

jitsi meet jigasi SIP gateway

If you have set up user authentication in step 6, then you need to edit Jigasi configuration file.

sudo nano /etc/jitsi/jigasi/

Find the following lines.

# org.jitsi.jigasi.xmpp.acc.USER_ID=SOME_USER@SOME_DOMAIN
# org.jitsi.jigasi.xmpp.acc.PASS=SOME_PASS
# org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false

Uncomment them and enter an account and password that you created in step 6.

org.jitsi.jigasi.xmpp.acc.USER_ID=[email protected]

Save and close the file. Restart the jigasi systemd service.

sudo systemctl status jigasi

Optional: Configure Coturn

If you see the following message during the installation of Jitsi Meet, you need to configure Coturn to make it work properly.

Warning! Could not resolve your external ip address! Error:^
Your turn server will not work till you edit your /etc/turnserver.conf config file.
You need to set your external ip address in external-ip and restart coturn service.

Edit the Coturn configuration file.

sudo nano /etc/turnserver.conf

Find the following line.


Replace with your server’s public IP address. Save and close the file. Then restart Coturn.

sudo systemctl restart coturn

Wrapping Up

I hope this tutorial helped you set up a Jitsi Meet server on Ubuntu 22.04. As always, if you found this post useful, then subscribe to our free newsletter to get new tutorials. Take care 🙂

Rate this tutorial
[Total: 9 Average: 5]

27 Responses to “Install Jitsi Meet on Ubuntu 22.04 – Self-Hosted Video Conferencing

  • 😃😃😃❤️❤️❤️👍👍👍

  • MorphZan
    4 years ago

    Thank you for this – worked perfectly and was up and running within 25min or so 🙂

  • So unfortunately I am unable to create my LE certificate. I keep getting 404: Not Found even though nginx is set up appropriately to listen on port 80, ufw is set to allow port 80, and the Digital Ocean firewall is set to allow port 80 as well. ):

    If I type in my address into my browser, it does take me to the Jitsi page, but of course only self-signed.

    I configured my server and a Matrix installation using this guide here, for reference:

    I’m at a loss for what to do here!

    • Xiao Guoan (Admin)
      4 years ago

      Maybe you can use the dns-01 challenge in certbot instead of the default http-01 chenllenge. It’s more reliable in my experience.

      You need to install certbot DNS plugins, depending on which DNS hosting service you are using. You can find available certbot DNS plugins with this command.

      apt search python3-certbot-dns

      Sample output:

      python3-certbot-dns-cloudflare/focal,focal,now 0.39.0-1 all [installed]
        Cloudflare DNS plugin for Certbot
      python3-certbot-dns-digitalocean/focal,focal 0.23.0-2 all
        DigitalOcean DNS plugin for Certbot
      python3-certbot-dns-dnsimple/focal,focal 0.31.0-1 all
        DNSimple DNS plugin for Certbot
      python3-certbot-dns-gandi/focal,focal 1.2.5-2 all
        Gandi LiveDNS plugin for Certbot
      python3-certbot-dns-gehirn/focal,focal 0.31.0-1 all
        Gehirn DNS plugin for Certbot
      python3-certbot-dns-google/focal,focal 0.23.0-2 all
        Google DNS plugin for Certbot
      python3-certbot-dns-linode/focal,focal 0.35.1-1 all
        Linode DNS plugin for Certbot
      python3-certbot-dns-ovh/focal,focal 0.31.0-1 all
        OVH DNS plugin for Certbot
      python3-certbot-dns-rfc2136/focal,focal 0.35.1-1 all
        RFC 2136 DNS plugin for Certbot
      python3-certbot-dns-route53/focal,focal 0.35.1-1 all
        Route53 DNS plugin for Certbot
      python3-certbot-dns-sakuracloud/focal,focal 0.31.0-1 all
        SakuraCloud DNS plugin for Certbot

      For example, my DNS zone is hosted by Cloudflare, so I install the cloudflare plugin.

      sudo apt install python3-certbot-dns-cloudflare

      Then I use the following command to obtain and install TLS certificate.

      sudo certbot --agree-tos -a dns-cloudflare -i nginx --redirect --hsts --staple-ocsp --email [email protected] -d
      • Thank you for this idea! I did try that while reading the article, but my DNS host doesn’t look to have a plugin available.

    • Xiao Guoan (Admin)
      4 years ago

      Can you paste the exact certbot error message here when running the script to obtain TLS certificate?

      • –2020-04-29 15:09:28–
        Resolving (…,,, …
        Connecting to (||:443… connected.
        HTTP request sent, awaiting response… 404 Not Found
        2020-04-29 15:09:28 ERROR 404: Not Found.

        I wonder if this is due to the nginx setup I have from the guide I followed in my original comment

    • Xiao Guoan (Admin)
      4 years ago

      The upstream certbot binary should be download from, not

      You can also install certbot from Ubuntu 22.04 repository and obtain the certificate yourself I think.

      sudo apt install certbot python3-certbot-nginx
  • Luis Sanhueza
    4 years ago

    Excelent!, thanks!

  • T.Paul Lee
    4 years ago

    Great post just in time for the new 22-04 LTS release.
    Thanks you!
    I benefit a great deal on the optional jigasi package for dial-in and dial-out. I was looking for that how-to all over the places.

  • Hello,
    thank you for the very good how-to!

    I had this as a problem after initialising jigasi:

    “Mai 03 19:28:15 server systemd[1]: /lib/systemd/system/jigasi.service:11: PIDFile= references a path below legacy directory /var/run/, updating /var/run/jigasi/ → /run/jigasi/; please update the unit file accordingly.”

    To solve this, I replaced every “/var/run” by “/run” in /lib/systemd/system/jigasi.service.

    Hope this helps someone.

    Have a great day!

  • Firstly I would like to thank you for these tips.i hosted jitsi on my premises.and configured Jigasi . I’m using FreePBX for my sip server.FreePBX operator panel shows that sip extension I assign to jigasi is Online.
    but I don’t know how to dial in or dial out with jitsi.
    can you explain it?

  • ricky bayu
    4 years ago

    It’s work, Thank You…


    How can we add recording video ?

    How to save record conference on my own computer?

    Thanks for Help…

  • Hi,

    Many thanks for your work !

    Everything is fine, I just have an error in the logs :

    prosody[7578]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281

    Any hints would be highly apreciated !

    Thanks again

    • Xiao Guoan (Admin)
      2 years ago

      You need to edit the /etc/prosody/conf.d/ file.

      sudo nano /etc/prosody/conf.d/

      Find the following lines.

      ssl = {
          protocol = "tlsv1_2+";

      Add the TLS certificate and key file.

      ssl = {
          protocol = "tlsv1_2+";
          certificate = "/etc/letsencrypt/live/";
          key = "/etc/letsencrypt/live/";

      Save and close the file. Make sure the prosody, jicofo and jvb user can read the TLS certificate files.

      sudo apt install acl
      sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/live /etc/letsencrypt/archive/
      sudo setfacl -R -m u:jicofo:rx /etc/letsencrypt/live /etc/letsencrypt/archive/
      sudo setfacl -R -m u:jvb:rx /etc/letsencrypt/live /etc/letsencrypt/archive/

      Then restart Prosody.

      sudo systemctl restart prosody
  • hi

    The installation of Jitsi meet is done successfully but wen I invite others to the meeting they cannot see me nor hear me nor see the screen I am sharing.
    Jitsi meet is installed on Ubuntu 16+ (bionic). please let me know how should I proceed on troubleshooting this issue.

  • davidrn9
    4 years ago

    Hi Xiao,
    I have a problem similar to the above. I installed Jitsi Meet on Ubuntu 20.04, as the above tutorial & it worked initially. However when I rebooted the server the next day, it didn’t work & shows no access on Port 80 from another IP.
    I think, using the forums this is because there is no program listening on port 80, so it’s closed and you can’t connect to the machine, & therefore Jitsi.
    They gave the solution for this: run a simple web server listening on port 80,
    something like , sudo python3 SimpleHTTPServer -m 80

    I am a newbie in Linux, but I know that cmd is wrong, there is no SimpleHTTPServer installed in Ubuntu 20.04.
    I would be very grateful if you would correct it, & suggest a suitable simple HTTPServer? Or any other solution, of course.
    Thanks for the tutorial,

  • Hello, thank you very much for your work. One question. In main subdomain works correctly, but in the one I created for guests,, the browsers detect an error in the certificate. In fact, when inspecting the certificate, it points to the domain but not to the sub-subdomain. Should we run the certbot again for the guest domain and configure it somehow?

    • Xiao Guoan (Admin)
      2 years ago

      There’s no need to and you should not create DNS A record for the guest domain. And don’t obtain a TLS certificate for the guest domain.

  • Seems to fail on ubuntu 20.04 maybe they changed something. The offical instructions are here if anyone wants to try

    • Anthony
      4 years ago

      I have it up and running on 20.04 without issue so far. Been up for almost 21 hours now. The instructions here were flawless in my experience.

    • Anis Sidhoumi
      2 years ago

      Hi there,
      Before all let me tell you that it’s great job.
      Did someone have the same strange behavior than me?
      I did install jitsi and the page could open normally and I can create a new room but when I try to join from another computer from the lan by using the same room it’s looks like it’s a new one and both users are the only ones participants in the room.
      Any idea about what’s going wrong with my installation
      Thanks in advance for your time

  • Insignia
    3 years ago

    This works perfectly. Thanks Linuxbabe for another great tutorial

  • barisor
    2 years ago

    Good, you can do a jitsi installation tutorial in 2022 because many things have changed, for example, sudo nano /etc/jitsi/jicofo/ is no longer found
    and it is complex because in the documentation and in google there is no way to solve it, I appreciate you taking into account my request:
    Pdt: Thank you for your knowledge. And there are many people with the same problem-
    Translated into english by google translator

  • Hi Xiao

    Is it possible to reverse-proxy coturn next to a Nextcloud installation since they’re both listen on 443. I read a success story in this article ( but I’m not proficient enough to set this up.

Leave a Comment

  • Comments with links are moderated by admin before published.
  • Your email address will not be published.
  • Use <pre> ... </pre> HTML tag to quote the output from your terminal/console.
  • Please use the community ( for questions unrelated to this article.
  • I don't have time to answer every question. Making a donation would incentivize me to spend more time answering questions.

The maximum upload file size: 2 MB. You can upload: image. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here